CIでRustのバイナリサイズを追跡する方法
Everett Pompeii
バイナリサイズは、特にRustでは、時間とともに肥大化することがあります。継続的ベンチマークは、変更セットごとにベンチマークを実行して、変更がパフォーマンスの低下を引き起こさないことを確認する手法です。バイナリサイズをベンチマークとして扱い、CIでそれを追跡することで、大きなバイナリサイズを検出できます。Rustのバイナリサイズに対する継続的ベンチマークを実施する最も簡単な方法は、Bencherを使用することです。
Bencherとは?
Bencherは、連続ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下を_productionに到達する_前に検出し、防止することを可能にします。
- 実行: お気に入りのベンチマーキングツールを使用してベンチマークをローカルまたはCIで実行します。
bencher
CLIは単にあなたの既存のベンチマークハーネスをラップし、その結果を保存します。 - 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
- キャッチ: CIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がProductionに到達する前にそれを検出します。
機能の後退を防ぐためにユニットテストがCIで実行されるのと同じ理由で、Bencherを使用してCIでベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!
Bencher Cloud の手順
- Bencher Cloud アカウントを作成する。
- API トークンを作成し、それを秘密として CI に追加する。
- GitHub Actions や GitLab CI/CD のような CI のワークフローを作成する。
- Bencher CLI をインストールして CI ワークフローに組み込む。
-
CIワークフローで
bencher run
サブコマンドを使用してRustコードをコンパイルします。--file-size
オプションをバイナリの出力パスに設定し、json
アダプターを使用します。
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 run
サブコマンドを使用してRustコードをコンパイルします。--file-size
オプションをバイナリの出力パスに設定し、json
アダプターを使用し、--host
オプションをBencher Self-HostedインスタンスのURLに設定します。
⚖️ ファイルサイズ
bencher run
CLIサブコマンドは、--file-size
オプションを使用して、納品物のファイルサイズ(つまりバイナリーサイズ)を追跡するために使用できます。--file-size
オプションは、サイズが測定されるファイルのファイルパスを期待します。内部的に、bencher run
は結果をBencher Metric Format (BMF) JSONとして出力します。したがって、明示的にthe json
adapterを使用することが良い習慣です。詳細については、ファイルサイズを追跡する方法を参照してください。
file-size
測定(つまり bytes (B)
)が収集されます。利用可能なのはファイルサイズ値(つまり value
)のみです。lower_value
や upper_value
は収集されません。file-size
測定は、すべてのプロジェクトにデフォルトで作成されるわけではありません。しかし、--file-size
オプションを使用した場合、この測定はプロジェクトに自動的に作成されます。
--file-size
オプションは、複数回使用して複数のファイルサイズを追跡することができます。
Track your benchmarks in CI
Have you ever had a performance regression impact your users? Bencher could have prevented that from happening with continuous benchmarking.