Go Wiki: PerformanceMonitoring
Go 專案監控 Go 實現的效能特徵以及 golang.org/x/tools 等子儲存庫的效能特徵。
Benchmarks
golang.org/x/benchmarks/cmd/bench 是我們效能測試的入口點。對於 Go 實現,它會執行 Sweet(端到端基準測試)和 bent(微基準測試)基準測試套件。
對於 golang.org/x/tools 專案,它會執行該儲存庫的基準測試。
所有這些基準測試都可以手動呼叫,cmd/bench 也可以,但直接使用 Sweet 和 bent 可能會提供更好的使用者體驗。有關更多詳細資訊,請參閱它們的文件。
效能測試原則
與時俱進
我們的基準測試集是經過精心挑選的。它允許隨時間變化。長時間堅持使用單一基準測試集很容易讓我們陷入最佳化錯誤事物的境地。
始終進行比較
我們從不孤立地報告效能資料,而僅相對於某個基準。這種策略源於這樣一個事實:在很長的時間間隔內比較效能資料,即使在相同的硬體上,也可能產生大量無法解釋的噪聲。一天中機器或虛擬機器的狀態很可能與第二天機器或虛擬機器的狀態截然不同。
我們將被測試的原始碼版本稱為“實驗”,將基準版本的原始碼稱為“基準”。
提交前
您是否有 Gerrit 更改需要針對我們的基準測試執行?
在選擇 SlowBot 時出現的“選擇 Tryjobs”對話方塊中,選擇包含 perf 一詞的構建器。
有兩種提交前構建器用於效能測試
perf_vs_parent,它獨立衡量更改的效能差異。perf_vs_tip,它衡量與更改所屬儲存庫的當前樹尖(tip-of-tree)相比的效能差異。(請記住在使用此項之前重新定位您的更改!)
還有一個針對工具儲存庫的第三個特殊提交前構建器,其中包含字串 perf_vs_gopls_0_11。這衡量了與工具儲存庫的 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 分支的樹尖。
每指標檢視
點選任何圖表的效能指標名稱,即可檢視該指標效能差異的更詳細時間線。

此檢視對於識別迴歸的罪魁禍首和查明改進的來源特別有用。
有時,效能變化發生是因為基準測試發生了變化,或者因為正在使用的基準版本發生了變化。此檢視還顯示有關基準版本以及用於生成結果的 golang.org/x/benchmarks 版本的資訊,以幫助識別這種情況何時發生。
此內容是 Go Wiki 的一部分。