「perfcompare」試用建構工具是選用的 CQ 試用建構工具,可在不到達網頁的情況下評估變更對效能的影響 (也就是用於預先提交的效能測試)。無論是否套用 CL,系統都會執行效能測試並比較結果,瞭解是否有任何效能迴歸或改善的問題。
Google 員工如需其他說明文件,可以參閱 Google 內部 Perfcompare 文件。
使用方式
fuchsia.git CLs
如要在 Gerrit CL 上執行 Perfcompare,請按照下列步驟操作:
- 啟動建構:在 Gerrit 網頁版 UI 中選取「Choose tryjobs」,然後從建構工具清單中選取一或多個 Perfcompare 建構工具。快速達成這個目的的方法是在搜尋欄位中輸入「perfcompare」,這樣就能篩選清單以顯示可用的 Perfcompare 建構工具。
- 取得結果:Gerrit 中的 CL 上會顯示試用建構工具的結果頁面連結。建構工具執行完畢後,會在建構頁面的「Compare perf test without and CL」-> "stdout" (或「raw」) 下方取得結果。
下列 Perfcompare 建構工具目前可用,並支援執行 fuchsia.git
的效能測試:
terminal.x64-release-perfcompare
(近期建構):這會在 Intel NUC (x64) 上執行fuchsia.git
的效能測試。這是terminal.x64-release
建構工具的 Perfcompare 版本 (即執行與建構工具相同的效能測試組合)。terminal.vim3-release-perfcompare
(近期版本):這會在 VIM3 (ARM64) 上執行fuchsia.git
的效能測試。這是terminal.vim3-release
建構工具的 Perfcompare 版本。請注意,terminal.vim3-release
預設不會由 CQ 執行,因此它可能破壞了或比其他建構工具更高。
適用於整合.git CLs
integration.git
CL 尚不支援 Perfcompare。
具體來說,如果 CL 在 Jiri 資訊清單檔案或 jiri.lock
檔案中變更依附元件,或使用 patches.json
,則目前不支援 CL。這包括變更預先建構套件 (例如工具鍊滾動 CL) 的 CL。
在這類情況下,Perfcompare 並不知道該如何查看 CL 前後的原始碼和預先建構的二進位檔,因此在這些情況下會產生錯誤結果。這項作業會產生效能沒有任何變化,即使 CL 會改變效能也一樣。
輸出內容範例
以下是在簡易測試 CL 上執行 Perfcompare 輸出的一部分:
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
...
測試 CL 堆疊與個別 CL 的差異
Perfcompare 建構工具會評估個別 CL 的成效影響,而「而非」CLs 堆疊的效能影響。
例如,假設您有 P1、P2、P3、P4、P5 的一系列 CL1,而 P1 是最早的 (也就是說,所有其他 CL 都依附於此)。如果您在 P3 上執行 Perfcompare,則「with CL」版本會包含 P1+P2+P3,而「不使用 CL」版本則僅包含 P1+P2。
- 這樣做可評估尚未實現的測試案例受到的影響。您可以建立一個用來新增效能測試的 CL,以及變更軟體受測試軟體的後續追蹤 CL。若是針對第二個 CL 執行 Perfcompare,表示 CL 會如何影響新測試。
- 如要評估修補程式堆疊的整體成效,做法之一是將變更壓縮到單一 Git 修訂版本 (例如使用
git merge --squash
),然後將該修訂版本上傳至 Gerrit,然後對此執行效能比較。
「有 CL」和「不含 CL」版本
Perfcompare 建構工具會依序套用下列步驟,產生「使用 CL」和「不含 CL」版本:
- 請查看 Fuchsia 當前的
integration.git
小點修訂版本。 - 將此 CL 系列套用至結帳程序,最多包含接受測試的 CL。這會使用
git rebase
,也就是jiri patch
。 - 建立 Fuchsia。這樣即可建構「使用 CL」版本。
- 從結帳程序中取消套用最頂端的 CL (如有套用,先將先前的 CL 留在 CL 系列中)。方法是在套用 CL 系列的 Git 存放區中執行
git checkout HEAD^
。 - 再次建構 Fuchsia,執行漸進式建構作業。這樣即可建構「不含 CL」的版本。
步驟 1-3 與非 Perfcompare Fuchsia 試用建構工具相同。
限制
- 如上所述,目前尚不支援使用
patches.json
或變更 Jiri 資訊清單檔案中的依附元件的 CL。
如何在本機執行效能比較
Perfcompare 建構工具會使用 perfcompare.py
比較效能結果。您可以使用 perfcompare.py
在本機執行效能測試 (也就是不使用 Fuchsia Infra),並比較結果。請參閱說明文件。
如何下載原始成效結果
您可以下載 Perfcompare 建構工具執行作業產生的原始效能測試結果。如要修改 perfcompare.py
執行的分析,這就非常實用。步驟如下:
從 Perfcompare 建構的輸出屬性中找出
cas_instance
和perfcompare_dataset_digest
欄位的值。這些資料可在建構作業的建構頁面上找到 (可從 Gerrit 程式碼審查的「Checks」分頁存取)。一般值的範例如下:cas_instance="projects/chromium-swarm/instances/default_instance"
perfcompare_dataset_digest="3ff389154e02490f29e379564f7e70b3df66f74c3116ed50172cceec1e9d9888/165"
如要從非 Perfcompare 版本下載結果資料,要使用的欄位名稱是
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 天)。