Go Wiki: PerformanceMonitoring
Go 项目监控 Go 实现的性能特征以及 golang.org/x/tools 等子存储库的性能特征。
Benchmarks
golang.org/x/benchmarks/cmd/bench
是我们性能测试的入口点。对于 Go 实现,它会运行 Sweet(端到端基准测试)和 bent(微基准测试)基准测试套件。
对于 golang.org/x/tools
项目,它会运行该存储库的基准测试。
所有这些基准测试都可以手动调用,cmd/bench
也可以,但直接使用 Sweet 和 bent 可能会提供更好的用户体验。有关更多详细信息,请参阅它们的文档。
性能测试原则
与时俱进
我们的基准测试集是经过精心挑选的。它允许随时间变化。长时间坚持使用单一基准测试集很容易让我们陷入优化错误事物的境地。
始终进行比较
我们从不孤立地报告性能数据,而仅相对于某个基准。这种策略源于这样一个事实:在很长的时间间隔内比较性能数据,即使在相同的硬件上,也可能产生大量无法解释的噪声。一天中机器或虚拟机的状态很可能与第二天机器或虚拟机的状态截然不同。
我们将被测试的源代码版本称为“实验”,将基准版本的源代码称为“基准”。
提交前
您是否有 Gerrit 更改需要针对我们的基准测试运行?
在选择 SlowBot 时出现的“选择 Tryjobs”对话框中,选择包含 perf
一词的构建器。
有两种提交前构建器用于性能测试
perf_vs_parent
,它独立衡量更改的性能差异。perf_vs_tip
,它衡量与更改所属存储库的当前树尖(tip-of-tree)相比的性能差异。(请记住在使用此项之前重新定位您的更改!)
还有一个针对工具存储库的第三个特殊提交前构建器,其中包含字符串 perf_vs_gopls_0_11
。这衡量了与工具存储库的 release-branch-gopls.0.11
分支相比的性能差异。
提交后
性能仪表板提供对主 Go 存储库和其他子存储库中每个提交的基准性能的持续监控。更具体地说,仪表板显示了不同基准测试在一段时间内特定性能指标(也称为“单位”)的变化图。使用页面顶部的导航界面进行进一步探索。
回归页面按从最大回归到最大改进的顺序显示所有基准测试,然后是所有没有统计学上明确答案的基准测试。
在图表中,红色表示回归,蓝色表示改进。
基准
在提交后,Go 存储库性能测试的基准版本会自动确定。对于发布分支上的更改的性能测试,基准始终是该分支的最新发布(例如,release-branch.go1.21
上的 Go 1.21 的最新次要发布)。对于树尖(tip-of-tree)的性能测试,基准始终是 Go 的最新整体发布。这由生成这些基准测试结果的构建器名称表示,该名称包含字符串 perf_vs_release
。这意味着在 Go 的每个次要发布时,基准都会发生变化。这些基准变化可以在每指标视图中观察到。
子存储库上的性能测试通常针对某个已知的长期固定基准进行。对于工具存储库,它是 release-branch-gopls.0.11
分支的树尖。
每指标视图
点击任何图表的性能指标名称,即可查看该指标性能差异的更详细时间线。
此视图对于识别回归的罪魁祸首和查明改进的来源特别有用。
有时,性能变化发生是因为基准测试发生了变化,或者因为正在使用的基准版本发生了变化。此视图还显示有关基准版本以及用于生成结果的 golang.org/x/benchmarks
版本的信息,以帮助识别这种情况何时发生。
此内容是 Go Wiki 的一部分。