記錄追蹤記錄進行效能分析

ffx trace 指令可從下列來源記錄診斷追蹤資料: 安裝 Fuchsia 裝置。這類資料可用於評估效能並進行偵錯 瞭解問題、瞭解執行緒、程序和元件之間的互動情形, 以視覺方式呈現整個系統

新增 Fuchsia 追蹤記錄事件

如需在程式碼中加入 Fuchsia 追蹤的完整端對端指南,請參閱: Fchsia 追蹤記錄教學課程

概念

「Fuchsia 追蹤系統」提供一種機制 收集、匯總並視覺化呈現 使用者空間處理程序和 Fuchsia 裝置上的 Zircon 核心。追蹤記錄 由追蹤記錄管理員、記憶體緩衝區和一個或多個追蹤記錄組成 以滿足需求追蹤服務供應元件是 裝置上的追蹤記錄資料 許多追蹤記錄提供者。(如要註冊元件為 如果追蹤服務供應商,請參閱「註冊追蹤記錄提供者」一文)。

ffx trace start 指令會將追蹤記錄的輸出內容儲存為 .fxt 複製到主體機器上您可以在 Perfetto 檢視器:以視覺化方式呈現追蹤記錄結果 。(如要進一步瞭解 Perfetto,請參閱 Perfetto 說明文件網站)。

根據預設,ffx trace start 指令會嘗試收集下列來源的追蹤記錄資料: 一組預先定義的追蹤記錄類別 (執行 ffx trace start --help 即可查看 預設類別)。不過,ffx trace start 也能讓您 選取追蹤記錄類別來收集追蹤記錄資料。

在 Fuchsia 裝置上一次只能執行一個追蹤工作階段,且 單一追蹤記錄可以記錄在輸出檔案中。在下方範例中 輸出檔案預設為 ffx trace 執行所在目錄的 trace.fxt。 而所有目標裝置則預設為 連接至主機的可用 Fuchsia 裝置 容器的效能

透過互動方式執行追蹤記錄

使用互動式追蹤記錄時,您可以按下 Enter 鍵來決定何時要 即時結束追蹤不過,如果指定了 --duration 旗標 持續期間,追蹤記錄會自動停止。( 瞭解追蹤系統如何在緩衝區中儲存結果 中,請參閱附錄中的緩衝模式選項)。

如要啟動互動式追蹤記錄,請執行下列指令:

ffx trace start

這個指令會輸出類似以下的輸出內容:

$ ffx trace start
Tracing started successfully on "fuchsia-5254-0063-5e7a".
Writing to /Users/alice/trace.fxt
Press <enter> to stop trace.

如要停止追蹤記錄,請按下 Enter 鍵。

指令會結束,輸出類似以下的內容:

Shutting down recording and writing to file.
Tracing stopped successfully on "fuchsia-5254-0063-5e7a".
Results written to /Users/alice/trace.fxt
Upload to https://ui.perfetto.dev/#!/  to view.

如要分析本次執行作業收集的結果,請參閱: 以視覺化方式呈現追蹤記錄結果

在背景執行追蹤記錄

只要未使用任何時間長度,背景追蹤記錄就會無限期執行 。如要停止在背景執行的追蹤記錄,您需要執行 ffx trace stop。(進一步瞭解 會在追蹤執行期間儲存在緩衝區中,請參閱 附錄中的緩衝模式選項)。

如要啟動背景追蹤記錄,請執行下列指令:

ffx trace start --background

這個指令會輸出類似以下的輸出內容:

$ ffx trace start --background
Tracing started successfully on "fuchsia-5254-0063-5e7a".
Writing to /Users/alice/trace.fxt
Current tracing status:
- fuchsia-5254-0063-5e7a:
  - Output file: /Users/alice/trace.fxt
  - Duration: indefinite
  - Config:
    - Categories:
      - app,audio,benchmark,blobfs,gfx,input,kernel:meta

如要停止這項追蹤記錄,請參閱「停止追蹤記錄」。

使用計時器在背景執行追蹤記錄

與互動式追蹤類似,您可以在 並設定為在特定時間長度後停止

如要使用計時器啟動背景追蹤記錄,請執行下列指令:

ffx trace start --background --duration <SECONDS>

SECONDS 換成目標時間長度 (以秒為單位),例如:

$ ffx trace start --background --duration 20

如要手動停止這項追蹤記錄,請參閱「停止追蹤記錄」。

透過觸發條件在背景執行追蹤記錄

如果透過觸發條件執行追蹤記錄,系統會在指定時停止追蹤。 事件。

如要使用觸發條件執行追蹤記錄,請執行下列指令:

ffx trace start --background --trigger <TRIGGER>

請使用語法 alert:actionTRIGGER 替換為動作。 例如:

$ ffx trace start --background --trigger "myexample:terminate"

如要手動停止這項追蹤記錄,請參閱「停止追蹤記錄」。

在背景查看追蹤記錄狀態

如要查看背景追蹤記錄的狀態,請執行下列指令:

ffx trace status

這個指令會輸出類似以下的輸出內容:

$ ffx trace status
- fuchsia-5254-0063-5e7a:
  - Output file: /Users/alice/trace.fxt
  - Duration: indefinite
  - Config:
    - Categories:
      - app,audio,benchmark,blobfs,gfx,input,kernel:meta

如果背景沒有追蹤記錄,則指令會顯示 包括:

$ ffx trace status
No active traces running.

停止追蹤記錄

ffx trace stop 指令會停止在背景執行的追蹤記錄。

如要停止追蹤記錄,請執行下列指令:

ffx trace stop [--output <FILE>]

根據預設,指令會停止符合預設目標的追蹤記錄 裝置。不過,您也可以使用 –output 旗標,這樣會停止與 輸出檔案

這個指令會輸出類似以下的輸出內容:

$ ffx trace stop
Tracing stopped successfully on "fuchsia-5254-0063-5e7a".
Results written to /Users/alice/trace.fxt
Upload to https://ui.perfetto.dev/#!/ to view.

如要分析本次執行作業收集的結果,請參閱: 以視覺化方式呈現追蹤記錄結果

以視覺化方式呈現追蹤記錄結果

追蹤記錄完成且建立 .fxt 檔案後,請開啟檔案 Perfetto 檢視器上,以視覺化方式呈現追蹤記錄結果。

請完成下列步驟:

  1. 前往 Perfetto 檢視器網站, 網路瀏覽器。
  2. 按一下導覽列的「Open trace file」
  3. 從主體機器選取 trace.fxt 檔案。

將 FIDL 追蹤記錄符號化

如果包含 kernel:ipc 類別的追蹤記錄,.fxt 追蹤檔會包含幾個與 FIDL 相對應的頻道訊息事件 呼叫。只有這些管道訊息 包含與 FIDL 呼叫相關聯的序數,也就是 所呼叫的方法

Fuchsia 建構目錄包含名稱結尾為 .fidl.json 的檔案。 這類檔案包含將序數轉換成 產生的 FIDL 方法,並且在 Fuchsia 建構期間產生。只要 可以使用 Fuchsia 建構目錄,這些檔案可用於 追蹤檔中對應至對應 FIDL 方法的序數

如要翻譯追蹤檔中的所有序,請使用下列指令:

ffx trace symbolize --fxt <FXT-FILE> [--outfile <OUTFILE>] [--ir-path <ir-path...>]

FXT-FILE 替換為追蹤檔的路徑。根據預設, 原始追蹤檔則在符號化後遭到覆寫。指定 OUTFILE 引數會改為將追蹤記錄寫入指定的檔案。

ir-path 引數可用於提供要用於 IR 檔案的特定 IR 檔案 符號化。這允許使用 IR 檔案。

您也可以使用 指令符號代表個別序數:

ffx trace symbolize [--ordinal <ordinal>] [--ir-path <ir-path...>]

查看追蹤記錄類別

ffx trace start 指令可讓您選取要 用於收集追蹤記錄資料,例如:

$ ffx trace start --categories "kernel,kernel:arch"

如要在 Fuchsia 裝置上查看所有可用的追蹤記錄類別, 執行下列指令:

ffx trace list-categories

這個指令會輸出類似以下的輸出內容:

$ ffx trace list-categories
Known Categories:
- app - Generic application traces
- benchmark - Benchmark traces
- cpu - several, run xyz for the list
- gfx - Graphics & Compositor
- input - Input system
- kernel - All kernel trace events
- kernel:arch - Kernel arch events

Default Categories:
- app
- audio
- benchmark
- blobfs

如要進一步瞭解類別,請參閱: 類別和類別群組

查看追蹤記錄提供者

查看 Fuchsia 的所有可用追蹤記錄提供者 請執行以下指令:

ffx trace list-providers

這個指令會輸出類似以下的輸出內容:

$ ffx trace list-providers
Trace providers:
- ktrace_provider

其他追蹤記錄指南

如需更多指南,請參閱 Fuchsia 追蹤指南 在 Fuchsia 中使用追蹤功能。

附錄

類別和類別群組

ffx trace start 指令支援特殊語法, 精確控制啟用或停用特定類別:

  • 結尾星號 (*) 會比對前置字串。

    舉例來說,kernel* 會啟用 kernel:meta, kernel:sched

  • 斜線 (/) 會將類別限制為特定追蹤記錄提供者。

    舉例來說,archivist.cm/packet 會啟用封包類別 只有 archivist 追蹤服務供應商

ffx trace start 也支援預先定義的類別群組 使用 # 前置字元標示的類別清單。例如: #chrome_nav (擴展至 loadingnetnetlognavigation、 和 browser) 用於指定與資源相關的所有事件 載入和瀏覽網頁,而 #default 代表一組 預設類別

執行 ffx trace start 時,可以一併指定類別群組 類別舉例來說,以下指令會啟用 以及 my_cat 類別:

$ ffx trace start --categories '#default,my_cat'

如要查看主機上的完整類別群組清單,請執行 以下指令:

ffx config get -s all trace.category_groups

您可以使用 ffx config set 指令設定自訂類別群組。 如果想為一組資源定義自訂類別群組, 常用的類別,請執行類似以下的指令:

$ ffx config set trace.category_groups.audiovisual '["audio", "gfx"]'

上述範例指令定義了一個名為 #audiovisual

Chrome 和 WebEngine 類別群組

Chrome 專屬類別群組可實現追蹤資訊 收集自 Chrome 和 WebEngine 的資料

以下是 Chrome 類別群組清單:

  • #chrome_input:輸入處理事件。
  • #chrome_ipc_flows:Mojo IPC 轉送事件。
  • #chrome_js_exec:JavaScript (V8) 事件。
  • #chrome_nav:資源載入、網頁瀏覽和瀏覽器 事件。
  • #chrome_task_sched:非同步工作排程和調度 事件。
  • #chrome_ui_render:Chrome UI 事件 (瀏覽器使用者體驗、瀏覽器) 小工具、合成器和 GPU)。
  • #chrome_web_content_render:內容轉譯事件 (閃爍、 合成器和 GPU)。

所有 Chrome 類別群組都包含topleveltoplevel.flow 涵蓋各種基本 Chrome 事件,例如 非同步工作排程

指定類別時,您可以將 Chrome 類別與 Fuchsia 類別。舉例來說,下列指令會收集追蹤記錄資料 如何搭配 Zircon 核心排程器活動同時顯示 Chrome 內容:

$ ffx trace start --categories kernel:sched,#chrome_web_content_render

緩衝模式選項

--buffering-mode 旗標可讓您決定在 緩衝區會填滿

可採用的選項包括:

  • oneshot:寫入緩衝區,直到緩衝區已滿,然後忽略全部 額外的追蹤記錄事件(這是預設選項)。

  • circular:寫入緩衝區,直到緩衝區已滿,然後替換 舊事件

  • streaming:在追蹤事件發生時將追蹤事件轉送至追蹤記錄管理員 。

    streaming 選項會提供額外的緩衝區空間, 不時將傳送比較複雜的 IPC 傳給 傳送給追蹤記錄管理員

下列指令會執行具有最大可用緩衝區的追蹤記錄 大小 (64 MB),並以新事件覆寫舊事件:

$ ffx trace start --buffer-size 64 --buffering-mode circular

互動模式類似 按 Enter 鍵停止追蹤記錄。

以下指令以新事件覆寫舊事件, 緩衝區並停止追蹤 事件發生時

$ ffx trace start --buffer-size 64 --buffering-mode circular --trigger 'myexample:terminate'

上述指令必須事先設定完畢,上述指令才能正常運作 觸發事件