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