阈值与警报


可以为度量类型(Metric Kind)、分支(Branch)和测试床(Testbed)的唯一组合创建阈值。 它们是统计显著性测试,使用 Z-分数学生的t检验 来检测性能退化并生成警报。 当一个度量值低于阈值的下界限,或高于阈值的上界限,便会为那个度量值生成一条警报。

阈值在以下情况下工作最佳:

  • 基准运行之间没有极端差异
  • 基准运行完全独立于彼此
  • 单次基准运行的迭代次数少于历史度量值的10%

如果对于度量类型、分支和测试床的组合,历史度量值少于30,则应使用学生的t检验阈值,而__不应__使用Z-分数阈值。

The Normal Distribution https://commons.wikimedia.org/wiki/File:The_Normal_Distribution.svg
🐰 没事不要惊慌!一切都将在一分钟内解释清楚。

统计显著性测试

Z-分数

Z-分数测量一个度量值与历史度量值的平均值相差多少个标准差 (σ)。标准差(σ)也可以表示为一个下界或上界累积百分比。

例如,两个标准差(2σ)与上界的累积百分比97.7%是一样的,如上图所示。创建Z-分数阈值时,会使用累积百分比的小数表示法。 在这个例子中,上界的累积百分比97.7%将是上限 0.977。 实际上,这样的阈值对于延迟度量类型很有用。也就是说,更大的值会表明性能退化。

当较小的值代表性能退化时,比如在吞吐度量类型下,应该使用下界的累积百分比。下界的累积百分比97.7%将对应平均数以下两个标准差(-2σ)。这将以小数表示法表现为一个下界 0.977


🐰 提示:当使用Z-分数阈值时,将最小样本大小设定为至少30。

学生的t检验

学生的t检验测量一个给定度量值相对于历史度量值的平均值的出现概率。这个概率被称为置信区间(CI)。 置信区间(CI)表示为下界或上界的置信百分比。

例如,上界的置信百分比为95.0%表示95.0%的度量值应小于预期的最大值。创建t检验阈值时,会使用置信百分比的小数表示法。 在这个例子中,上界的置信百分比95.0%将是上界 0.95。 实际上,这样的阈值对于延迟度量类型很有用。也就是说,更大的值会表明性能退化。

当较小的值代表性能退化时,比如在吞吐度量类型下,应该使用下界的置信百分比。例如,一个下界的置信百分比为95.0%,意味着度量值应该大于预期的最小值。 这将以小数表示法表现为一个下界 0.95


🐰 提示:如果有少于30个历史度量值,使用t检验阈值。

统计显著性边界

统计显著性边界的含义取决于统计显著性测试:

  • Z-分数:标准差(σ)表示为十进制的累积百分比
  • t检验:置信区间(CI)表示为十进制的置信百分比

每个度量值(如果存在)都会根据阈值的统计显著性边界进行检查。这可能包括下界、上界或两者。每个边界都会计算一个边界限。然后将此边界限与当前度量值进行比较。如果该度量值落在边界限之外,将生成一个警报。

🐰 提示:如果要在边界被违反时失败CI构建,使用--err标志配合bencher run CLI子命令。

下界

可以为阈值设置下界。 它在较小的值代表性能退化时使用,比如在吞吐度量类型下。其值必须在 0.51.0 之间。

例如,如果你使用Z-分数,你的历史度量值有一个平均值 100 和标准差 10,那么下界 0.977 会创建一个下限 80.05。 任何小于 80.05 的值都会产生一个警报。

上界

可以为阈值设置上界。 它在较大的值代表性能退化时使用,比如在延迟度量类型下。 其值必须在 0.51.0 之间。

例如,如果你使用Z-分数,你的历史度量值有一个平均值 100 和标准差 10,那么上界 0.977 会创建一个上限 119.95。 任何大于 119.95 的值都会产生一个警报。

样本大小

最小样本大小

可以为阈值设置最小样本大小。 只有当历史度量值的数量大于或等于最小样本大小时,阈值才会进行其统计显著性测试。

最大样本大小

可以为阈值设置最大样本大小。 对于其统计显著性测试,阈值将仅限制最近的历史度量值,数量上不超过最大样本大小。

窗口大小

可以为阈值设置以秒为单位的窗口大小。 对于其统计显著性测试,阈值将仅限制最近的历史度量值,其时间不超过给定时间窗口范围。

警报

当度量值低于阈值的下界限制或高于阈值的上界限制时,将生成警报。在警报事件中如果要中断CI构建,使用--err标志配合bencher run CLI子命令。

禁止警报

有时候你可能希望针对某个基准测试禁止警报。 最好的方法是在该基准测试的名称后面添加以下特殊后缀之一:

  • _bencher_ignore
  • BencherIgnore
  • -bencher-ignore

例如,如果你的Benchmark被命名为 my_flaky_benchmark ,那么将名称改为 my_flaky_benchmark_bencher_ignore 就会从此忽略该特定的基准测试。 即使存在阈值,也不会对被忽略的基准测试进行检测。 但是,被忽略的基准测试的度量值仍然会被存储。 按我们的例子,my_flaky_benchmark_bencher_ignore 的结果仍会存储在数据库中的 my_flaky_benchmark 中。 如果你去掉后缀,恢复到原来的基准测试名称,那么事情将会直接继续前行。



🐰 恭喜!你已经学习了所有关于阈值与警报的内容!🎉


继续阅读:持续基准测试➡

🤖 该文档由 OpenAI GPT-4 自动生成。 它可能不准确并且可能包含错误。 如果您发现任何错误,请在 GitHub 上提出问题.