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


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

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

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

統計的継続的ベンチマーキング

クイックスタートDocker セルフホストのチュートリアルでの学習を受けて、 Save Walter Whiteプロジェクトに統計的継続的ベンチマーキングを追加しましょう。

🐰 必ず APIトークンを作成し、それをBENCHER_API_TOKEN環境変数として設定 してから先に進んでください!

まず、CIランナーを代表する新しいテストベッドを作成します。適切な名称ci-runnerとします。

bencher testbed create \
--name ci-runner \
save-walter-white-1234abcd
  1. bencher testbed create CLIサブコマンドを使用します。 詳細については、testbed createのドキュメントを参照してください。 (例: bencher testbed create)
  2. --nameオプションを望むテストベッド名に設定します。 (例: --name ci-runner)
  3. プロジェクトの引数としてSave Walter Whiteプロジェクトスラッグを指定します。 (例: 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サブコマンドを使用します。 詳細については、threshold createのドキュメントを参照してください。 (例: bencher threshold create)
  2. --branchオプションをデフォルトのmainブランチに設定します。 (例: --branch main)
  3. --testbedオプションを新しいci-runnerテストベッドに設定します。 (例: --testbed ci-runner)
  4. --measureオプションをbencher mockによって生成される内蔵のLatencyメジャーに設定します。 詳細については、Measureの定義を参照してください。 (例: --measure Latency)
  5. --testオプションをt-testスレッショルドに設定します。 スレッショルド & アラートで全体的な概要を参照してください。 (例: --test t-test)
  6. --upper-boundaryオプションを0.95のアッパーバウンダリーに設定します。 スレッショルド & アラートで全体的な概要を参照してください。 (例: --upper-boundary 0.95)
  7. プロジェクトの引数としてSave Walter Whiteプロジェクトスラッグを指定します。 (例: save-walter-white-1234abcd)

次に、CIでベンチマークを実行する準備が整いました。 すべてのCI環境は少し異なるため、次の例は説明的なものです。 より具体的な例については、GitHub Actionsでの継続的ベンチマーキング およびGitLab CI/CDでの継続的ベンチマーキングを参照してください。

CIでの変更をベンチマークしてmainブランチの歴史的ベースラインを作成し維持する必要があります:

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

CIでこのコマンドを初めて実行すると、 feature-branchブランチがまだ存在しないため、このブランチが作成されます。 新しいfeature-branchは、そのスタートポイントとしてmainブランチの ハッシュ32aea434d751648726097ed3ac760b57107edd8bを使用します。 これは、feature-branchbencher mockの結果を比較するために、 mainブランチからすべてのデータおよびスレッショルドのコピーを持つことを意味します、 最初の実行とすべての後続の実行で。

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

クイックスタート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: Mon, April 1, 2024 at 7:00:00 AM UTC