BencherでCIのベンチマークを追跡する方法
ほとんどのベンチマーク結果は一時的です。 ターミナルがスクロールバックの限界に達すると、その結果は消えてしまいます。 一部のベンチマークハーネスでは結果をキャッシュする機能がありますが、ほとんどはローカルでのみ行います。 Bencherは、お気に入りのベンチマークハーネスを使用しながら、ローカルとCIの両方の実行からベンチマークを追跡し、結果を比較することができます。
CIでのベンチマーク、すなわち継続的ベンチマークを行う際に人気のある比較方法は2つあります:
- 統計的継続的ベンチマーク
- 基準となるベンチマーク結果を時間と共に追跡する
- この基準を統計的閾値と共に使用して、統計的境界を作成する
- 新しい結果をこの統計的境界と比較して、パフォーマンスの退行を検出する
- 相対的継続的ベンチマーク
- 現在の基準コードのベンチマークを実行する
- パーセンテージ閾値を使用して、基準コードの境界を作成する
- 新しいバージョンのコードに切り替える
- 新しいバージョンのコードのベンチマークを実行する
- 新しいバージョンのコードの結果を基準コードの結果と比較して、パフォーマンスの退行を検出する
統計的連続ベンチマーク
クイックスタートおよびDocker セルフホストチュートリアルから続けて、
セーブ ウォルター ホワイト
プロジェクトに統計的連続ベンチマークを追加しましょう。
🐰 続行する前に、 APIトークンを作成し、環境変数
BENCHER_API_TOKEN
に設定していることを確認してください!
まず、新しいテストベッドを作成して、CIランナーci-runner
を表現します。
bencher testbed create
CLIサブコマンドを使用します。 詳細はテストベッド作成ドキュメントをご覧ください。 (例:bencher testbed create
)--name
オプションに希望するテストベッドの名前を設定します。 (例:--name ci-runner
)- プロジェクト引数には
セーブ ウォルター ホワイト
プロジェクトのスラッグを指定します。 (例:save-walter-white-1234abcd
)
次に、新しい閾値をci-runner
テストベッド用に作成します:
bencher threshold create
CLIサブコマンドを使用します。 詳細は閾値作成ドキュメントをご覧ください。 (例:bencher threshold create
)--branch
オプションをデフォルトのmain
ブランチに設定します。 (例:--branch main
)--testbed
オプションを新しいci-runner
テストベッドに設定します。 (例:--testbed ci-runner
)--measure
オプションをbencher mock
によって生成される組み込みのLatency
メジャーに設定します。 詳細はメジャーの定義をご覧ください。 (例:--measure Latency
)--test
オプションをt-test
閾値に設定します。 詳細は閾値とアラートをご覧ください。 (例:--test t-test
)--upper-boundary
オプションを0.95
の上限に設定します。 詳細は閾値とアラートをご覧ください。 (例:--upper-boundary 0.95
)- プロジェクト引数には
セーブ ウォルター ホワイト
プロジェクトのスラッグを指定します。 (例:save-walter-white-1234abcd
)
これで、CIでベンチマークを実行する準備が整いました。 すべてのCI環境が少しずつ異なるため、以下の例は実際的というよりも説明的なものです。 より具体的な例は、GitHub Actionsにおける連続ベンチマークおよびGitLab CI/CDにおける連続ベンチマークをご覧ください。
main
ブランチの履歴ベースラインをCIで毎回変更することで作成および維持する必要があります:
feature-branch
ブランチのベンチマークを実行するには、bencher run
CLIサブコマンドを使用します。 詳細はbencher run CLIサブコマンドをご覧ください。 (例:bencher run
)--project
オプションをプロジェクトスラッグに設定します。 詳細は—projectオプションのドキュメントをご覧ください。 (例:--project save-walter-white-1234abcd
)--branch
オプションをデフォルトのブランチ名に設定します。 詳細はブランチ選択をご覧ください。 (例:--branch main
)--testbed
オプションをテストベッド名に設定します。 詳細は—testbedオプションのドキュメントをご覧ください。 (例:--testbed ci-runner
)--adapter
オプションを希望するベンチマークハーネスアダプタに設定します。 詳細はベンチマークハーネスアダプタをご覧ください。 (例:--adapter json
)--err
フラグを設定して、アラートが生成された場合にコマンドを失敗させます。 詳細は閾値とアラートをご覧ください。 (例:--err
)- ベンチマークコマンドの引数を指定します。
詳細はベンチマークコマンドをご覧ください。
(例:
bencher mock
)
最後に、CIでパフォーマンスの退行を検出する準備が整いました。
以下に示すように、CIでfeature-branch
という名前の新しい機能ブランチのパフォーマンスを追跡します:
feature-branch
ブランチのベンチマークを実行するには、bencher run
CLIサブコマンドを使用します。 詳細はbencher run CLIサブコマンドをご覧ください。 (例:bencher run
)--project
オプションをプロジェクトスラッグに設定します。 詳細は—projectオプションのドキュメントをご覧ください。 (例:--project save-walter-white-1234abcd
)--branch
オプションを機能ブランチ名に設定します。 詳細はブランチ選択をご覧ください。 (例:--branch feature-branch
)--branch-start-point
オプションを機能ブランチの開始ポイントに設定します。 詳細はブランチ選択をご覧ください。 (例:--branch-start-point main
)--branch-start-point-hash
オプションを機能ブランチの開始ポイントgit
ハッシュに設定します。 詳細はブランチ選択をご覧ください。 (例:--branch-start-point-hash 32ae...dd8b
)--branch-reset
フラグを設定して、常にブランチを開始ポイントにリセットします。 これにより、ベンチマークデータのドリフトを防止します。 詳細はブランチ選択をご覧ください。 (例:--branch-reset
)--testbed
オプションをテストベッド名に設定します。 詳細は—testbedオプションのドキュメントをご覧ください。 (例:--testbed ci-runner
)--adapter
オプションを希望するベンチマークハーネスアダプタに設定します。 詳細はベンチマークハーネスアダプタをご覧ください。 (例:--adapter json
)--err
フラグを設定して、アラートが生成された場合にコマンドを失敗させます。 詳細は閾値とアラートをご覧ください。 (例:--err
)- ベンチマークコマンドの引数を指定します。
詳細はベンチマークコマンドをご覧ください。
(例:
bencher mock
)
このコマンドが最初にCIで実行されると、feature-branch
ブランチが作成されます(まだ存在しない場合)。
新しいfeature-branch
は、ハッシュ32aea434d751648726097ed3ac760b57107edd8b
のmain
ブランチを開始ポイントとして使用します。
これにより、feature-branch
はmain
ブランチのすべてのデータと閾値のコピーを持ち、bencher mock
の結果を最初とすべての後続の実行について比較します。
相対連続ベンチマーキング
クイックスタートと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でベンチマークを追跡する方法を学びました! 🎉