BencherでCIのベンチマークを追跡する方法


ほとんどのベンチマーク結果は一時的です。 ターミナルがスクロールバックの限界に達すると、その結果は消えてしまいます。 一部のベンチマークハーネスでは結果をキャッシュする機能がありますが、ほとんどはローカルでのみ行います。 Bencherは、お気に入りのベンチマークハーネスを使用しながら、ローカルとCIの両方の実行からベンチマークを追跡し、結果を比較することができます。

CIでのベンチマーク、すなわち継続的ベンチマークを行う際に人気のある比較方法は2つあります:

  • 統計的継続的ベンチマーク
    1. 基準となるベンチマーク結果を時間と共に追跡する
    2. この基準を統計的閾値と共に使用して、統計的境界を作成する
    3. 新しい結果をこの統計的境界と比較して、パフォーマンスの退行を検出する
  • 相対的継続的ベンチマーク
    1. 現在の基準コードのベンチマークを実行する
    2. パーセンテージ閾値を使用して、基準コードの境界を作成する
    3. 新しいバージョンのコードに切り替える
    4. 新しいバージョンのコードのベンチマークを実行する
    5. 新しいバージョンのコードの結果を基準コードの結果と比較して、パフォーマンスの退行を検出する

統計的連続ベンチマーク

クイックスタートおよびDocker セルフホストチュートリアルから続けて、 セーブ ウォルター ホワイトプロジェクトに統計的連続ベンチマークを追加しましょう。

🐰 続行する前に、 APIトークンを作成し、環境変数BENCHER_API_TOKENに設定していることを確認してください

まず、新しいテストベッドを作成して、CIランナーci-runnerを表現します。

bencher testbed create \
--name ci-runner \
save-walter-white-1234abcd
  1. bencher testbed create CLIサブコマンドを使用します。 詳細はテストベッド作成ドキュメントをご覧ください。 (例: bencher testbed create
  2. --nameオプションに希望するテストベッドの名前を設定します。 (例: --name ci-runner
  3. プロジェクト引数にはセーブ ウォルター ホワイトプロジェクトのスラッグを指定します。 (例: save-walter-white-1234abcd

次に、新しい閾値ci-runnerテストベッド用に作成します:

bencher threshold create \
--branch main \
--testbed ci-runner \
--measure Latency \
--test t-test \
--upper-boundary 0.95 \
save-walter-white-1234abcd
  1. bencher threshold create CLIサブコマンドを使用します。 詳細は閾値作成ドキュメントをご覧ください。 (例: bencher threshold create
  2. --branchオプションをデフォルトのmainブランチに設定します。 (例: --branch main
  3. --testbedオプションを新しいci-runnerテストベッドに設定します。 (例: --testbed ci-runner
  4. --measureオプションをbencher mockによって生成される組み込みのLatencyメジャーに設定します。 詳細はメジャーの定義をご覧ください。 (例: --measure Latency
  5. --testオプションをt-test閾値に設定します。 詳細は閾値とアラートをご覧ください。 (例: --test t-test
  6. --upper-boundaryオプションを0.95の上限に設定します。 詳細は閾値とアラートをご覧ください。 (例: --upper-boundary 0.95
  7. プロジェクト引数にはセーブ ウォルター ホワイトプロジェクトのスラッグを指定します。 (例: save-walter-white-1234abcd

これで、CIでベンチマークを実行する準備が整いました。 すべてのCI環境が少しずつ異なるため、以下の例は実際的というよりも説明的なものです。 より具体的な例は、GitHub Actionsにおける連続ベンチマークおよびGitLab CI/CDにおける連続ベンチマークをご覧ください。

mainブランチの履歴ベースラインをCIで毎回変更することで作成および維持する必要があります:

bencher run \
--project save-walter-white-1234abcd \
--branch main \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. feature-branchブランチのベンチマークを実行するには、bencher run CLIサブコマンドを使用します。 詳細はbencher run CLIサブコマンドをご覧ください。 (例: bencher run
  2. --projectオプションをプロジェクトスラッグに設定します。 詳細は—projectオプションのドキュメントをご覧ください。 (例: --project save-walter-white-1234abcd
  3. --branchオプションをデフォルトのブランチ名に設定します。 詳細はブランチ選択をご覧ください。 (例: --branch main
  4. --testbedオプションをテストベッド名に設定します。 詳細は—testbedオプションのドキュメントをご覧ください。 (例: --testbed ci-runner
  5. --adapterオプションを希望するベンチマークハーネスアダプタに設定します。 詳細はベンチマークハーネスアダプタをご覧ください。 (例: --adapter json
  6. --errフラグを設定して、アラートが生成された場合にコマンドを失敗させます。 詳細は閾値とアラートをご覧ください。 (例: --err
  7. ベンチマークコマンドの引数を指定します。 詳細はベンチマークコマンドをご覧ください。 (例: bencher mock

最後に、CIでパフォーマンスの退行を検出する準備が整いました。 以下に示すように、CIでfeature-branchという名前の新しい機能ブランチのパフォーマンスを追跡します:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--branch-start-point main \
--branch-start-point-hash 32aea434d751648726097ed3ac760b57107edd8b \
--branch-reset \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. feature-branchブランチのベンチマークを実行するには、bencher run CLIサブコマンドを使用します。 詳細はbencher run CLIサブコマンドをご覧ください。 (例: bencher run
  2. --projectオプションをプロジェクトスラッグに設定します。 詳細は—projectオプションのドキュメントをご覧ください。 (例: --project save-walter-white-1234abcd
  3. --branchオプションを機能ブランチ名に設定します。 詳細はブランチ選択をご覧ください。 (例: --branch feature-branch
  4. --branch-start-pointオプションを機能ブランチの開始ポイントに設定します。 詳細はブランチ選択をご覧ください。 (例: --branch-start-point main
  5. --branch-start-point-hashオプションを機能ブランチの開始ポイントgitハッシュに設定します。 詳細はブランチ選択をご覧ください。 (例: --branch-start-point-hash 32ae...dd8b
  6. --branch-resetフラグを設定して、常にブランチを開始ポイントにリセットします。 これにより、ベンチマークデータのドリフトを防止します。 詳細はブランチ選択をご覧ください。 (例: --branch-reset
  7. --testbedオプションをテストベッド名に設定します。 詳細は—testbedオプションのドキュメントをご覧ください。 (例: --testbed ci-runner
  8. --adapterオプションを希望するベンチマークハーネスアダプタに設定します。 詳細はベンチマークハーネスアダプタをご覧ください。 (例: --adapter json
  9. --errフラグを設定して、アラートが生成された場合にコマンドを失敗させます。 詳細は閾値とアラートをご覧ください。 (例: --err
  10. ベンチマークコマンドの引数を指定します。 詳細はベンチマークコマンドをご覧ください。 (例: bencher mock

このコマンドが最初にCIで実行されると、feature-branchブランチが作成されます(まだ存在しない場合)。 新しいfeature-branchは、ハッシュ32aea434d751648726097ed3ac760b57107edd8bmainブランチを開始ポイントとして使用します。 これにより、feature-branchmainブランチのすべてのデータと閾値のコピーを持ち、bencher mockの結果を最初とすべての後続の実行について比較します。

相対連続ベンチマーキング

クイックスタートDocker セルフホスティングのチュートリアルに引き続き、Save Walter Whiteプロジェクトに相対連続ベンチマーキングを追加しましょう。

🐰 APIトークンを作成し、BENCHER_API_TOKEN環境変数として設定していることを確認してください!

まず、CIランナを表す新しいTestbedをci-runnerとして作成する必要があります。

bencher testbed create \
--name ci-runner \
save-walter-white-1234abcd
  1. bencher testbed create CLIサブコマンドを使用します。 詳細については、testbed createのドキュメントを参照してください。 (例: bencher testbed create)
  2. --nameオプションを所望のTestbed名に設定します。 (例: --name ci-runner)
  3. プロジェクト引数としてSave Walter Whiteプロジェクトのスラッグを指定します。 (例: save-walter-white-1234abcd)

相対連続ベンチマーキングは、コードの2つのバージョンを並行して比較することができます。 これは、CI/CD環境がノイズの多い場合や、実行間で利用可能なリソースが大きく変動する場合に便利です。 この例では、mainブランチで実行された結果と、feature-branchという機能ブランチで実行された結果を比較します。 CI環境はそれぞれ異なるため、以下の例は説明的であり、実用的とは異なります。 より具体的な例については、GitHub Actionsでの連続ベンチマーキングおよびGitLab CI/CDでの連続ベンチマーキングを参照してください。

まず、CIでgitを使用してmainブランチをチェックアウトします:

git checkout main

次に、CIでmainブランチのベンチマークを実行します:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--branch-reset \
--testbed ci-runner \
--adapter json \
bencher mock
  1. mainブランチのベンチマークを実行するために、bencher run CLIサブコマンドを使用します。 完全な概要については、bencher run CLIサブコマンドを参照してください。 (例: bencher run)
  2. --projectオプションをプロジェクトスラッグに設定します。 詳細については、--projectのドキュメントを参照してください。 (例: --project save-walter-white-1234abcd)
  3. --branchオプションを機能ブランチ名に設定します。 完全な概要については、branch selectionを参照してください。 (例: --branch feature-branch)
  4. --branch-resetフラグを設定します。 完全な概要については、branch selectionを参照してください。 (例: --branch-reset)
  5. --testbedオプションをTestbed名に設定します。 詳細については、the --testedドキュメントを参照してください。 (例: --testbed ci-runner)
  6. 希望するベンチマークハーネスアダプターに--adapterオプションを設定します。 完全な概要については、benchmark harness adaptersを参照してください。 (例: --adapter json)
  7. ベンチマークコマンド引数を指定します。 完全な概要については、benchmark commandを参照してください。 (例: bencher mock)

CIでこのコマンドが初めて実行されるとき、feature-branchブランチはまだ存在しないため作成されます。 新しいfeature-branchには開始点、既存のデータ、閾値がありません。 後続の実行では、古いバージョンのfeature-branchがリネームされ、開始点、既存のデータ、閾値のない新しいfeature-branchが作成されます。

次に、CIで新しいfeature-branchブランチのための新しい閾値を作成する必要があります:

bencher threshold create \
--branch feature-branch \
--testbed ci-runner \
--measure Latency \
--test percentage \
--upper-boundary 0.25 \
save-walter-white-1234abcd
  1. bencher threshold create CLIサブコマンドを使用します。 詳細については、threshold createのドキュメントを参照してください。 (例: bencher threshold create)
  2. --branchオプションを新しいfeature-branchブランチに設定します。 (例: --branch feature-branch)
  3. --testbedオプションをci-runnerTestbedに設定します。 (例: --testbed ci-runner)
  4. bencher mockによって生成される組み込みのLatency測定を--measureオプションに設定します。 測定の定義については、definition of Measureを参照してください。 (例: --measure Latency)
  5. --testオプションをpercentage閾値に設定します。 完全な概要については、Thresholds & Alertsを参照してください。 (例: --test t-test)
  6. 上限値を0.25 (25%)に設定します。 完全な概要については、Thresholds & Alertsを参照してください。 (例: --upper-boundary 0.25)
  7. プロジェクト引数としてSave Walter Whiteプロジェクトのスラッグを指定します。 (例: save-walter-white-1234abcd)

次に、CIでgitを使用してfeature-branchブランチをチェックアウトします:

git checkout feature-branch

最後に、CIでfeature-branchのベンチマークを実行する準備が整いました:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. feature-branchのベンチマークを実行するために、bencher run CLIサブコマンドを使用します。 完全な概要については、bencher run CLIサブコマンドを参照してください。 (例: bencher run)
  2. --projectオプションをプロジェクトスラッグに設定します。 詳細については、--projectのドキュメントを参照してください。 (例: --project save-walter-white-1234abcd)
  3. --branchオプションを機能ブランチ名に設定します。 完全な概要については、branch selectionを参照してください。 (例: --branch feature-branch)
  4. --testbedオプションをTestbed名に設定します。 詳細については、the --testedドキュメントを参照してください。 (例: --testbed ci-runner)
  5. 希望するベンチマークハーネスアダプターに--adapterオプションを設定します。 完全な概要については、benchmark harness adaptersを参照してください。 (例: --adapter json)
  6. アラートが生成された場合にコマンドを失敗させるための--errフラグを設定します。 完全な概要については、Threshold & Alertsを参照してください。 (例: --err)
  7. ベンチマークコマンド引数を指定します。 完全な概要については、benchmark commandを参照してください。 (例: bencher mock)

CIでこのコマンドが実行されるたびに、feature-branchからの結果はmainからの最新の結果とのみ比較されます。



🐰 おめでとうございます! Bencherを使ってCIでベンチマークを追跡する方法を学びました! 🎉


GitHub ActionsにBencherを追加 ➡

GitLab CI/CDにBencherを追加 ➡

🤖 このドキュメントは OpenAI GPT-4 によって自動的に生成されました。 正確ではない可能性があり、間違いが含まれている可能性があります。 エラーを見つけた場合は、GitHub で問題を開いてください。.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, August 22, 2024 at 12:45:00 PM UTC