跳至正文

性能分析

在发布模式中编译 `oxlint`,并包含调试信息

进行性能分析时,你需要在发布模式中编译 `oxlint` 二进制文件,并启用调试信息。你可以通过向 `cargo build` 传递 `--profile release-with-debug` 来实现此目的

bash
cargo build --profile release-with-debug --bin oxlint

编译后,二进制文件将位于 `./target/release-with-debug/oxlint`。这是应该用于性能分析的二进制文件。

CPU - Samply

Samply 是一个使用 Firefox 分析器作为其 UI 的命令行 CPU 分析器。适用于 macOS 和 Linux。

要将 Samply 与 `oxlint` 一起使用,请运行 `samply record`,后跟 `oxlint` 命令和参数

bash
samply record ./target/release-with-debug/oxlint .

为了提升性能分析体验,你可以考虑以下一些选项

  • oxlint: --silent 将禁止诊断输出,并让分析更集中。
  • oxlint: --threads 1 将单线程运行检查器,这虽然速度较慢,但使针对单线程性能进行分析变得更容易。
  • samply record: --rate <number> 将以更高的速率对分析进行采样。默认值为 1000Hz(1ms),但增加此值将提供更多详细信息,但代价是分析文件较大。

例如,针对单线程运行 `oxlint`,采样率为 0.1ms

bash
samply record --rate 10000 ./target/release-with-debug/oxlint --silent --threads 1 .

CPU - Mac Xcode Instruments

cargo-instruments 是桥接 Mac Xcode instruments 的首选工具。

以下说明复制了 cargo instruments 的过程。

首先,安装 Xcode Instruments 命令行工具

bash
xcode-select --install

然后,如果你还没有这样做,确保编译了 oxlint 二进制文件

cargo instruments 在幕后调用 xcrun xctrace 命令,等同于

bash
xcrun xctrace record --template 'Time Profile' --output . --launch -- /path/to/oxc/target/release-with-debug/oxlint

运行以上命令会生成以下输出

Starting recording with the Time Profiler template. Launching process: oxlint.
Ctrl-C to stop the recording
Target app exited, ending recording...
Recording completed. Saving output file...
Output file saved as: Launch_oxlint_2023-09-03_4.41.45 PM_EB179B85.trace

打开跟踪文件 open Launch_oxlint_2023-09-03_4.41.45\ PM_EB179B85.trace

查看自顶向下的跟踪

  1. 在顶部面板中,单击 CPU
  2. 在左侧输入框中,单击 x,然后选择 时间分析器
  3. 在底部面板中,单击“调用树”,开启“反转调用树”并关闭按线程分隔。

对于内存和磁盘操作,使用 --template 'Allocations'--template '文件活动'

要获得更详细的 CPU 配置文件,例如 L1/L2 高速缓存未命中、周期和指令计数,以及分支预测信息,你需要使用自定义的“CPU 计数器”模板

  1. 打开 Instruments 并选择“CPU 计数器”模板。
  2. 在“CPU 计数器”设置中
    1. 开启“高频采样”选项。
    2. 在“高频采样”选项下方,单击加号图标并选择事件类型。一些建议事件类型
      • 周期 - 粗略了解在每个函数中花费了多少 CPU 周期。
      • 指令 - 粗略了解在每个函数中执行了多少 CPU 指令以及花费了多少周期
      • L1D_CACHE_MISS_LD - 从内存中加载数据时 L1 高速缓存未命中计数
  3. 在你启用了自己感兴趣的事件后,在“文件 > 另存为模板 ...”中保存模板并给它一个名称。
  4. 现在你可以将它与 xctrace 一起使用,方法是将模板名称传递给 --template 选项:xcrun xctrace record --template '我的自定义 CPU 计数器' --output . --launch -- /path/to/oxc/target/release-with-debug/oxlint

堆分配

试用 dhat

在 MIT 许可证下发布。