閾値とアラート
閾値はメトリクスの種類、ブランチ、テストベッドの組み合わせごとに作成することができます。 これらは統計的に有意なテストで、 Zスコア または Student’s t検定 を用いてパフォーマンスの後退を検出し、アラートを生成します。 メトリクスが閾値の下限または上限を超えると、そのメトリクスに対してアラートが生成されます。
閾値が最も効果的なのは以下の場合です:
- ベンチマークの実行間で極端な差がない
- ベンチマークの実行が完全に独立している
- 単一のベンチマークの実行回数が過去のメトリクスの10%未満である
メトリクスの種類、ブランチ、テストベッドの組み合わせで過去のメトリクスが30未満の場合、 Student’s t検定の閾値を使用し、Zスコアの閾値を__*使用しないことが推奨されます。
🐰パニックにならないでください!これがすぐに意味を持つようになります。
統計的有意性検定
Zスコア
Zスコアは、与えられたメトリクスが過去のメトリクスの平均から上か下か標準偏差(σ)何個分かを測定します。 標準偏差(σ)は、下限 境界または 上限 境界の積算パーセンテージとしても表現することができます。
例えば、2つの標準偏差(2σ)は上図のように、上限 境界の累積パーセンテージの97.7%と同じです。
Zスコアの閾値を作成する際には、累積パーセンテージの小数表記を使用します。
この例では、上限 累積パーセンテージの97.7%は、上限値が 0.977
になります。
実際には、このような閾値はレイテンシメトリクスの種類に役立ちます。
つまり、大きな値はパフォーマンスの後退を示します。
スループットのメトリクス種類など、より小さい値がパフォーマンスの後退を示す場合には、下限 境界の積算パーセンテージを使用します。
下限 境界積算パーセンテージの97.7%は、平均以下の2つの標準偏差(-2σ)に対応します。
これは、下限値が 0.977
となる小数表記として示されます。
🐰 ヒント: Zスコアの閾値を使用するときには、最小サンプルサイズを30以上に設定します。
Student’s t検定
Student’s t検定は、与えられたメトリクスが過去のメトリクスの平均以上または以下である可能性がどれほど高いかを測定します。 この可能性は信頼区間(CI)と呼ばれます。 信頼区間(CI)は、下限 境界または 上限 境界の信頼パーセンテージとして表現されます。
例えば、上限 バウンダリの信頼パーセンテージが95.0%である場合、95.0%のメトリクスが予想する_max_よりも_少ない_ことを示します。
t検定の閾値を作成する際には、信頼パーセンテージの小数表記を使用します。
この例では、上限 バウンダリの信頼パーセンテージが95.0%であれば、上限値は 0.95
になります。
実際には、このような閾値はレイテンシメトリクスの種類に役立ちます。
つまり、大きな値はパフォーマンスの後退を示します。
スループットのメトリクス種類など、より小さい値がパフォーマンスの後退を示す場合には、下限 境界の信頼パーセンテージを使用します。
下限 境界の信頼パーセンテージが95.0%の場合は、メトリクスが予測される_最小_よりも_大きい_ことを示します。
これは、下限値が 0.95
となる小数表記として示されます。
🐰 ヒント: 過去のメトリクスが30未満の場合は、t検定の閾値を使用します。
統計的有意性の境界
統計的有意性の境界の意味は統計的有意性の検定によって異なります:
- Zスコア: 標準偏差(σ)を小数の積算パーセンテージで表現
- t検定: 信頼区間(CI)を小数の信頼パーセンテージで表現
存在する場合、各メトリクスは閾値の統計的有意性の境界に対して確認します。 これには、下限境界、上限境界、またはその両方が含まれます。 各境界について境界限界が計算されます。 この境界限界は現在のメトリクスと比較されます。 そのメトリクスが境界限界の範囲外に落ちる場合、アラートが生成されます。
🐰 ヒント: 境界が違反された場合にCIビルドを失敗させるには、
bencher run
CLIサブコマンドの--err
フラグを使用します。
下限境界
下限境界は閾値に設定することができます。
これは、小さい値がパフォーマンスの後退を示す場合、たとえばスループット指標の種類の場合に使用されます。
値は 0.5
から 1.0
の間の小数である必要があります。
例えば、Zスコアを使用し、過去のメトリクスが平均 100
、標準偏差 10
の場合、
下限の境界が 0.977
に設定されていると、下限の境界制限が 80.05
に設定されます。
80.05
より小さい値はアラートを生成します。
上限境界
上限境界は閾値に設定することができます。
これは、大きな値がパフォーマンスの後退を示す場合、たとえばレイテンシメトリクスの種類の場合に使用されます。
値は 0.5
から 1.0
の間の小数である必要があります。
例えば、Zスコアを使用し、過去のメトリクスが平均 100
、標準偏差 10
の場合、
上限の境界が 0.977
に設定されていると、上限の境界制限が 119.95
に設定されます。
119.95
より大きい値はアラートを生成します。
サンプルサイズ
最小サンプルサイズ
閾値の最小サンプルサイズを設定することができます。 過去のメトリクスの数が最小サンプルサイズ以上である場合にのみ、閾値は統計的有意性検定を行います。
最大サンプルサイズ
閾値の最大サンプルサイズを設定することができます。 閾値は、最新の過去のメトリクスのみを最大サンプルサイズで制限し、その統計的有意性検定を行います。
ウィンドウサイズ
閾値のウィンドウサイズを秒単位で設定することができます。 閾値は、指定された時間ウィンドウに収まる最新の過去のメトリクスのみを制限し、その統計的有意性検定を行います。
アラート
メトリクスが閾値の下限限界以下または上限限界以上の場合、アラートが生成されます。
アラートが出た際に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
の下にデータベースに保存されます。
接尾辞を取り除き、元のベンチマーク名に戻すと、中断したところから再開します。
🐰 おめでとうございます!閾値とアラートについてすべて学びました! 🎉