Go Wiki: PerformanceMonitoring
Go プロジェクトは、Go の実装だけでなく、golang.org/x/tools のようなサブリポジトリのパフォーマンス特性も監視しています。
ベンチマーク
golang.org/x/benchmarks/cmd/bench は、当社のパフォーマンステストのエントリーポイントです。Go の実装では、Sweet (エンドツーエンドベンチマーク) と bent (マイクロベンチマーク) の両方のベンチマークスイートを実行します。
golang.org/x/tools プロジェクトでは、リポジトリのベンチマークを実行します。
これらのベンチマークはすべて、cmd/bench と同様に手動で呼び出すことができますが、Sweet と bent の両方を直接使用する方が、より良いユーザーエクスペリエンスが得られるでしょう。詳細については、それぞれのドキュメントを参照してください。
パフォーマンステストの原則
時代と共に変化する
当社のベンチマークセットはキュレーションされています。時間の経過とともに変更されることが許容されます。長期間にわたって単一のベンチマークセットに固執すると、間違ったものを最適化している状況に陥りやすくなります。
常に比較を実行する
当社はパフォーマンス数値を単独で報告することはなく、常に何らかのベースラインと比較して報告します。この戦略は、たとえ同じハードウェア上であっても、時間的に大きく離れて取得されたパフォーマンスデータを比較すると、説明されていない多くのノイズが発生する可能性があるという事実から来ています。ある日のマシンまたは VM の状態は、翌日のマシンまたは VM の状態とは大きく異なる可能性が高いです。
テスト対象のソースコードバージョンを「実験」、ベースラインのソースコードバージョンを「ベースライン」と呼びます。
プレコミット
Gerrit の変更を当社のベンチマークに対して実行したいですか?
SlowBot を選択すると表示される「Tryjobs の選択」ダイアログで、perf という単語を含むビルダーを選択してください。
パフォーマンステストには、2 種類のプレコミットビルダーがあります。
perf_vs_parentは、変更のパフォーマンス差分を単独で測定します。perf_vs_tipは、変更が適用されるリポジトリの現在の tip-of-tree とのパフォーマンス差分を測定します。(これを使用する前に、変更をリベースすることを忘れないでください!)
ツールリポジトリには、perf_vs_gopls_0_11 という文字列を含む特別なプレコミットビルダーがもう 1 つあります。これは、ツールリポジトリの release-branch-gopls.0.11 ブランチとのパフォーマンス差分を測定します。
ポストコミット
パフォーマンスダッシュボードは、メインの Go リポジトリおよびその他のサブリポジトリに行われるすべてのコミットについて、ベンチマークパフォーマンスの継続的な監視を提供します。具体的には、このダッシュボードは、さまざまなベンチマークについて、時間の経過に伴う特定のパフォーマンスメトリック(「単位」とも呼ばれる)の変化を示すグラフを表示します。さらに詳しく調べるには、ページ上部のナビゲーションインターフェースを使用してください。
回帰ページは、最大の回帰から最大の改善までの順にすべてのベンチマークを表示し、その後、統計的に明確な答えがないすべてのベンチマークを表示します。
グラフでは、赤は回帰を意味し、青は改善を意味します。
ベースライン
ポストコミットでは、Go リポジトリのパフォーマンステストのベースラインバージョンは自動的に決定されます。リリースブランチに対する変更のパフォーマンステストでは、ベースラインは常にそのブランチの最新リリースです(たとえば、release-branch.go1.21 の Go 1.21 の最新マイナーリリース)。tip-of-tree に対するパフォーマンステストでは、ベースラインは常に Go の最新の全体リリースです。これは、これらのベンチマーク結果を生成するビルダーの名前によって示され、その名前には perf_vs_release という文字列が含まれています。これは、Go のマイナーリリースごとにベースラインが変化することを意味します。これらのベースラインの変化は、メトリックごとのビューで観察できます。
サブリポジトリのパフォーマンステストは、通常、既知の長期的な固定ベースラインに対して実行されます。ツールリポジトリの場合、release-branch-gopls.0.11 ブランチの tip です。
メトリックごとのビュー
任意のグラフのパフォーマンスメトリック名をクリックすると、そのメトリックのパフォーマンス差分のより詳細なタイムラインが表示されます。

このビューは、回帰の原因を特定し、改善の原因を突き止めるのに特に役立ちます。
パフォーマンスの変化は、ベンチマークが変更されたり、使用されているベースラインバージョンが変更されたりするために発生することがあります。このビューでは、このような場合に、いつ発生したかを特定するのに役立つように、ベースラインバージョンと、結果を生成するために使用された golang.org/x/benchmarks のバージョンに関する情報も表示されます。
このコンテンツはGo Wikiの一部です。