外部分析器支持
Julia为一些外部跟踪分析器提供了显式支持,使您能够获得运行时执行行为的高级概述。
目前支持的分析器有:
添加新区域
要添加新区域,请使用 JL_定时 宏。 通过搜索,您可以在整个代码库中找到许多示例 JL_定时. 要添加新类型的区域,请将其添加到 JL_TIMING_所有者 (并且可能 JL_TIMING_事件).
动态启用和禁用区域
该 JULIA_TIMING_SUBSYSTEMS环境变量允许您启用或禁用特定Julia运行的区域。 例如,将变量设置为 +GC,-推理 将启用 GC 区域和禁用 推论;推论 区域。
特蕾西探查器
Tracy是一个灵活的分析器,可以选择与Julia集成。
典型的Tracy会话可能如下所示:
安装Tracy配置文件查看器
获取配置文件查看器的最简单方法是添加 TracyProfiler_jll 打包并启动分析器:
run(TracyProfiler_jll.tracy())
|
注意在macOS上,您可能需要设置 |
要运行将跟踪保存到磁盘的"无头"实例,请使用
run(`$(TracyProfiler_jll.capture()) -o mytracefile.tracy`)
相反。
有关使用Tracy UI的信息,请参阅Tracy手册。
与特蕾西剖析朱莉娅
使用Tracy分析Julia的典型工作流程涉及使用以下方法启动Julia:
JULIA_WAIT_FOR_TRACY=1 ./julia -e '...'
环境变量确保Julia等待,直到它成功连接到Tracy探查器,然后再继续执行。 之后,使用Tracy profiler UI,单击 连接,并且Julia执行应该恢复,并且应该开始分析。
使用Tracy分析包预编译
要分析包预编译过程,最简单的方法是显式调用 基地。[医]编译 使用要预编译的包:
pkg = Base.identify_package("SparseArrays")
withenv("JULIA_WAIT_FOR_TRACY" => 1, "TRACY_PORT" => 9001) do
Base.compilecache(pkg)
end
在这里,我们为tracy使用自定义端口,这使得在Tracy UI中更容易找到要连接的正确客户端。
向区域添加元数据
各种 jl_timing_show_* 和 jl_timing_printf 函数可用于将字符串(或字符串)附加到区域。 例如,用于推断的跟踪区域显示正在推断的方法实例。
该 TracyCZoneColor 函数可以用来设置某个区域的颜色. 搜索代码库以查看它是如何使用的。