BencherでCIのベンチマークを追跡する方法
ほとんどのベンチマーク結果は一時的です。 ターミナルがスクロールバックの限界に達すると、その結果は消えてしまいます。 一部のベンチマークハーネスでは結果をキャッシュする機能がありますが、ほとんどはローカルでのみ行います。 Bencherは、お気に入りのベンチマークハーネスを使用しながら、ローカルとCIの両方の実行からベンチマークを追跡し、結果を比較することができます。
CIでのベンチマーク、すなわち継続的ベンチマークを行う際に人気のある比較方法は2つあります:
- 統計的継続的ベンチマーク
- 基準となるベンチマーク結果を時間と共に追跡する
- この基準を統計的閾値と共に使用して、統計的境界を作成する
- 新しい結果をこの統計的境界と比較して、パフォーマンスの退行を検出する
- 相対的継続的ベンチマーク
- 現在の基準コードのベンチマークを実行する
- パーセンテージ閾値を使用して、基準コードの境界を作成する
- 新しいバージョンのコードに切り替える
- 新しいバージョンのコードのベンチマークを実行する
- 新しいバージョンのコードの結果を基準コードの結果と比較して、パフォーマンスの退行を検出する
統計的継続的ベンチマーキング
クイックスタートとDocker セルフホストのチュートリアルでの学習を受けて、
Save Walter White
プロジェクトに統計的継続的ベンチマーキングを追加しましょう。
🐰 必ず APIトークンを作成し、それを
BENCHER_API_TOKEN
環境変数として設定 してから先に進んでください!
まず、CIランナーを代表する新しいテストベッドを作成します。適切な名称ci-runner
とします。
bencher testbed create
CLIサブコマンドを使用します。 詳細については、testbed create
のドキュメントを参照してください。 (例:bencher testbed create
)--name
オプションを望むテストベッド名に設定します。 (例:--name ci-runner
)- プロジェクトの引数として
Save Walter White
プロジェクトスラッグを指定します。 (例:save-walter-white-1234abcd
)
次に、ci-runner
テストベッド用の新しいスレッショルドを作成する必要があります:
bencher threshold create
CLIサブコマンドを使用します。 詳細については、threshold create
のドキュメントを参照してください。 (例:bencher threshold create
)--branch
オプションをデフォルトのmain
ブランチに設定します。 (例:--branch main
)--testbed
オプションを新しいci-runner
テストベッドに設定します。 (例:--testbed ci-runner
)--measure
オプションをbencher mock
によって生成される内蔵のLatency
メジャーに設定します。 詳細については、Measureの定義を参照してください。 (例:--measure Latency
)--test
オプションをt-test
スレッショルドに設定します。 スレッショルド & アラートで全体的な概要を参照してください。 (例:--test t-test
)--upper-boundary
オプションを0.95
のアッパーバウンダリーに設定します。 スレッショルド & アラートで全体的な概要を参照してください。 (例:--upper-boundary 0.95
)- プロジェクトの引数として
Save Walter White
プロジェクトスラッグを指定します。 (例:save-walter-white-1234abcd
)
次に、CIでベンチマークを実行する準備が整いました。 すべてのCI環境は少し異なるため、次の例は説明的なものです。 より具体的な例については、GitHub Actionsでの継続的ベンチマーキング およびGitLab CI/CDでの継続的ベンチマーキングを参照してください。
CIでの変更をベンチマークしてmain
ブランチの歴史的ベースラインを作成し維持する必要があります:
bencher run
CLIサブコマンドを使用して、feature-branch
ブランチのベンチマークを実行します。 thebencher run
CLIサブコマンドで全体的な概要を参照してください。 (例:bencher run
)--project
オプションをプロジェクトスラッグに設定します。 the--project
ドキュメントで詳細を参照してください。 (例:--project save-walter-white-1234abcd
)--branch
オプションをデフォルトのブランチ名に設定します。 ブランチ選択で全体的な概要を参照してください。 (例:--branch main
)--testbed
オプションをテストベッド名に設定します。 the--tested
ドキュメントで詳細を参照してください。 (例:--testbed ci-runner
)--adapter
オプションを望むベンチマークハーネスアダプタに設定します。 ベンチマークハーネスアダプターで全体的な概要を参照してください。 (例:--adapter json
)- アラートが生成された場合にコマンドを失敗させるための
--err
フラグを設定します。 スレッショルド & アラートで全体的な概要を参照してください。 (例:--err
) - ベンチマークコマンド引数を指定します。
ベンチマークコマンドで全体的な概要を参照してください。
(例:
bencher mock
)
CIでこのコマンドを初めて実行すると、
feature-branch
ブランチがまだ存在しないため、このブランチが作成されます。
新しいfeature-branch
は、そのスタートポイントとしてmain
ブランチの
ハッシュ32aea434d751648726097ed3ac760b57107edd8b
を使用します。
これは、feature-branch
がbencher mock
の結果を比較するために、
main
ブランチからすべてのデータおよびスレッショルドのコピーを持つことを意味します、
最初の実行とすべての後続の実行で。
相対連続ベンチマーキング
クイックスタートとDocker セルフホスティングのチュートリアルに引き続き、Save Walter White
プロジェクトに相対連続ベンチマーキングを追加しましょう。
🐰 APIトークンを作成し、
BENCHER_API_TOKEN
環境変数として設定していることを確認してください!
まず、CIランナを表す新しいTestbedをci-runner
として作成する必要があります。
bencher testbed create
CLIサブコマンドを使用します。 詳細については、testbed createのドキュメントを参照してください。 (例:bencher testbed create
)--name
オプションを所望のTestbed名に設定します。 (例:--name ci-runner
)- プロジェクト引数として
Save Walter White
プロジェクトのスラッグを指定します。 (例:save-walter-white-1234abcd
)
相対連続ベンチマーキングは、コードの2つのバージョンを並行して比較することができます。
これは、CI/CD環境がノイズの多い場合や、実行間で利用可能なリソースが大きく変動する場合に便利です。
この例では、main
ブランチで実行された結果と、feature-branch
という機能ブランチで実行された結果を比較します。
CI環境はそれぞれ異なるため、以下の例は説明的であり、実用的とは異なります。
より具体的な例については、GitHub Actionsでの連続ベンチマーキングおよびGitLab CI/CDでの連続ベンチマーキングを参照してください。
まず、CIでgit
を使用してmain
ブランチをチェックアウトします:
次に、CIでmain
ブランチのベンチマークを実行します:
main
ブランチのベンチマークを実行するために、bencher run
CLIサブコマンドを使用します。 完全な概要については、bencher run CLIサブコマンドを参照してください。 (例:bencher run
)--project
オプションをプロジェクトスラッグに設定します。 詳細については、--project
のドキュメントを参照してください。 (例:--project save-walter-white-1234abcd
)--branch
オプションを機能ブランチ名に設定します。 完全な概要については、branch selectionを参照してください。 (例:--branch feature-branch
)--branch-reset
フラグを設定します。 完全な概要については、branch selectionを参照してください。 (例:--branch-reset
)--testbed
オプションをTestbed名に設定します。 詳細については、the--tested
ドキュメントを参照してください。 (例:--testbed ci-runner
)- 希望するベンチマークハーネスアダプターに
--adapter
オプションを設定します。 完全な概要については、benchmark harness adaptersを参照してください。 (例:--adapter json
) - ベンチマークコマンド引数を指定します。
完全な概要については、benchmark commandを参照してください。
(例:
bencher mock
)
CIでこのコマンドが初めて実行されるとき、feature-branch
ブランチはまだ存在しないため作成されます。
新しいfeature-branch
には開始点、既存のデータ、閾値がありません。
後続の実行では、古いバージョンのfeature-branch
がリネームされ、開始点、既存のデータ、閾値のない新しいfeature-branch
が作成されます。
次に、CIで新しいfeature-branch
ブランチのための新しい閾値を作成する必要があります:
bencher threshold create
CLIサブコマンドを使用します。 詳細については、threshold create
のドキュメントを参照してください。 (例:bencher threshold create
)--branch
オプションを新しいfeature-branch
ブランチに設定します。 (例:--branch feature-branch
)--testbed
オプションをci-runner
Testbedに設定します。 (例:--testbed ci-runner
)bencher mock
によって生成される組み込みのLatency
測定を--measure
オプションに設定します。 測定の定義については、definition of Measureを参照してください。 (例:--measure Latency
)--test
オプションをpercentage
閾値に設定します。 完全な概要については、Thresholds & Alertsを参照してください。 (例:--test t-test
)- 上限値を
0.25
(25%
)に設定します。 完全な概要については、Thresholds & Alertsを参照してください。 (例:--upper-boundary 0.25
) - プロジェクト引数として
Save Walter White
プロジェクトのスラッグを指定します。 (例:save-walter-white-1234abcd
)
次に、CIでgit
を使用してfeature-branch
ブランチをチェックアウトします:
最後に、CIでfeature-branch
のベンチマークを実行する準備が整いました:
feature-branch
のベンチマークを実行するために、bencher run
CLIサブコマンドを使用します。 完全な概要については、bencher run CLIサブコマンドを参照してください。 (例:bencher run
)--project
オプションをプロジェクトスラッグに設定します。 詳細については、--project
のドキュメントを参照してください。 (例:--project save-walter-white-1234abcd
)--branch
オプションを機能ブランチ名に設定します。 完全な概要については、branch selectionを参照してください。 (例:--branch feature-branch
)--testbed
オプションをTestbed名に設定します。 詳細については、the--tested
ドキュメントを参照してください。 (例:--testbed ci-runner
)- 希望するベンチマークハーネスアダプターに
--adapter
オプションを設定します。 完全な概要については、benchmark harness adaptersを参照してください。 (例:--adapter json
) - アラートが生成された場合にコマンドを失敗させるための
--err
フラグを設定します。 完全な概要については、Threshold & Alertsを参照してください。 (例:--err
) - ベンチマークコマンド引数を指定します。
完全な概要については、benchmark commandを参照してください。
(例:
bencher mock
)
CIでこのコマンドが実行されるたびに、feature-branch
からの結果はmain
からの最新の結果とのみ比較されます。
🐰 おめでとうございます! Bencherを使ってCIでベンチマークを追跡する方法を学びました! 🎉