每位 Bazel 使用者可能都曾經歷過慢或較慢的建構作業 第一個問題。提升個別建構作業的效能具有特殊價值 以因應具有重大影響的目標,例如:
核心開發人員目標經常疊代及建構 (重新建構)。
普遍依賴其他目標的常見程式庫。
指定類別 (例如自訂規則) 中的代表性目標 先檢查及修正一個版本的問題,可能有助於解決 並擴大規模
瞭解提高版本效能的一個重要步驟 資源用量本頁面列出可收集的各種指標。 細分建構效能展示 如何使用這些指標偵測及修正建構效能問題。
從 Bazel 建構作業擷取指標的主要方式有以下幾種:
建立事件通訊協定 (BEP)
Bazel 會輸出各種通訊協定緩衝區
build_event_stream.proto
敬上
透過 Build Event Protocol (BEP) 進行建構
都能由您指定的後端匯總視用途而定
您可能會決定以不同方式匯總指標,但這裡就要
介紹了一些實用的概念和 proto 欄位
Bazel 的查詢 / cquery / 查詢指令
Bazel 提供 3 種不同的查詢模式 (查詢、 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 benchmark:在不同版本的 Bazel 各版本之間進行基準測試 單一 Git 修訂版本用於偵測 Bazel 本身中的迴歸 會發生在維護 / 分支 Bazel 的異常情況
基準測試會監控實際時間、CPU 時間和系統時間,以及 Bazel 的保留時間 堆積尺寸。
建議只在需要執行 因此不會執行其他程序,以便減少變異性來源。