Документация Engee

Поддержка внешних профилировщиков

Страница в процессе перевода.

Julia обеспечивает явную поддержку некоторых внешних профилировщиков трассировки, что позволяет получить общие сведения о поведении среды выполнения.

В настоящее время поддерживаются следующие профилировщики:

Добавление новых зон

Для добавления новых зон служит макрос JL_TIMING. Чтобы найти примеры в базе кода, выполните поиск по запросу JL_TIMING. Чтобы добавить новый тип зоны, добавьте его в JL_TIMING_OWNERS (и, возможно, JL_TIMING_EVENTS).

Динамическое включение и отключение зон

Переменная среды JULIA_TIMING_SUBSYSTEMS позволяет включать или отключать зоны для конкретного запуска Julia. Например, при задании переменной значения +GC,-INFERENCE будут включены зоны GC и отключены зоны INFERENCE.

Профилировщик Tracy

Tracy — это гибкий профилировщик, который может быть дополнительно интегрирован с Julia.

Сборка Julia с помощью Tracy

Чтобы включить интеграцию Tracy, соберите Julia с дополнительным параметром WITH_TRACY=1 в файле Make.user.

Установка средства просмотра профиля Tracy

Самый простой способ получить средство просмотра профилей — добавить пакет TracyProfiler_jll и запустить профилировщик следующим образом:

run(TracyProfiler_jll.tracy())

В macOS можно задать переменную среды TRACY_DPI_SCALE со значением 1.0, если элементы пользовательского интерфейса в профилировщике кажутся чрезмерно большими.

Для запуска экземпляра без пользовательского интерфейса, сохраняющего трассировку на диск, используйте

run(`$(TracyProfiler_jll.capture()) -o mytracefile.tracy`)

вместо нее.

Сведения об использовании пользовательского интерфейса Tracy см. в руководстве к Tracy.

Профилирование Julia с помощью Tracy

Стандартный рабочий процесс для профилирования Julia с помощью Tracy предполагает запуск Julia с помощью переменной среды:

JULIA_WAIT_FOR_TRACY=1 ./julia -e '...'

Переменная среды гарантирует, что Julia будет ждать успешного подключения к профилировщику Tracy и затем продолжит выполнение. После этого в пользовательском интерфейсе профилировщика Tracy щелкните Connect (Подключить). Должно возобновиться выполнение Julia и начаться профилирование.

Профилирование предварительной компиляции пакетов с помощью Tracy

Для профилирования процесса предварительной компиляции пакета проще всего явно вызвать Base.compilecache с пакетом, который нужно предварительно скомпилировать:

pkg = Base.identify_package("SparseArrays")
withenv("JULIA_WAIT_FOR_TRACY" => 1, "TRACY_PORT" => 9001) do
    Base.compilecache(pkg)
end

Здесь мы используем пользовательский порт для Tracy, чтобы упростить поиск нужного клиента в пользовательском интерфейсе Tracy для подключения.

Добавление метаданных к зонам

Для добавления строки (или строк) к зоне можно использовать различные функции jl_timing_show_* и jl_timing_printf. Например, зона трассировки для вывода показывает экземпляр метода, который выводится.

С помощью функции TracyCZoneColor можно задать цвет определенной зоны. Просмотрите базу кода, чтобы понять, как она используется.

Просмотр файлов Tracy в браузере

На сайте по адресу https://topolarity.github.io/trace-viewer/ можно найти (экспериментальное) веб-средство просмотра трассировок Tracy.

Можно открыть локальный файл .tracy или указать URL-адрес из Интернета (например, файл в репозитории Github). Если вы загружаете файл трассировки из Интернета, можно также напрямую поделиться URL-адресом страницы с другими пользователями, чтобы они могли просмотреть ту же трассировку.

Включение выборок трассировки стека

Чтобы включить выборку стека вызовов в Tracy, выполните сборку Julia с приведенными далее параметрами в Make.user файле:

WITH_TRACY := 1
WITH_TRACY_CALLSTACKS := 1
USE_BINARYBUILDER_LIBTRACYCLIENT := 0

Вам также может понадобиться выполнить команду make -C deps clean-libtracyclient для принудительной пересборки Tracy.

Эта функция оказывает значительное влияние на размер трассировки и расходы на профилирование, поэтому рекомендуется по возможности отключать выборку стека вызовов, особенно если вы собираетесь делиться файлами трассировки в Интернете.

Обратите внимание, что среда выполнения JIT в Julia еще не интегрирована для символизации Tracy, поэтому функции Julia обычно будут неизвестны в этих трассировках стеков.

Профилировщик Intel VTune (ITTAPI)

Этот раздел еще не написан.