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 可以提供更好的使用者體驗。請參閱它們的文件以取得更多詳細資訊。

效能測試原則

與時俱進

我們策劃了一組基準測試。它允許隨著時間而改變。長期堅持單一的基準測試組很容易讓我們陷入為錯誤的事情進行最佳化的情況。

務必執行比較

我們絕不單獨報告效能數字,而且只相對於某個基線。這種策略來自於一個事實,那就是比較即使是在同一部硬體上相隔甚久取得的效能資料,也會產生許多無法說明清楚的雜訊。某部機器或虛擬機在某一天的狀態很可能會跟另一天的狀態大不相同。

我們將原始碼的測試版稱為「實驗」,而原始碼的基線版本稱為「基線」。

提交前

你有 Gerrit 變更想要針對我們的基準測試執行嗎?

在選取 SlowBot 時出現的「選擇試用工作」對話方塊中,選取一個含有字串 perf 的建置模組。

有兩種效能測試的提交前建置模組

工具儲存庫還有一個第三個特殊提交前建置模組,它含有字串 perf_vs_gopls_0_11。這用來衡量效能差異相對於工具儲存庫的 release-branch-gopls.0.11 分支。(在使用這個之前,記得重新建立你的變更!)

提交後

效能儀表板 提供對提交到 Go 主要儲存庫和其他子儲存庫的每個提交的基準測試效能進行持續監控。更具體來說,儀表板顯示各種基準測試的特定效能指標(也稱為「單位」)隨時間變化的圖表。使用頁面頂端的導覽介面進一步探索。

回歸頁面 按從最大回歸到最大進步的順序顯示所有基準,其次為沒有統計上明顯答案的所有基準。

在圖表上,紅色表示回歸,藍色表示進步。

基線

在提交後,Go 儲存庫效能測試的基線版本會自動確定。針對版本分支上變更的效能測試,基線始終是該分支的最新版本(例如,在 release-branch.go1.21 上,Go 1.21 的最新次要版本)。針對樹尖的效能測試,基線始終是 Go 的最新整體版本。這由產生這些基準測試結果的建置模組的名稱表示,其中包含字串 perf_vs_release。這表示對於每個 Go 次要版本,基線都會轉移。這些基線轉移可以在 每個指標檢視 中觀察到。

子儲存庫的效能測試通常會針對某些已知的長期固定基準線執行。對於工具儲存庫,也就是 release-branch-gopls.0.11 分支的頂端。

依據公制檢視

按一下任何圖表的效能公制名稱,即可檢視該公制效能變更的更詳細時間軸。

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

這個檢視對於找出迴歸的罪魁禍首,以及找出改善的來源特別有幫助。

有時,效能變更會發生是因為基准已變更,或是因為所使用的基準版本已變更的緣故。這個檢視也會顯示基準版本和 golang.org/x/benchmarks 的版本資訊,用於產生結果,以幫助在發生這種情況時找出原因。


此內容是 Go Wiki 的一部分。