擷取建構效能指標

回報問題 查看來源

應該讓所有 Bazel 使用者遇到建構作業的執行速度慢或速度低於預期。對於具有重大影響的目標,改善個別版本的效能會有所不同,例如:

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

  2. 常見程式庫受到其他目標廣泛仰賴。

  3. 來自目標類別 (例如自訂規則) 的代表目標 (例如自訂規則),診斷及修正單一版本的問題可能有助於大規模解決問題。

改善版本效能的一個重要步驟,就是瞭解資源的使用位置。本頁面列出您可以收集的各種指標。細分建構效能將說明如何使用這些指標偵測及修正建構效能問題。

以下是從 Bazel 建構作業擷取指標的主要方式,即是:

建構事件通訊協定 (BEP)

Bazel 會透過 Build Event Protocol (BEP) 輸出各種通訊協定緩衝區 build_event_stream.proto,這可透過您指定的後端匯總。視您的用途而定,您可能會決定以各種方式匯總指標,但我們會說明一些一般來說對您相當實用的概念和 proto 欄位。

Bazel 的查詢 / cquery / a 查詢指令

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 專案的基準化工具,可在下列情況中針對建構效能進行基準測試:

  • 專案基準:在單一 Bazel 版本中,對兩個 Git 修訂版本進行基準化。用於偵測建構作業中的迴歸 (通常是透過新增依附元件)。

  • Bazel 基準:在單一 Git 修訂版本中為兩個 Bazel 版本進行基準測試。用於偵測 Bazel 本身內的迴歸 (解決 / 分支 Bazel 時)。

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

此外,建議您在未執行其他程序的專屬實體機器上執行 Bazel bench,以減少變異來源。