Go Wiki: パフォーマンスモニタリング

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種類のプレサブミットビルダがあります。

toolsリポジトリ用の3つ目の特別なプレサブミットビルダもあり、文字列perf_vs_gopls_0_11を含んでいます。これは、toolsリポジトリのrelease-branch-gopls.0.11ブランチに対するパフォーマンス差を測定します。

ポストサブミット

パフォーマンスダッシュボードは、メインのGoリポジトリと他のサブリポジトリに行われたすべてのコミットについて、ベンチマークパフォーマンスの継続的な監視を提供します。具体的には、ダッシュボードは、さまざまなベンチマークについて、時間とともに変化する特定のパフォーマンス指標(「単位」とも呼ばれます)を示すグラフを表示します。ページ上部のナビゲーションインターフェースを使用して、さらに詳しく調べることができます。

回帰ページは、最大の回帰から最大の改善へと並べられたすべてのベンチマークと、統計的に明確な答えがないすべてのベンチマークを表示します。

グラフでは、赤色は回帰、青色は改善を示しています。

ベースライン

ポストサブミットでは、Goリポジトリのパフォーマンステストのベースラインバージョンは自動的に決定されます。リリースブランチの変更に対するパフォーマンステストでは、ベースラインは常にそのブランチの最新のリリースです(たとえば、release-branch.go1.21のGo 1.21の最新のマイナーリリース)。tip-of-treeに対するパフォーマンステストでは、ベースラインは常にGoの最新の全体的なリリースです。これは、これらのベンチマーク結果を生成するビルダの名前(文字列perf_vs_releaseを含む)によって示されます。これは、Goのマイナーリリースごとにベースラインがシフトすることを意味します。これらのベースラインのシフトは、メトリックごとのビューで確認できます。

サブリポジトリのパフォーマンステストは、通常、既知の長期的な固定ベースラインに対して動作します。toolsリポジトリの場合、それはrelease-branch-gopls.0.11ブランチの先端です。

メトリックごとのビュー

グラフのパフォーマンス指標名をクリックすると、その指標のパフォーマンス差の詳細なタイムラインを表示できます。

Image displaying which link to click to reach the per-metric
page.

このビューは、回帰の原因を特定し、改善のソースを特定するのに特に役立ちます。

パフォーマンスの変化は、ベンチマークが変更されたため、または使用されているベースラインバージョンが変更されたために発生することがあります。このビューでは、ベースラインバージョンと、結果を生成するために使用されたgolang.org/x/benchmarksのバージョンに関する情報も表示され、これが発生した時点を特定するのに役立ちます。


このコンテンツは、Go Wikiの一部です。