External Profiler Support
Julia предоставляет явную поддержку для некоторых внешних трассировочных профилировщиков, позволяя вам получить общее представление о поведении выполнения времени выполнения.
В настоящее время поддерживаемые профайлеры:
Adding New Zones
Чтобы добавить новые зоны, используйте макрос JL_TIMING
. Вы можете найти множество примеров в кодовой базе, поискав JL_TIMING
. Чтобы добавить новый тип зоны, добавьте его в JL_TIMING_OWNERS
(и, возможно, в JL_TIMING_EVENTS
).
Dynamically Enabling and Disabling Zones
Переменная окружения JULIA_TIMING_SUBSYSTEMS
позволяет вам включать или отключать зоны для конкретного запуска Julia. Например, установка переменной в +GC,-INFERENCE
включит зоны GC
и отключит зоны INFERENCE
.
Tracy Profiler
Tracy является гибким профайлером, который можно опционально интегрировать с Julia.
Типичная сессия Tracy может выглядеть так:
Building Julia with Tracy
Чтобы включить интеграцию с Tracy, соберите Julia с дополнительным параметром WITH_TRACY=1
в файле Make.user
.
Installing the Tracy Profile Viewer
Самый простой способ получить просмотрщик профиля — это добавить пакет TracyProfiler_jll
и запустить профайлер с помощью:
run(TracyProfiler_jll.tracy())
На macOS вы можете установить переменную окружения TRACY_DPI_SCALE
в 1.0
, если элементы интерфейса в профайлере выглядят чрезмерно большими.
Чтобы запустить "безголовый" экземпляр, который сохраняет трассировку на диск, используйте
run(`$(TracyProfiler_jll.capture()) -o mytracefile.tracy`)
вместо.
Для получения информации о использовании интерфейса Tracy, обратитесь к руководству Tracy.
Profiling Julia with Tracy
Типичный рабочий процесс профилирования Julia с помощью Tracy включает в себя запуск Julia с использованием:
JULIA_WAIT_FOR_TRACY=1 ./julia -e '...'
Переменная окружения гарантирует, что Julia будет ждать, пока она успешно подключится к профайлеру Tracy, прежде чем продолжить выполнение. После этого используйте интерфейс профайлера Tracy, нажмите Connect
, и выполнение Julia должно возобновиться, а профилирование должно начаться.
Profiling package precompilation with Tracy
Чтобы профилировать процесс предкомпиляции пакета, проще всего явно вызвать Base.compilecache
с пакетом, который вы хотите предкомпилировать:
pkg = Base.identify_package("SparseArrays")
withenv("JULIA_WAIT_FOR_TRACY" => 1, "TRACY_PORT" => 9001) do
Base.compilecache(pkg)
end
Здесь мы используем пользовательский порт для tracy, что упрощает поиск правильного клиента в интерфейсе Tracy для подключения.
Adding metadata to zones
Различные функции jl_timing_show_*
и jl_timing_printf
могут быть использованы для привязки строки (или строк) к зоне. Например, зона трассировки для вывода показывает экземпляр метода, который выводится.
Функция TracyCZoneColor
может быть использована для установки цвета определенной зоны. Просмотрите кодовую базу, чтобы увидеть, как она используется.
Viewing Tracy files in your browser
Посетите https://topolarity.github.io/trace-viewer/ для (экспериментального) веб-просмотрщика трасс Tracy.
Вы можете открыть локальный файл .tracy
или предоставить URL из интернета (например, файл в репозитории Github). Если вы загружаете файл трассировки из интернета, вы также можете напрямую поделиться URL страницы с другими, позволяя им просматривать ту же трассировку.
Enabling stack trace samples
Чтобы включить выборку стека вызовов в 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) Profiler
Этот раздел еще предстоит написать.