Perfcompare:效果比较试用构建器

“perfcompare”试用构建器是可选 CQ 试用构建器, 无需着陆即可衡量变更对效果的影响 (即用于提交前性能测试)。运行性能测试 并比较两者的结果 是否有任何性能降低或改进。

Google 员工可以参阅 Google 内部性能比较 文档

使用方式

对于 fuchsia.git CL

如需在 Gerrit CL 上运行 Perfcompare,请执行以下操作:

  • 启动构建:选择“选择 tryjobs”在 Gerrit 网页界面中 然后从列表中选择一个或多个 Perfcompare 构建器 架构师。一种快速的方法就是输入“perfcompare”进入 搜索字段,系统会对列表进行过滤 可用的 Perfcompare 构建器。
  • 获取结果:点击尝试构建器结果页面的链接 显示在 Gerrit 中的 CL 上。构建器运行完成后, 结果将位于“比较性能测试结果,而不使用和 with CL"->“stdout”(或“raw”)

目前,以下 Perfcompare 构建器可用且支持 运行 fuchsia.git 的性能测试:

  • terminal.x64-release-perfcompare近期版本): 这会在 Intel NUC 上运行 fuchsia.git 的性能测试 (x64)。这是 terminal.x64-release 构建器(即它运行同一组 性能测试)。

  • terminal.vim3-release-perfcompare近期版本): 这会在 VIM3 (ARM64) 上运行 fuchsia.git 的性能测试。这个 是 terminal.vim3-release 的 Perfcompare 版本 构建器。请注意,terminal.vim3-release 并非由 CQ 运行 因此它更有可能被破坏或者不稳定

对于 integration.git CL

integration.git CL 尚不支持 Perfcompare。

具体而言,更改 Jiri 清单文件中依赖项的 CL 或 尚不支持 jiri.lock 文件或使用 patches.json 的文件 Perfcompare。这包括用于更改预构建软件包的 CL,例如 工具链滚动 CL。

Perfcompare 不知道如何检出源代码和预构建版本 在这些情况下,CL 之前和之后的二进制文件,因此 会产生什么样的结果。它会产生一个发现结果: 即使 CL 确实更改了效果,也是如此。

输出示例

以下是在一个简单的测试中通过运行 Perfcompare 生成的部分输出 CL

Summary counts:
  2939 test cases in total
  2938 test cases had no significant difference (no_sig_diff)
  1 test case got faster
  0 test cases got slower
  0 test cases added
  0 test cases removed

Results from test cases with differences:

Test case                                 Improve/regress?  Factor change  Mean before         Mean after
----------------------------------------  ----------------  -------------  ------------------  -----------------
fuchsia.microbenchmarks: ExampleNoOpLoop  faster            0.143-0.145    405.36 +/- 0.39 ns  58.49 +/- 0.30 ns

Results from all test cases:

Test case                                      Improve/regress?  Factor change  Mean before        Mean after
---------------------------------------------  ----------------  -------------  -----------------  -----------------
...
fuchsia.microbenchmarks: Syscall/ManyArgs      no_sig_diff       0.986-1.008    92.94 +/- 0.66 ns  92.65 +/- 0.40 ns
fuchsia.microbenchmarks: Syscall/Null          no_sig_diff       0.993-1.007    84.33 +/- 0.40 ns  84.31 +/- 0.19 ns
fuchsia.microbenchmarks: Thread/CreateAndJoin  no_sig_diff       0.950-1.034    34229 +/- 711 ns   33935 +/- 739 ns
fuchsia.microbenchmarks: TicksGet              no_sig_diff       0.981-1.022    19.77 +/- 0.19 ns  19.81 +/- 0.21 ns
...

测试 CL 堆栈与单个 CL

Perfcompare 构建器可以衡量单个网页对性能的影响 CL,而不是 CL 堆叠。

例如,假设您有一系列 CL:P1、P2、P3、P4、P5, 其中 P1 是最早的(即,所有其他 CL 都依赖于它)。如果 您在 P3 上运行 Perfcompare,即“with CL”build 将包含 P1+P2+P3, 而“不使用 CL”build 将仅包含 P1+P2。

  • 这种方法可以衡量对未 已经加载完毕您可以有一个添加新效果的 CL 以及更改 被测软件在第二个 CL 上运行 Perfcompare 会 显示 CL 对新测试的影响。
  • 如果您想衡量补丁堆栈的整体效果 方法是将更改合并到单个 Git 提交中 (例如使用 git merge --squash),将其上传到 Gerrit,然后 并据此运行 Perfcompare

“with CL”和“不使用 CL”build

Perfcompare 构建器按顺序应用以下步骤 生成“with CL”和“不使用 CL”build:

  1. 从当前的 integration.git
  2. 将 CL 系列应用于结账流程,最多包含 CL 测试。以上代码使用 jiri patch,后者使用 git rebase
  3. 构建 Fuchsia。这使得“with CL”build。
  4. 取消应用结账时的最高 CL(将较早的 CL 保留 CL 系列(如果有)。可通过在应用 CL 系列的 Git 代码库中运行 git checkout HEAD^ 来实现此目的。
  5. 再次构建 Fuchsia,执行增量构建。这样, “不使用 CL”build。

第 1-3 步与非 Perfcompare 的 Fuchsia 尝试构建器相同。

限制

  • 使用 patches.json 或更改 Jiri 中依赖项的 CL 尚不支持清单文件。

如何在本地进行性能比较

Perfcompare 构建器使用 perfcompare.py(可比较) 。可以使用 perfcompare.py 来运行 在本地测试性能(即不使用 Fuchsia Infra) 比较各自的结果。请参阅 文档

如何下载原始性能结果

可以下载生成的原始性能测试结果 运行一个 Perfcompare 尝试构建器运行的结果。如果您想修改 perfcompare.py 执行的分析。为此,请使用 操作步骤:

  1. 找到 cas_instance 和 输出属性中的 perfcompare_dataset_digest 字段, Perfcompare build可以在构建页面找到 build(可通过 Gerrit 中的“Checks”标签页访问) 代码审核)。典型值的示例如下:

    • cas_instance="projects/chromium-swarm/instances/default_instance"
    • perfcompare_dataset_digest="3ff389154e02490f29e379564f7e70b3df66f74c3116ed50172cceec1e9d9888/165"

    如需从非 Perfcompare build 下载结果数据, 要使用的字段名称是 perf_dataset_digest,而不是 perfcompare_dataset_digest

  2. 通过运行以下命令下载数据集(使用 从 Fuchsia 检出中预构建的 cas 工具):

    ./prebuilt/tools/cas/cas download -cas-instance $CAS_INSTANCE -digest $DIGEST -dir $DEST_DIR
    
  3. 对下载的数据集运行 perfcompare.py

    python3 src/testing/perfcompare/perfcompare.py compare_perf $DEST_DIR/without_cl/ $DEST_DIR/with_cl/
    

请注意,RBE-CAS 系统仅将数据保留约 2-3 个月, 因此如果构建未运行,下载命令将失败 。(存留时间 (TTL) 的当前默认值, RBE-CAS 为 90 天。)