Fuchsia 追蹤系統

Fuchsia 的追蹤功能旨在提供方法,從 Fuchsia 使用者空間程序和 Zircon 核心收集、彙整及視覺化診斷追蹤資訊。

如要進一步瞭解如何在 Fuchsia 中使用追蹤功能,請參閱下列指南:

在 Fuchsia 中,追蹤功能預設為關閉。發生系統問題或啟動偵錯工作階段等事件時,追蹤功能可任意開啟一段時間。您不僅可以開啟或關閉追蹤功能, 還能個別選取特定追蹤類別。

Fuchsia 追蹤系統的組成部分

在 Fuchsia 追蹤系統中,下列元件以分散式方式運作:

追蹤記錄供應商

如果您編寫的元件會建立追蹤資料,該元件就會成為追蹤供應器。一個系統可以有多個追蹤記錄提供者。

Fuchsia 的追蹤系統採用分散式實作方式,可讓追蹤記錄提供者將追蹤記錄資料直接寫入 Zircon 虛擬記憶體物件 (VMO),也就是共用記憶體區段。追蹤資料會在產生時儲存在記憶體中,不會複製到任何其他位置。如要進一步瞭解 VMO,請參閱虛擬記憶體物件

在程式碼中指定追蹤陳述式時,您可以透過類別控管要記錄哪些追蹤資料。然後,當您執行追蹤用戶端並指定特定類別時,追蹤用戶端只會記錄追蹤供應商的指定類別。

可追蹤或向系統提供追蹤資訊的元件會實作 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。

追蹤記錄管理員會實作下列 FIDL 協定:

  • Controller:讓追蹤用戶端能夠列舉追蹤供應商,並收集追蹤資料。請參閱fuchsia.tracing.controller
  • Registry:讓追蹤記錄供應商能在執行階段註冊自己,以便追蹤系統探索。請參閱「登錄」。

先進先出 (FIFO) 方法會通知追蹤記錄管理工具追蹤記錄供應器啟動和關閉。FIFO 控制代碼會從追蹤管理工具傳遞至每個追蹤供應商,做為初始開始追蹤要求的一部分。

跨程序通訊

以下是 Fuchsia 追蹤的跨程序通訊重要特徵:

  • 除了啟動或停止收集作業外,追蹤記錄供應商和追蹤記錄管理員沒有其他同步點。
  • 追蹤記錄供應器 (要追蹤的元件) 只會寫入追蹤記錄緩衝區,絕不會從中讀取資料。
  • 追蹤記錄管理工具只會從追蹤記錄緩衝區讀取資料,絕不會寫入資料。
  • 追蹤用戶端會透過通訊端從追蹤管理員接收追蹤記錄封存檔,且絕不會讀取原始追蹤記錄緩衝區。這可防止追蹤用戶端操縱追蹤記錄供應商。

啟動追蹤時,追蹤管理員會要求所有相關追蹤供應商開始追蹤,並為每個供應商提供追蹤緩衝區 VMO,供應商應將追蹤記錄寫入其中。追蹤作業執行期間,追蹤管理工具會監控新註冊的追蹤供應器,並視需要啟用這些供應器。

追蹤作業完成後,追蹤管理工具會讓所有作用中的追蹤供應器停止追蹤。接著,追蹤記錄管理工具會等待每個追蹤記錄供應商確認已完成寫入追蹤記錄事件。追蹤記錄管理工具接著會讀取並驗證寫入追蹤記錄緩衝區 VMO 的追蹤記錄資料,然後建立追蹤記錄封存檔。

即使追蹤記錄提供者異常終止,只要設法將部分資料儲存到追蹤記錄緩衝區,追蹤記錄管理員通常就能復原部分資料。如果追蹤作業執行期間,追蹤提供者的追蹤緩衝區已滿,緩衝模式會決定追蹤提供者的行為。詳情請參閱追蹤供應商緩衝模式

追蹤管理工具會透過通訊端,將產生的追蹤記錄封存檔傳送給用戶端。這項資料是根據 Fuchsia 追蹤記錄格式建立,但如果追蹤記錄供應商刻意發出垃圾資料,這項資料可能包含無意義的資料。

圖 1 顯示 Fuchsia 追蹤系統的元件,以及這些元件彼此之間的通訊方式。

這張圖顯示 Fuchsia 追蹤系統。

圖 1. Fuchsia 追蹤系統