「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 天)。