擷取建構效能指標

回報問題 查看原始碼

每位 Bazel 使用者可能遇到的執行速度比預期慢或慢。改善個別建構的效能對具有重大影響的目標具有特定值,例如:

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

  2. 其他程式庫廣泛仰賴共同程式庫。

  3. 使用目標類別的代表性目標 (例如自訂規則),在某個建構中診斷及修正問題時,可能有助於大規模解決問題。

瞭解建構效能的位置,是提升建構效能的重要步驟。這個頁面列出可收集的不同指標。 細分建構效能:示範如何使用這些指標偵測及修正建構效能問題。

以下提供幾種從 Bazel 版本擷取指標的方法:

建構事件通訊協定 (BEP)

Bazel 會透過 Build Event Protocol (BEP) 輸出各種通訊協定緩衝區 build_event_stream.proto,此流程可由您指定的後端匯總。視用途而定,您可能需要透過不同方式來匯總指標,但本文將介紹一些一般概念和原型欄位,以及一般應考慮使用的實用欄位。

Bazel 的查詢 / cquery / aquery 指令

Bazel 提供 3 種不同的查詢模式 (查詢cqueryaquery),讓使用者分別查詢目標圖表、設定的目標圖表和動作圖表。查詢語言提供可在各種查詢模式中使用的函式組合,可讓您依據自身需求自訂查詢。

JSON Trace 設定檔

針對每個類似建構的 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 標記,以寫入執行過的動作及其相互相依關係的記錄。

這些資訊可用於瞭解關鍵路徑中節點新增的拖曳動作。拖曳是指從執行圖中移除特定節點後,可節省的時間。

資料可協助您在實際操作之前,預測變更和動作圖表產生的影響。

使用基準邊框的基準化

在下列情況下,GBazel 專案的基準化工具就是提供基準化效能的基準化工具:

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

  • Bazel 基準:在單一 Git 修訂版本中,將 Bazel 的兩個版本互相比較。用於偵測 Bazel 本身中的迴歸問題 (如果您打算維護 / 建立 Bazel 分支)。

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

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