Fuchsia 追蹤系統

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 追蹤系統的元件,以及元件彼此之間的通訊方式。

這張圖顯示 Fuchsia 追蹤系統。

圖 1:Fuchsia 追蹤系統