CIでRust Gungraunベンチマークを追跡する方法
Everett Pompeii
GungraunでRustコードをベンチマークする方法を学びましたを学んだので、次に、それらのベンチマークをCIで追跡する方法を見てみましょう。 継続的ベンチマークは、パフォーマンスの低下を引き起こさないように、各変更セットでベンチマークを実行するプラクティスです。 Gungraunベンチマークを使用して継続的ベンチマークを実装する最も簡単な方法は、Bencherを使用することです。
Bencherとは?
Bencherは、継続的ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下が_マージされる_前に検出し、防止することを可能にします。
- 実行: _まったく同じ_ベアメタルランナーとお気に入りのベンチマーキングツールを使用して、ベンチマークをローカルまたはCIで実行します。
bencherCLIはベアメタル上でのベンチマークの実行をオーケストレーションし、その結果を保存します。 - 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
- キャッチ: _まったく同じ_ベアメタルハードウェアを使用して、ローカルまたはCIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がマージされる前にそれを検出します。
機能の後退を防ぐためにユニットテストが実行されるのと同じ理由で、Bencherを使用してベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!
Bencher Cloud の手順
- Bencher Cloud アカウントを作成する。
- API トークンを作成し、それを秘密として CI に追加する。
- GitHub Actions や GitLab CI/CD のような CI のワークフローを作成する。
- Bencher CLI をインストールして CI ワークフローに組み込む。
-
CI ワークフロー内で
bencher runサブコマンドを使ってベンチマークを実行し、rust_gungraunアダプターを使用する。
Bencher Self-Hosted の手順
- Bencher Self-Hosted インスタンスを作成します。
- Bencher Self-Hosted インスタンスでアカウントを作成します。
- API トークンを作成し、それをシークレットとして CI に追加します。
- GitHub Actions や GitLab CI/CD など、CI のワークフローを作成します。
- CI ワークフローで Bencher CLI をインストール します。CLI のバージョンが Bencher Self-Hosted インスタンスのバージョンと一致していることを確認してください。
-
次のサブコマンドを使用して CI ワークフローでベンチマークを実行します:
bencher runrust_gungraunアダプターを使用して、--hostオプション を Bencher Self-Hosted インスタンスの URL に設定します。
🦀 Rust Gungraun
Rust Gungraun アダプター(rust_gungraun)は Gungraun の出力を想定しています。instructions、l1-hits、l2-hits、ram-hits、total-read-write、および estimated-cycles の Measures はデフォルトで収集されます。Gungraun が生成できる追加の Callgrind、Cachegrind、DHAT メトリクスもサポートされています。
これらの Measures では、報告された値(つまり value)のみが利用可能です。lower_value も upper_value も収集されません。
このアダプター用の Measures はすべてのプロジェクトでデフォルト作成されるわけではありません。ただし、このアダプターを使用すると、これらの Measures はプロジェクトに対して自動的に作成されます。
Gungraun は Iai-Callgrind の改名された後継です。
bencher run --adapter rust_gungraun "cargo bench"あなたの次のパフォーマンス回帰は自ら知らせてはくれません
レビューで捕まえるか、本番で代償を払うか。