動態執行是 Bazel 中的一項功能 自 0.21 版起, 同時啟動相同動作的本機與遠端執行作業 您可以使用處理後第一個分支版本的輸出內容,將另一個分支版本的輸出內容取消 可結合遠端的執行能力和/或大量共用快取 同時具備本機執行作業的低延遲特性,可提供兩者間的優勢 以便進行乾淨和漸進式建構作業
本頁面說明如何啟用、調整及偵錯動態執行。如果發生以下情況: 必須設定本機和遠端執行作業,並嘗試調整 Bazel 您可以參考這個網頁如果還沒有 設定遠端執行,請前往 Bazel 請先遠端執行總覽。
要啟用動態執行功能嗎?
動態執行模組屬於 Bazel 的一部分,但要使用動態執行 因此,您必須已能在本機和遠端編譯兩者 使用相同的 Bazel 設定
如要啟用動態執行模組,請傳遞 --internal_spawn_scheduler
加到 Bazel這會新增名為 dynamic
的新執行策略。您現在可以
以此做為目標動態執行的策略,例如
--strategy=Javac=dynamic
。請參閱下一節,瞭解如何挑選助聽器
即可啟用動態執行功能
對使用動態策略的任何記憶來說,遠端執行策略就是
取自 --dynamic_remote_strategy
旗標,以及來自
--dynamic_local_strategy
標記。傳球員
--dynamic_local_strategy=worker,sandboxed
會設定本機的
嘗試在工作站或沙箱執行環境中使用工作站或沙箱執行
順序。傳遞 --dynamic_local_strategy=Javac=worker
會覆寫預設值
只有 Javac 記憶法。遠端版本的運作方式相同。這兩種標記可以
可以多次指定如果動作無法在本機執行,則該動作會
遠端執行,反之亦然。
如果遠端系統有快取,--local_execution_delay
旗標會在遠端系統後,在本機執行作業增加延遲時間 (以毫秒為單位)
表示快取命中如果有更多快取,就能避免在本機執行
則很可能預設值為 1000 毫秒,不過您應該調整為僅採用 10 毫秒
快取命中資料通常需要較長的時間。實際時間取決於
以及往返時間。此值通常會是
套用相同層級的政策,除非部分遠端系統的使用者夠長
縮短往返延遲時間您可以使用
Bazel 剖析功能
即可查看一般快取命中需要多少時間。
動態執行可搭配本機沙箱策略使用,並搭配
永久性工作站。永久工作站
和動態執行搭配使用時,會自動以沙箱機制執行,而且無法
使用多工工作站。在 Darwin 和 Windows 系統上
沙箱策略的速度可能較慢也可以
--reuse_sandbox_directories
可減少在這些系統上建立沙箱的負擔。
動態執行也可以使用 standalone
策略執行,不過因為
standalone
策略必須在開始執行時採用輸出鎖定,
有效地阻止遠端策略。
--experimental_local_lockfree_output
旗標可透過下列方式解決這個問題
允許本機執行作業直接寫入輸出中,但
遠端執行應該先完成這個動作
如果動態執行的其中一個分支版本先完成但失敗, 整個動作失敗這是我們刻意的選擇 本機和遠端執行之間不會被注意到
如需動態執行及其鎖定運作方式的更多背景資訊,請參閱 Julio Merino 的優質作品 網誌文章
何時該使用動態執行?
動態執行需要 遠端執行系統。這目前不是 只能使用快取版的遠端系統,因為快取失敗會視為快取失敗 回應失敗。
並非所有類型的動作都適合遠端執行。最佳 候選人是指本機速度更快的 您使用永久工作站或執行 速度足以讓遠端執行作業的負擔佔據大量執行時間。 每項本機執行的動作都會鎖定一定數量的 CPU 和記憶體 執行不屬於這些類別的動作只會延遲 然後替實際執行這些指令
發布後
5.0.0-pre.20210708.4,
效能分析
包含工作站執行作業的相關資料,包括完成工作所花費的時間
要求。如果看到動態執行
工作站執行緒花費大量時間取得資源,或會花費許多時間
「async-worker-finish
」可能會出現某些緩慢的本地動作,導致
工作執行緒。
上述使用 8 Javac 工作站的設定檔中,看到許多 Javac 工作站
的比賽失敗,並在 async-worker-finish
完成工作
。這可能是由於沒有員工的記憶庫
花費了足夠的資源
才能延遲工作站
當只有 Javac 是在動態執行的情況下執行時,大約只有一半的開始執行 因為工人在開始工作之後,就沒辦法趕上賽跑
先前建議的 --experimental_spawn_scheduler
旗標已淘汰。
這項功能會開啟動態執行,並將 dynamic
設為所有
這種記憶法通常會導致這類問題。
疑難排解
動態執行的問題可能有些微小且難以偵錯,
只有本機和遠端執行作業的特定組合下,才會定義資訊清單。
--debug_spawn_scheduler
會針對動態內容新增額外輸出內容
可以協助偵錯問題的執行系統你也可以調整
--local_execution_delay
旗標和遠端工作與本機工作的數量
以輕鬆重現問題
如果您在使用 standalone
進行動態執行時遇到問題
策略、嘗試在不使用 --experimental_local_lockfree_output
的情況下執行
本機動作是採用沙箱機制這可能會使建構速度稍微變慢 (請參閱上方的
您是在 Mac 或 Windows 電腦上,但請移除某些失敗的原因。