在 Fuchsia 中,追蹤功能的目的是提供一種方法,可從 Fuchsia 使用者空間程序和 Zircon 核心收集、匯總及以視覺化方式呈現診斷追蹤資訊。
如要進一步瞭解如何在 Fuchsia 中使用追蹤功能,請參閱下列指南:
根據預設,Fuchsia 中的追蹤功能會關閉。發生事件時 (例如系統問題或啟動偵錯工作階段),可以隨意啟用追蹤功能。您不僅可以開啟或關閉追蹤功能,還能個別選取特定追蹤類別。
Fuchsia 追蹤系統的一部分
追蹤記錄供應器
當您編寫可建立追蹤資料的元件時,該元件就會成為追蹤供應器。系統可以有多個追蹤記錄提供者。
Fuchsia 會為追蹤系統使用分散式實作方式,讓追蹤供應器將追蹤資料直接寫入 Zircon 虛擬記憶體物件 (VMO),也就是共用記憶體區段。追蹤資料會在產生時儲存在記憶體中,不會複製到任何其他位置。如要進一步瞭解 VMOs,請參閱「虛擬記憶體物件」。
在程式碼中指定追蹤陳述式時,您可以透過類別控管要記錄哪些追蹤資料。接著,當您執行追蹤用戶端並指定特定類別時,追蹤用戶端只會記錄追蹤供應器的指定類別。
可追蹤或提供追蹤資訊的元件、實作 TraceProvider
FIDL 通訊協定,並使用 Registry
註冊追蹤記錄提供者。註冊後,追蹤記錄提供者會在啟動或停止追蹤時收到訊息,並有機會提供以 Fuchsia 追蹤記錄格式編碼的追蹤記錄資料。請參閱 fuchsia.tracing.provider
。
追蹤供應工具 (即要追蹤的元件) 只會寫入追蹤緩衝區。如果追蹤記錄供應工具的追蹤記錄緩衝區在追蹤記錄執行期間已滿,緩衝模式會決定追蹤記錄供應工具的行為。如要進一步瞭解緩衝模式,請參閱「追蹤供應商緩衝模式」。
追蹤用戶端
追蹤用戶端是處理追蹤供應器產生資料的元件。系統可以有多個追蹤記錄提供者和追蹤記錄用戶端。追蹤用戶端會與追蹤管理員聯絡,要求啟動或停止追蹤。追蹤記錄用戶端也可以要求儲存所收集到的追蹤記錄資料。追蹤管理員會收集資料,並透過通訊端傳送至追蹤用戶端。
追蹤記錄用戶端無法直接影響追蹤記錄供應器的運作。在 Fuchsia 追蹤系統中,追蹤供應器會將資料寫入 VMO,然後追蹤管理員會從 VMO 讀取資料,最後追蹤用戶端會從網路插座讀取追蹤資料。
Fuchsia 使用單一追蹤用戶端,其中包含下列公用程式:
trace
:此公用程式會在 Fuchsia 目標上執行。trace
可控制追蹤功能,並將指令傳送至追蹤記錄管理員,以便開始及停止追蹤,同時也會收集追蹤記錄資料。也支援將 Fuchsia 追蹤記錄檔轉換為其他格式,例如 Catapult JSON 記錄。ffx trace
:此公用程式會在開發主機上執行。ffx trace
會與trace
公用程式通訊。接著,追蹤資料就可以從trace
串流至開發主機,做為輸出檔案。
您可以直接使用 Controller
FIDL 通訊協定收集追蹤記錄資訊。請參閱「fuchsia.tracing.controller
」。
追蹤記錄管理工具
追蹤記錄管理工具是系統服務,可協調追蹤記錄提供者的註冊作業,並找出各個追蹤記錄提供者的資料。Fuchsia 中只有一個追蹤管理工具。這可確保追蹤作業有條理地進行,並將提供追蹤供應者的元件與追蹤用戶端隔離。追蹤記錄管理員會為每個已註冊的追蹤記錄供應商指派 VMO。
Trace 管理員會實作下列 FIDL 通訊協定:
Controller
:為追蹤用戶端提供列舉追蹤提供者和收集追蹤資料的功能。請參閱fuchsia.tracing.controller
。Registry
:為追蹤記錄供應器提供在執行階段註冊自己的功能,以便讓追蹤系統偵測到這些供應器。請參閱「註冊表」。
先進先出 (FIFO) 方法會通知追蹤管理員追蹤供應工具的啟動和關閉作業。在初始開始追蹤要求中,FIFO 句柄會從追蹤管理員傳遞至各個追蹤提供者。如要進一步瞭解 Fuchsia 追蹤系統使用的 FIFO 封包,請參閱 FIFO 封包。
跨處理程序通訊
以下是 Fuchsia 追蹤功能跨程序通訊的重要特性:
- 除了開始或停止收集之外,追蹤記錄提供者和追蹤記錄管理員沒有任何同步點。
- 追蹤記錄提供者 (即要追蹤的元件) 只會寫入追蹤記錄緩衝區,絕不會從中讀取資料。
- 追蹤記錄管理工具只會讀取追蹤記錄緩衝區,絕不會寫入。
- 追蹤記錄用戶端會透過一個套接字從追蹤記錄管理員接收追蹤記錄封存檔,且不會讀取原始追蹤記錄緩衝區。這可防止追蹤記錄供應者遭到追蹤用戶端操控。
啟動追蹤時,追蹤管理員會要求所有相關的追蹤供應器開始追蹤,並為每個供應器提供追蹤緩衝區 VMO,以便他們寫入追蹤記錄。追蹤記錄執行期間,追蹤記錄管理工具會監控新註冊的追蹤記錄提供者,並視需要啟用這些提供者。
追蹤記錄完成後,追蹤記錄管理員就會停止所有有效的追蹤服務供應商。然後,追蹤記錄管理員會等待每個追蹤供應商確認已撰寫完追蹤記錄事件。接著,追蹤記錄管理員會讀取及驗證寫入追蹤記錄緩衝區 VMO 的追蹤記錄資料,並建立追蹤記錄封存檔。
即使追蹤記錄提供者異常終止,只要他們設法將部分資料儲存到追蹤記錄緩衝區,追蹤記錄管理員通常仍可復原部分資料。如果追蹤記錄提供者的追蹤記錄緩衝區在追蹤記錄執行期間已滿,則緩衝模式會決定追蹤記錄提供者的行為。詳情請參閱「追蹤供應工具緩衝模式」。
追蹤記錄管理工具會透過通訊端將產生的追蹤記錄檔案傳送至用戶端。這類資料會根據 Fuchsia 追蹤記錄格式建立,但如果追蹤記錄提供者刻意發出垃圾資料,可能會包含不合理的資料。
圖 1 顯示 Fuchsia 追蹤系統的元件,以及元件彼此之間的通訊方式。
圖 1. Fuchsia 追蹤系統