最佳化疊代速度

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

本頁面說明如何在執行 Bazel 時最佳化 Bazel 的建構效能 重複執行。

Bazel 的執行階段狀態

Bazel 叫用牽涉到數個互動部分。

  • bazel 指令列介面 (CLI) 是面向使用者的前端工具 並接收使用者的指令

  • CLI 工具會啟動 Bazel 伺服器 每種不同的輸出基礎都不太一樣 Bazel 伺服器通常可持續運作,但會在閒置一段時間後關閉 以免浪費資源

  • Bazel 伺服器會針對特定指令執行載入和分析步驟 (buildruncquery 等) 則會建構必要部分 會包含建構圖表的具體內容產生的資料結構會保留在 將 Bazel 伺服器當做分析快取的一部分。

  • Bazel 伺服器也能執行動作執行作業, ,針對 系統也會快取動作執行,也就是在動作快取 (或 執行快取,可以是本機或遠端,而且可能會共用 可在 Bazel 伺服器之間進行通訊

  • Bazel 叫用的結果會提供在輸出樹狀結構中。

反覆執行 Bazel

在一般的開發人員工作流程中,建構 (或執行) 一段程式碼很常見 經常以極高的頻率重複執行,例如解析某些編譯作業 或調查失敗的測試)。在這種情況下 相較於相較於延遲時間bazel 基礎的重複動作 (例如叫用編譯器或執行測試)。

有鑑於此,我們將再次查看 Bazel 的執行階段狀態:

分析快取是重要的資料,相當可觀 只須投入於冷執行作業的載入和分析階段 (也就是執行 在啟動 Bazel 伺服器之後,或捨棄分析快取時)。 以成功的單一冷版本 (例如正式版) 來說,這筆費用是 但若要重複建構相同的目標,請務必考量這一點 所以不會在每次叫用時重複相同費用。

分析快取比較不穩定。首先是處理中 因此遺失伺服器會失去快取。但快取 同樣很容易失效,例如許多 bazel 指令列標記 快取就會遭到捨棄。這是因為許多標記會影響 圖表 (例如 可設定的屬性)。部分標記 變更也可能會導致 Bazel 伺服器重新啟動,例如變更 啟動選項)。

優質的執行快取對於建構效能也有幫助。執行作業 可以儲存在本機 在磁碟上,或 遠端。快取可在 Bazel 伺服器就是開發人員

避免捨棄分析快取

只有在分析快取被捨棄或出現錯誤 伺服器重新啟動。疊代使用時,應避免以下其中一種做法:

  • 在疊代過程中變更 bazel 標記時,請留意以下事項 工作流程例如,將 bazel build -c optbazel cquery 混合使用 會導致每個指令捨棄另一個指令的分析快取。一般來說 會試著在特定工作流程中使用一組固定的標記

  • 遺失 Bazel 伺服器會失去分析快取。Bazel 伺服器 可設定閒置 螢幕就會關閉您可以透過 bazelrc 檔案來使用。伺服器在啟動時也已重新啟動 標記有變動,因此請盡量避免變更這些標記。

  • 請注意,當您按下滑鼠,系統會終止 Bazel 伺服器 Bazel 在執行時重複 Ctrl-C 鍵。其實有人想節省時間 終止不再需要的執行中版本,但只需按下 按下 Ctrl-C 鍵一次,可要求順利結束目前叫用作業。

  • 如果要從同一個工作區使用多組標記 使用多個不同的輸出基準,並切換為 --output_base 旗標。每個輸出基礎都會取得自己的 Bazel 伺服器。