「perfcompare」試作建構工具是選用的 CQ 試作建構工具,可用於測量變更對效能造成的影響,而無須將變更導入 (也就是在提交前進行效能測試)。它會在套用 CL 和未套用 CL 的情況下執行效能測試,並比較結果,以瞭解是否有任何效能回歸或改善。
Google 員工可以參考 Google 內部 perfcompare 說明文件,瞭解其他相關說明文件。
使用方式
適用於 fuchsia.git CL
如要在 Gerrit CL 上執行 perfcompare,請執行下列操作:
- 開始建構:在 Gerrit 網頁式使用者介面中選取「Choose tryjobs」,然後從建構工具清單中選取一或多個 perfcompare 建構工具。快速的方法是輸入「perfcompare」到搜尋欄位,系統就會篩選清單,顯示可用的 perfcompare 建構工具。
- 取得結果:Gerrit 中的 CL 會顯示試做建構工具的結果頁面連結。建構工具執行作業完成後,結果會顯示在建構頁面的「compare perf test results without and with CL」->「stdout」(或「raw」)下方。
目前可用的效能比較建構工具,可用於執行 fuchsia.git
的效能測試:
terminal.x64-release-perfcompare
(最新版本):在 Intel NUC (x64) 上執行fuchsia.git
的效能測試。這是terminal.x64-release
建構工具的效能比較版本 (也就是說,它會執行與該建構工具相同的效能測試組合)。terminal.vim3-release-perfcompare
(近期版本): 這個版本會在 VIM3 (ARM64) 上執行fuchsia.git
的效能測試。這是terminal.vim3-release
建構工具的效能比較版本。請注意,CQ 預設不會執行terminal.vim3-release
,因此比起其他建構工具,terminal.vim3-release
更有可能發生錯誤或出現較高的失敗率。
針對 integration.git CL
Perfcompare 尚未支援 integration.git
CL。
具體來說,perfcompare 尚不支援在 Jiri 資訊清單檔案或 jiri.lock
檔案中變更依附元件的 CL,或使用 patches.json
。包括變更預先建構套件的 CL,例如工具鍊回溯 CL。
在這些情況下,Perfcompare 不知道如何在 CL 前後檢出來源和預先建構的二進位檔,因此會提供錯誤的結果。即使 CL 確實會影響成效,這項分析也會產生「成效沒有變化」的結果。
輸出內容範例
以下是 perfcompare 在簡單的 test CL 上執行時產生的部分輸出內容:
Summary counts:
2939 test cases in total
2938 test cases had no significant difference (no_sig_diff)
1 test case got faster
0 test cases got slower
0 test cases added
0 test cases removed
Results from test cases with differences:
Test case Improve/regress? Factor change Mean before Mean after
---------------------------------------- ---------------- ------------- ------------------ -----------------
fuchsia.microbenchmarks: ExampleNoOpLoop faster 0.143-0.145 405.36 +/- 0.39 ns 58.49 +/- 0.30 ns
Results from all test cases:
Test case Improve/regress? Factor change Mean before Mean after
--------------------------------------------- ---------------- ------------- ----------------- -----------------
...
fuchsia.microbenchmarks: Syscall/ManyArgs no_sig_diff 0.986-1.008 92.94 +/- 0.66 ns 92.65 +/- 0.40 ns
fuchsia.microbenchmarks: Syscall/Null no_sig_diff 0.993-1.007 84.33 +/- 0.40 ns 84.31 +/- 0.19 ns
fuchsia.microbenchmarks: Thread/CreateAndJoin no_sig_diff 0.950-1.034 34229 +/- 711 ns 33935 +/- 739 ns
fuchsia.microbenchmarks: TicksGet no_sig_diff 0.981-1.022 19.77 +/- 0.19 ns 19.81 +/- 0.21 ns
...
解讀結果
no_sig_diff
表示指標中沒有統計顯著的差異。這並不表示沒有差異,只是差異太小 (相對於指標的變化量),無法偵測到。如果「平均值前」和「平均值後」的置信區間寬度過大,導致下限變成負值,系統就會在「因子變更」欄中顯示
ci_too_wide
。如果指標有大量變化,就會發生這種情況。
測試 CL 堆疊與個別 CL
效能比較建構工具會評估個別 CL 的效能影響,而非 CL 的堆疊。
舉例來說,假設您有一系列 CL:P1、P2、P3、P4、P5,其中 P1 是最舊的 (也就是所有其他 CL 都依附於此)。如果您在 P3 上執行 perfcompare,則「with CL」版本會包含 P1+P2+P3,而「without CL」版本則只包含 P1+P2。
- 這可讓您評估尚未發布的測試案例的影響。您可以使用一個 CL 新增新的效能測試,並使用後續 CL 變更測試中的軟體。在第二個 CL 上執行 perfcompare,即可瞭解 CL 對新測試的影響。
- 如果您想評估修補程式堆疊的整體效果,一種做法是將變更合併至單一 Git 修訂版本 (例如使用
git merge --squash
),然後上傳至 Gerrit,並在該版本上執行 perfcompare。
「with CL」和「without CL」建構
效能比較建構工具會依序套用下列步驟,產生「含 CL」和「不含 CL」的建構作業:
- 從
integration.git
的最新樹狀結構修訂版本中查看 Fuchsia。 - 將 CL 系列套用至結帳系統,包括要測試的 CL。這個方法會使用
jiri patch
,而jiri patch
會使用git rebase
。 - 建構 Fuchsia。這會產生「with CL」版本。
- 取消套用檢查點中的最上層 CL (讓 CL 系列中的早期 CL 套用)。這項功能會在套用 CL 系列的 Git 存放區中執行
git checkout HEAD^
。 - 再次建構 Fuchsia,執行漸進式建構。這會產生「without CL」版本。
步驟 1 至 3 與非效能比較的 Fuchsia 試驗建構工具相同。
限制
- 如上所述,目前不支援使用
patches.json
或變更 Jiri 資訊清單檔案中依附元件的 CL。
如何在本機執行效能比較
效能比較建構工具會使用 perfcompare.py
比較效能結果。您可以使用 perfcompare.py
在本機執行效能測試 (也就是不使用 Fuchsia Infra),並比較結果。請參閱說明文件。
如何下載原始成效結果
您可以下載由 perfcompare try builder 執行作業產生的原始效能測試結果。如果您想修改 perfcompare.py
執行的分析作業,這項功能就非常實用。如要這樣做,請按照下列步驟操作:
從效能比較版本的輸出屬性中找出
cas_instance
和perfcompare_dataset_digest
欄位的值。這些資訊會顯示在建構作業的建構頁面中 (可透過 Gerrit 程式碼審查中的「檢查」分頁存取)。常見值的範例如下:cas_instance="projects/chromium-swarm/instances/default_instance"
perfcompare_dataset_digest="3ff389154e02490f29e379564f7e70b3df66f74c3116ed50172cceec1e9d9888/165"
如要從非效能比較建構下載結果資料,請使用
perf_dataset_digest
而非perfcompare_dataset_digest
做為欄位名稱。請執行下列指令 (使用 Fuchsia 結帳系統中的預先建構
cas
工具) 下載資料集:./prebuilt/tools/cas/cas download -cas-instance $CAS_INSTANCE -digest $DIGEST -dir $DEST_DIR
在下載的資料集上執行
perfcompare.py
:python3 src/testing/perfcompare/perfcompare.py compare_perf $DEST_DIR/without_cl/ $DEST_DIR/with_cl/
請注意,RBE-CAS 系統只會保留資料約 2 至 3 個月,因此如果最近未執行建構作業,下載指令就會失敗。(目前 RBE-CAS 中的存留時間 (TTL) 預設值為 90 天)。