Skip to content

如何使用我们的内部工具来分析性能并保持 Zed 的快速运行。

粗略快速的 CPU 分析(火焰图)

查看 CPU 在哪些方面花费了最多的时间。强烈建议您使用 samply。它会在浏览器中打开一个交互式分析文件(具体是 firefox_profiler 的本地实例)。

有关如何安装和运行,请参阅 samply 的 README。

profile.json 文件不包含任何符号。Firefox 分析器可以为配置文件添加本地符号。为此,请点击右上角的“上传本地分析文件”按钮。

image

深入的 CPU 分析(追踪)

查看每个已标注函数调用耗时多久及其参数(如果已配置)。

使用 instrument 宏来标注任何需要在分析文件中出现的函数。更多详细信息请参阅 tracing-instrument

rust
// 在分析文件中显示此函数
#[instrument(skip_all)]
fn should_appear_in_profile(kitty: Cat) {
    sleep(QUITE_LONG)
}

然后使用 ZTRACING=1 cargo r --features tracy --release 编译 Zed。发布构建是可选的,但强烈推荐,因为和所有程序一样,Zed 的性能特征在优化后会发生显著变化。您不希望去解决在发布版本中并不存在的性能下降问题。

一次性设置/构建分析器:

下载分析器: linux x86_64 版本macos aarch64 版本

替代方案:自行构建

  • 克隆仓库:git@github.com:wolfpld/tracy.git
  • cd profiler && mkdir build && cd build
  • 运行 cmake 生成构建文件:cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
  • 构建分析器:ninja
  • [可选] 在 Linux 上将分析器移动到合适的位置,例如 ~/.local/bin

使用方法

打开分析器(tracy-profiler),您应该在“已发现的客户端”列表中看到 zed,点击它。 image

要查找耗时较长的函数,请参考下图: image

任务/异步分析

获取 zed 前台执行器和后台执行器的分析文件。检查是否有任何任务在前台阻塞时间过长或在后台占用过多(时钟)时间。

分析器始终在后台运行。您可以从其 UI 保存追踪文件或实时查看结果。

设置/构建导入器:

下载导入器: linux x86_64 版本mac aarch64 版本

替代方案:自行构建

保存追踪文件的方法:

  • 运行命令:zed open performance profiler
  • 点击保存按钮。这将打开一个保存对话框,如果对话框打开失败,追踪文件将保存在您的工作目录中。
  • 使用导入器转换配置文件以便导入到 tracy:./tracy-import-miniprofiler <performance_profile.miniprof.json的路径> output.tracy
  • 访问 https://tracy.nereid.pl/,点击左上角的“电源”按钮,然后打开保存的追踪文件。
  • 现在可以放大查看任务及其耗时情况

当函数执行缓慢时发出警告

rust
// 如果函数执行时间超过100毫秒则记录警告
let _timer = zlog::time!("my_function_name").warn_if_gt(std::time::Duration::from_millis(100));