Go Wiki:性能监控

Go 项目监控 Go 实现以及 golang.org/x/tools 等子存储库的性能特征。

基准测试

golang.org/x/benchmarks/cmd/bench 是我们性能测试的入口点。对于 Go 实现,它同时运行 Sweet(端到端基准测试)和 bent(微基准测试)基准测试套件。

对于golang.org/x/tools项目,它运行存储库的基准测试。

所有这些基准测试都可以手动调用,cmd/bench 也可以手动调用,但是直接使用 Sweet 和 bent 可能提供更好的用户体验。有关更多详细信息,请参阅其文档。

性能测试原则

与时俱进

我们的基准测试集经过精心策划。它允许随着时间的推移而改变。长时间坚持使用单个基准测试集很容易让我们陷入优化错误事物的境地。

始终进行比较

我们从不单独报告性能数据,只相对于某个基线进行报告。这种策略源于这样一个事实,即比较在不同时间(即使在同一硬件上)获取的性能数据会导致大量未考虑在内的噪声。一台机器或虚拟机的状态在某一天可能与下一天的状态大不相同。

我们将经过测试的源代码版本称为“实验”,将基线版本的源代码称为“基线”。

预提交

您是否有想要针对我们的基准测试运行的 Gerrit 更改?

在选择 SlowBot 时出现的“选择尝试作业”对话框中,选择包含单词perf的构建器。

性能测试有两种预提交构建器

工具存储库还有一个第三个特殊的预提交构建器,其中包含字符串perf_vs_gopls_0_11。它测量相对于工具存储库的release-branch-gopls.0.11分支的性能差异。

提交后

性能仪表板持续监控对主 Go 存储库和其他子存储库进行的每次提交的基准测试性能。更具体地说,仪表板显示图表,这些图表显示了不同基准测试随时间推移某些性能指标(也称为“单位”)的变化情况。使用页面顶部的导航界面进一步探索。

回归页面按最大回归到最大改进的顺序显示所有基准测试,然后显示所有没有统计学上明确答案的基准测试。

在图表中,红色表示回归,蓝色表示改进。

基线

在提交后,Go 存储库性能测试的基线版本会自动确定。对于针对发布分支上的更改的性能测试,基线始终是该分支的最新发布版(例如,release-branch.go1.21上 Go 1.21 的最新次要发布版)。对于针对树顶的性能测试,基线始终是 Go 的最新整体发布版。构建器名称中包含字符串perf_vs_release表示这一点,该构建器会生成这些基准测试结果。这意味着在每次 Go 的次要版本发布时,基线都会发生变化。这些基线变化可以在按指标视图中观察到。

子存储库上的性能测试通常针对某个已知的长期固定基线进行操作。对于工具存储库,它是release-branch-gopls.0.11分支的树顶。

按指标视图

单击任何图表的性能指标名称以查看该指标的性能差异的更详细的时间轴。

Image displaying which link to click to reach the per-metric
page.

此视图对于识别回归的罪魁祸首以及查明改进的来源特别有用。

有时,性能变化是由于基准测试已更改或正在使用的基线版本已更改而发生的。此视图还显示有关基线版本和用于生成结果的golang.org/x/benchmarks版本的信息,以帮助识别何时发生这种情况。


此内容是 Go Wiki 的一部分。