Perfcompare:效能比較試用建構工具

「perfcompare」試用建構工具是選用的 CQ 試用建構工具 評估某個變更後的成效影響 (用於預先提交效能測試)。執行效能測試 無論是否套用 CL,然後比較結果 如果效能迴歸或改善情形

Google 員工可以參閱 Google 內部效能比較 說明文件,瀏覽其他說明文件。

使用方式

適用於 fuchsia.git CLs

如要對 Gerrit CL 執行 Perfcompare,請執行下列操作:

  • 啟動建構:選取「選擇試用工作」新增功能 然後從清單中選取一或多個 Perfcompare 建構工具 開發者快速做法是輸入「perfcompare」從事 搜尋欄位,即可篩選清單以顯示 可用的 Perfcompare 建構工具。
  • 取得結果:試用建構工具的結果頁面連結 會出現在蓋瑞特的 CL 上建構工具執行完畢後, 您的結果將位於 "比較效能測試結果時, 含 CL」->「stdout」(或「原始」)

這些 Perfcompare 建構工具目前 執行 fuchsia.git 的效能測試:

  • terminal.x64-release-perfcompare (近期版本): 這會在 Intel NUC 執行「fuchsia.git」的效能測試 (x64)。這是 Compute Engine terminal.x64-release 建構工具 (即會執行同一組 效能測試)。

  • terminal.vim3-release-perfcompare (近期版本): 這會在 VIM3 (ARM64) 上執行 fuchsia.git 的效能測試。這個 是 terminal.vim3-release 的 Perfcompare 版本 建立工具請注意,terminal.vim3-release 並非由 CQ 執行 因此較有可能毀損 是其他建構工具的安裝率

適用於 Integration.git CL

integration.git 個 CL 尚未支援 Perfcompare。

具體來說,這類 CL 會變更 Jiri 資訊清單檔案中的依附元件,或是 目前下列項目不支援 jiri.lock 檔案或使用 patches.json 。這包括會變更預建套件的 CL,例如 工具鍊滾出 CL

Perfcompare 不知道如何查看來源和預先建構 在這類案例中,位於 CL 之前與之後的二進位檔,所以將產生錯誤 會造成這類情況這會產生一項 成效方面的變動。

輸出內容範例

以下是 PerfComparison 執行簡單的測試所輸出的一部分 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
...

測試 CL 堆疊與個別 CL

效能比較建構工具會評估 CL,「不是」CL 的堆疊。

舉例來說,假設您有一系列 CL,包括 P1、P2、P3、P4、P5 其中 P1 是最舊的 (也就是所有其他 CL 依附於此)。如果 如果您在 P3 上執行 Perfcompare,「with CL」版本會包含 P1+P2+P3 「沒有 CL」只會包含 P1+P2

  • 這種做法可以評估尚未產生轉換的測試案例 已經登陸了您可以設定一個 CL 並增加新成效 測試,以及透過後續 CL 變更 軟體入侵在第二個 CL 上執行效能比較 ,展示 CL 對新測試的影響。
  • 如要測量修補堆疊的整體效果 可以將變更壓縮成單一 Git 修訂版本 (例如使用 git merge --squash) 將其上傳至 Gerrit,以及 就是執行效能比較

「具有 CL」以及「沒有 CL」版本

效能比較建構工具依序套用下列步驟 會產生「具有 CL」以及「沒有 CL」版本:

  1. 快來查看 Fuchsia 最新的樹木編輯版本 integration.git
  2. 將 CL 系列套用至結帳流程,最高包括 CL 正在測試這會使用 jiri patch,其使用 git rebase
  3. 打造 Fuchsia。如此一來,「具有 CL」建構應用程式
  4. 在結帳頁面中取消套用最頂層的 CL (將先前的 CL 保留為 CL 系列 (如果有))。方法是在套用 CL 系列的 Git 存放區中執行 git checkout HEAD^
  5. 再次建構 Fuchsia,執行漸進式建構。如此一來 "沒有 CL"建構應用程式

步驟 1 到 3 與非 Perfcompare Fuchsia 試用建構工具相同。

限制

  • 使用 patches.json 或變更 Jiri 中依附元件的 CL 目前尚不支援資訊清單檔案 (如上所述)。

如何在本機進行成效比較

Perfcompare 建構工具會使用 perfcompare.py 即可比較 效能結果您可以使用 perfcompare.py 執行 本機效能測試 (亦即不使用 Fuchsia Infra) 相互比較詳情請參閱 說明文件

如何下載原始成效結果

您可以下載系統產生的原始效能測試結果 看看成效如何如果您要修改 也就是 perfcompare.py 執行的分析。方法是使用 步驟如下:

  1. 找出 cas_instance 的值和 輸出內容屬性中的 perfcompare_dataset_digest 欄位 請參閱 Perfcompare 版本您可以前往 建構 (可從 Gerrit 的「Checks」分頁存取) 程式碼審查)。一般值的範例如下:

    • cas_instance="projects/chromium-swarm/instances/default_instance"
    • perfcompare_dataset_digest="3ff389154e02490f29e379564f7e70b3df66f74c3116ed50172cceec1e9d9888/165"

    如果是從非 Perfcompare 版本下載結果資料, 要使用的欄位名稱是 perf_dataset_digest perfcompare_dataset_digest

  2. 執行下列指令,下載資料集 (使用 從 Fuchsia 結帳階段預先建構的 cas 工具):

    ./prebuilt/tools/cas/cas download -cas-instance $CAS_INSTANCE -digest $DIGEST -dir $DEST_DIR
    
  3. 對下載的資料集執行 perfcompare.py

    python3 src/testing/perfcompare/perfcompare.py compare_perf $DEST_DIR/without_cl/ $DEST_DIR/with_cl/
    

請注意,RBE-CAS 系統會將資料保留大約 2 到 3 個月 因此如果建構未執行,下載指令就會失敗 。(存留時間 (TTL) 目前的預設值, RBE-CAS 為 90 天)。