阈值与警报
阈值是你在Bencher中捕捉性能回归的方式。 每个阈值都会分配给一个唯一的组合:分支,测试台和度量。 阈值必须有一个下限,上限,或者同时具备。 每个边界都用于计算边界限制。 然后每个新的度量都会根据每个边界限制进行检查。
- 下限
- 当较小的值表示性能回归时,就会使用下限,如吞吐量度量。
- 上限
- 当较大的值表示性能回归时,就会使用上限,如延迟度量。
有几种类型的阈值:
警告
当新的度量值低于阈值的下界限或超过阈值的上界限时,会生成警告。
如果在出现警告的事件中失败了 CI 构建,请在使用 bencher run
CLI 子命令时设置 --err
标志。
抑制警告
有时,对特定的基准测试抑制警告可能很有用。 最好的方法是将这些特殊后缀添加至特定的基准测试名称中:
_bencher_ignore
BencherIgnore
-bencher-ignore
例如,如果你的基准测试命名为 my_flaky_benchmark
,那么将它重命名为 my_flaky_benchmark_bencher_ignore
就能忽略该特定基准测试的警告。
即使存在阈值,忽略的基准测试也不会被检查。
然而,忽略的基准测试的度量值仍然会被保存。
继续以我们的例子,my_flaky_benchmark_bencher_ignore
的结果依然会被保存在数据库中,名称为 my_flaky_benchmark
。
如果你移除后缀并恢复到原来的基准测试名称,一切会重新回到你停下的地方。
静态阈值
静态阈值是最简单的阈值类型。 如果一个新的度量低于设定的下界或高于设定的上界,系统会产生一个警报。 也就是说,下界/上界是明确的下界/上界限制。 必须设定下界、上界或者两者都设定。 当度量值需要保持在一个恒定范围内时,静态阈值效果最好, 比如指令计数。
-
静态阈值下界
- 静态阈值下界可以是任意浮点数。 当较小的值表明性能回归时,会使用它。 如果两者都指定,下界必须小于或等于上界。
- 例如,如果你设定了一个静态阈值,其下界设定为
100
, 那么下界限制也就是100
, 任何小于100
的值都会产生一个警报。
-
静态阈值上界
- 静态阈值上界可以是任意浮点数。 当较大的值表明性能回归时,会使用它。 如果两者都指定,上界必须大于或等于下界。
- 例如,如果你设定了一个静态阈值,其上界设定为
100
, 那么上界限制也就是100
, 任何大于100
的值都会产生一个警报。
统计阈值
所有其他阈值都是统计阈值。 每个统计阈值使用历史指标和唯一的统计显著性测试来确定是否生成警报。 因此,下/上边界对于不同的统计阈值意味着不同的事情。 除了设置下限和/或上限外,还可以控制使用哪些历史指标(即抽样)。
-
最小样本大小
- 可以为统计阈值设置最小样本大小。 只有当历史指标的数量大于或等于最小样本大小时,统计阈值才运行其统计显著性测试。 最小样本大小必须小于或等于最大样本大小(如果都指定了的话)。
-
最大样本大小
- 可以为统计阈值设置最大样本大小。 统计阈值将仅限于最近的历史指标,其上限为最大样本大小进行其统计显著性测试。 最大样本大小必须大于或等于最小样本大小(如果都指定了的话)。
-
窗口大小
- 可以为统计阈值设置一秒钟的窗口大小。 统计阈值将仅限于最近的历史指标,其上限为给定时间窗口进行其统计显著性测试。
百分比阈值
百分比阈值是最简单的统计阈值。 如果新的指标低于平均数的一定百分比(下界)或者高于平均数的一定百分比(上界),会生成一个警告。 必须设置下界、上界,或者两者。 当指标的值应该保持在已知的良好范围内时,百分比阈值效果最好。
-
百分比阈值下界
- 百分比阈值下界可以是大于等于零的任何百分比,以小数形式表示(例如:使用
0.10
代表10%
)。当较小的值表示性能退化时,将使用此阈值。 - 例如,如果你设置了一个下界为
0.10
的百分比阈值,而你的历史指标平均数为100
,那么下界限制将会是90
,任何小于90
的值都会生成一个警告。
- 百分比阈值下界可以是大于等于零的任何百分比,以小数形式表示(例如:使用
-
百分比阈值上界
- 百分比阈值上界可以是大于等于零的任何百分比,以小数形式表示(例如:使用
0.10
代表10%
)。当较大的值表示性能退化时,将使用此阈值。 - 例如,如果你设置了一个上界为
0.10
的百分比阈值,而你的历史指标平均数为100
,那么上界限制将会是110
,任何大于110
的值都会生成一个警告。
- 百分比阈值上界可以是大于等于零的任何百分比,以小数形式表示(例如:使用
z-分数阈值
z-分数阈值衡量的是新指标相较于历史指标均值的标准偏差 (σ)数量,计算方式使用z-分数。
z-分数阈值在以下情况下效果最好:
- 基准运行之间没有极端的差异
- 基准运行完全独立于彼此
- 单次基准运行的迭代次数少于历史指标的10%
- 至少有30个历史指标(样本量大小 >= 30)
对于z-分数阈值来说,标准偏差表达为小数累积百分比。 如果新指标低于某个左侧累积百分比(下界)或高于某个右侧累积百分比(上界)的历史指标,则会生成警报。 必须设定一个下界、一个上界或两者都设定。
-
z-分数阈值下界
- z-分数阈值下界可以是
0.5
和1.0
之间的任何正小数。 其中0.5
代表均值,1.0
代表所有可能的左侧值(-∞)。 当较小的值表示性能回归时使用。 - 例如,如果使用了一个下界为
0.977
的z-分数阈值,且历史指标的均值为100
,标准偏差为10
,那么下界点将会是80.05
,任何小于80.05
的值将会产生警报。
- z-分数阈值下界可以是
-
z-分数阈值上界
- z-分数阈值上界可以是
0.5
和1.0
之间的任何正小数。 其中0.5
代表均值,1.0
代表所有可能的右侧值(∞)。 当较大的值表示性能回归时使用。 - 例如,如果你用一个上界为
0.977
的z-分数阈值,且历史指标的均值为100
,标准偏差为10
,那么上界点将会是119.95
,任何大于119.95
的值将会产生警报。
- z-分数阈值上界可以是
t-检验阈值
t-检验阈值度量了新的指标超过或低于你历史指标的平均值的置信区间 (CI),使用的是学生t-检验。
t-检验阈值最适用于以下情况:
- 基准运行之间没有极端的差异
- 基准运行完全独立于彼此
- 单个基准运行的迭代次数少于历史指标的10%
对于t-检验阈值,置信区间以小数形式表示置信百分比。 如果新的指标低于一定的左侧置信百分比(下限)或高于你的历史指标的某个右侧置信百分比(上限),则会生成警报。 必须设置下限、上限或两者。
-
t-检验阈值下限
- t-检验阈值的下限可以是
0.5
和1.0
之间的任何正小数。其中0.5
代表平均值,1.0
代表所有可能的左侧值(-∞)。当较小的值会指示性能回归时,将使用它。 - 例如,如果你使用了一个设定了下限为
0.977
的t-检验阈值,并且你有25
个历史指标,平均值为100
,标准差为10
,那么下限限制将为78.96
,任何小于78.96
的值都会生成一个警报。
- t-检验阈值的下限可以是
-
t-检验阈值上限
- t-检验阈值上限可以是
0.5
和1.0
之间的任何正小数。其中0.5
代表平均值,1.0
代表所有可能的右侧值(∞)。当较大的值会指示性能回归时,将使用它。 - 例如,如果你使用了一个设定了上限为
0.977
的t-检验阈值,并且你有25
个历史指标,平均值为100
,标准差为10
,那么上限限制将为121.04
,任何大于121.04
的值都会生成一个警报。
- t-检验阈值上限可以是
对数正态阈值
对数正态阈值度量新的度量值超出或低于你历史度量值的中心位置的可能性,采用对数正态分布。
对数正态阈值最适用于:
- 基准运行完全独立于彼此
- 单次基准运行的迭代次数不到历史度量值的10%
- 所有数据都是正数(负数的自然对数是
undefined
)
对于对数正态阈值,可能性以小数百分比表示。 如果新的度量值低于历史度量值的某个左边百分比(下界),或高于历史度量值的某个右边百分比(上界),则会生成警告。 必须设置下界,上界或两者。
-
对数正态阈值下界
- 对数正态阈值下界可以是
0.5
和1.0
之间的任何正小数。此处的0.5
代表中心位置,1.0
代表所有可能的左边值(-∞)。当较小的值表示性能退化时使用。 - 例如,如果你使用一个下界为
0.977
的对数正态阈值,并且你有25
个历史度量值围绕100
集中,并有一个前一个异常值为200
,则下界会是71.20
,任何小于71.20
的值都会产生警告。
- 对数正态阈值下界可以是
-
对数正态阈值上界
- 对数正态阈值上界可以是
0.5
和1.0
之间的任何正小数。此处的0.5
代表中心位置,1.0
代表所有可能的右边值(∞)。当较大的值表示性能退化时使用。 - 例如,如果你使用一个上界为
0.977
的对数正态阈值,并且你有25
个历史度量值围绕100
集中,并有一个前一个异常值为200
,则上界会是134.18
,任何大于134.18
的值都会产生警告。
- 对数正态阈值上界可以是
四分位距离阈值
四分位距离阈值衡量新的指标相对于您历史指标的中位数有多少倍的四分位距离 (IQR)。 如果一个新的指标低于中位数的某个四分位距离的倍数 (下限),或高于中位数的某个四分位距离的倍数 (上限),则会生成警报。 必须设置下限、上限或两者。
-
四分位距离阈值下限
- 四分位距离阈值的下限可以是任何大于或等于零的倍数 (例如:用
2.0
代替2x
)。当较小的值表示性能退步时,会使用它。 - 例如,如果你设置了一个下限为
2.0
的四分位距离阈值,而你的历史指标中位数为100
,四分位距离为10
,那么下限将是80
,低于80
的任何值都会产生警报。
- 四分位距离阈值的下限可以是任何大于或等于零的倍数 (例如:用
-
四分位距离阈值上限
- 四分位距离阈值的上限可以是任何大于或等于零的倍数 (例如:用
2.0
代替2x
)。当较大的值表示性能退步时,会使用它。 - 例如,如果你设置了一个上限为
2.0
的四分位距离阈值,而你的历史指标中位数为100
,四分位距离为10
,那么上限将是120
,高于120
的任何值都会产生警报。
- 四分位距离阈值的上限可以是任何大于或等于零的倍数 (例如:用
Delta 四分位范围阈值
Delta四分位范围阈值测量新指标相较于历史指标的中位数,超出或低于平均百分比变化(Δ)四分位范围(IQR)的几倍。 如果新的指标比历史指标的中位数较低或较高的某ΔIQR的倍数(下边界)或某ΔIQR的倍数(上边界),将产生警报。 必须设定下边界、上边界或两者。
-
Delta 四分位范围阈值下边界
- Delta四分位范围阈值下边界可以是任何大于或等于零的乘数(例如:使用
2.0
表示2x
)。当较小的值表示性能退步时使用。 - 例如,如果你设置了一个下边界为
2.0
的Delta四分位范围阈值, 并且你的历史指标中位数为100
,四分位距为10
,平均四分位比例变化为0.2
(20%
), 下边界限度将为60
, 任何小于60
的值将产生警报。
- Delta四分位范围阈值下边界可以是任何大于或等于零的乘数(例如:使用
-
Delta 四分位范围阈值上边界
- Delta四分位范围阈值上边界可以是任何大于或等于零的乘数(例如:使用
2.0
表示2x
)。当较大的值表示性能退步时使用。 - 例如,如果你设置了一个上边界为
2.0
的Delta四分位范围阈值, 并且你的历史指标中位数为100
,四分位距为10
,平均四分位比例变化为0.2
(20%
), 上边界限度将为140
, 任何大于140
的值将产生警报。
- Delta四分位范围阈值上边界可以是任何大于或等于零的乘数(例如:使用
🐰 恭喜!你已经学习了所有关于阈值与警报的内容!🎉