擷取建構效能指標

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4

每位 Bazel 使用者可能都曾經歷過慢或較慢的建構作業 第一個問題。提升個別建構作業的效能具有特殊價值 以因應具有重大影響的目標,例如:

  1. 核心開發人員目標經常疊代及建構 (重新建構)。

  2. 普遍依賴其他目標的常見程式庫。

  3. 指定類別中的代表性目標 (例如自訂規則), 先檢查及修正一個版本的問題,可能有助於解決 並擴大規模

瞭解提高版本效能的一個重要步驟 資源用量本頁面列出可收集的各種指標。 細分建構效能展示 如何使用這些指標偵測及修正建構效能問題。

從 Bazel 建構作業擷取指標的主要方式有以下幾種:

建立事件通訊協定 (BEP)

Bazel 會輸出各種通訊協定緩衝區 build_event_stream.proto 透過 Build Event Protocol (BEP) 進行建構 都能由您指定的後端匯總視用途而定 您可能會決定以不同方式匯總指標,但這裡就要 介紹了一些實用的概念和 proto 欄位

Bazel 的查詢 / cquery / 查詢指令

Bazel 提供 3 種不同的查詢模式 (查詢cqueryaquery) 查詢目標圖表、設定的目標圖表和動作圖 。查詢語言會提供 一組函式 查詢模式,方便您根據需求自訂查詢。

JSON 追蹤記錄設定檔

針對任何類似建構的 Bazel 叫用,Bazel 都會以 JSON 格式寫入追蹤記錄設定檔 格式。JSON 追蹤記錄設定檔可以 如果在測試期間快速瞭解 Bazel 在運作期間 呼叫。

執行記錄

執行記錄可協助您疑難排解及修正問題 因機器和環境差異而遺失遠端快取命中, 非確定性動作如果將旗標 --experimental_execution_log_spawn_metrics (可在 Bazel 5.2 中使用) 也會包含詳細的生成指標, 以及從遠端執行的操作你可以使用這些指標 可以比較本機與遠端電腦的效能,也可以找出相關資訊 哪些部分產生的執行速度持續比預期慢 ( 計算)。

執行圖記錄

雖然 JSON 追蹤記錄設定檔含有重要路徑資訊, 您需要取得已執行動作的依附元件圖表的額外資訊。 從 Bazel 6.0 開始,您可以 「--experimental_execution_graph_log」和 --experimental_execution_graph_log_dep_type=all 寫出關於 所執行動作及其相互依附。

這項資訊可用來瞭解由節點上節點新增的拖曳動作 成為關鍵路徑拖曳是指可以儲存的時間長度 ,即可從執行圖中移除特定節點。

這些資料可協助您預測建構與動作圖變更的影響 瞭解實際運作情況

使用 bazel-bench 進行基準測試

Bazel bench 是 Git 專案的基準測試工具,可用來在 下列情況:

  • 專案基準:以下列方式比較兩個 Git 修訂版本: 單一 Bazel 版本用於偵測版本中的迴歸 (通常透過 增加依附元件)。

  • Bazel benchmark:在不同版本的 Bazel 各版本之間進行基準測試 單一 Git 修訂版本用於偵測 Bazel 本身中的迴歸 會發生在維護 / 分支 Bazel 的異常情況

基準測試會監控實際時間、CPU 時間和系統時間,以及 Bazel 的保留時間 堆積尺寸。

建議只在需要執行 因此不會執行其他程序,以便減少變異性來源。