Поддержка внешних профилировщиков
Страница в процессе перевода. |
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 можно задать переменную среды |
Для запуска экземпляра без пользовательского интерфейса, сохраняющего трассировку на диск, используйте
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 обычно будут неизвестны в этих трассировках стеков.