每位 Bazel 使用者可能都曾經歷過慢或較慢的建構作業 第一個問題。改善個別版本的成效,對於影響重大的目標特別有價值,例如:
經常重複執行及重建的核心開發人員目標。
普遍依賴其他目標的常見程式庫。
指定類別中的代表性目標 (例如自訂規則), 先檢查及修正一個版本的問題,可能有助於解決 並擴大規模
如要改善版本的效能,請務必瞭解資源的用途。本頁面列出可收集的各種指標。 剖析建構作業效能一文說明如何使用這些指標來偵測及修正建構作業效能問題。
從 Bazel 建構作業擷取指標的主要方式有以下幾種:
建構事件通訊協定 (BEP)
Bazel 會透過 Build Event Protocol (BEP) 輸出各種通訊協定緩衝區 build_event_stream.proto
,這些緩衝區可由您指定的後端匯總。視用途而定
您可能會決定以不同方式匯總指標,但這裡就要
介紹了一些實用的概念和 proto 欄位
Bazel 的查詢 / cquery / 查詢指令
Bazel 提供 3 種不同的查詢模式 (query、cquery 和 aquery),可讓使用者分別查詢目標圖表、已設定的目標圖表和動作圖表。查詢語言會提供 一組函式 查詢模式,方便您根據需求自訂查詢。
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 基準測試:在單一 Git 版本中,比較兩個 Bazel 版本的基準測試結果。用於偵測 Bazel 本身的回歸 (如果您恰好維護/分支 Bazel)。
基準測試會監控實際時間、CPU 時間、系統時間,以及 Bazel 保留的堆積區大小。
建議只在需要執行 因此不會執行其他程序,以便減少變異性來源。