在啟動時錄製追蹤記錄

ffx trace 工具可用於設定追蹤管理員,在系統啟動時開始記錄效能追蹤記錄。這樣一來,就能在完整系統執行前擷取效能事件。

設定開機時間追蹤記錄

開機時間追蹤記錄的設定方式,與 ffx trace 擷取的任何其他追蹤記錄相同。唯一不同的是,執行 ffx trace start 時,請新增 --on-boot 模式切換,指出應在啟動時開始追蹤。

範例:

ffx trace start --on-boot --buffer-size 32 --duration 120 --buffering-mode streaming

這項設定會在啟動時初始化追蹤管理員,並開始追蹤。系統會使用 32 MB 的緩衝區大小,比預設的 4 MB 多出空間來擷取事件。追蹤作業會在 120 秒後自動停止。

檢查啟動追蹤工作階段的狀態

如要檢查裝置啟動時啟動的追蹤工作階段狀態,請使用 ffx trace status 指令。

下載追蹤記錄資料

追蹤完成且系統正在執行時,請使用 ffx trace stop 下載追蹤記錄。

記錄 Zircon 啟動追蹤事件

Zircon 核心的內部追蹤系統可在開機時啟動。也就是說,系統啟動時核心建立的效能事件,可以記錄及擷取為效能追蹤記錄的一部分。

啟用 Zircon 啟動追蹤事件,是在 component_manager 啟動前擷取追蹤事件的主要方法。

啟用核心追蹤啟動參數

您可以在開機時使用 ktrace.bufsize=N 指令列選項變更核心的追蹤緩衝區大小,其中 N 是緩衝區大小 (以 MB 為單位)。

如要控管要收集的資料,請使用 `ktrace.grpmask=0xNNN' 指令列選項。0xNNN 值是 KTRACE_GRP_* 的位元遮罩,來自 //zircon/kernel/lib/boot-options/include/lib/boot-options/options.inc。預設值為 0x000,會停用所有追蹤類別 (或 ktrace 用語中的群組)。

您可以在建構作業中設定本機核心選項,在本機變更核心指令列引數

範例:

assembly_developer_overrides("custom_kernel_args") {
  kernel = {
    command_line_args = [ "ktrace.grpmask=0xFFF", "ktrace.bufsize=32" ]
  }
}

接著您必須重新建構和重新部署。

如要進一步瞭解 Zircon 指令列選項,請參閱: - kernel_cmdline - kernel_build

在追蹤記錄結果中加入核心啟動追蹤記錄資料

啟用核心追蹤開機參數後,只要核心的內部追蹤緩衝區未倒轉,開機後即可將資料納入追蹤記錄。方法是將類別 kernel:retain 傳遞至 ffx tracetrace 程式。請注意,如果沒有傳遞 kernel:retain 就建立追蹤記錄,ktrace 緩衝區就會倒轉,資料也會遺失。

範例:

ffx trace start --categories "kernel,kernel:retain" --buffer-size 32 --duration 1

請注意以下幾項重要事項。

首先,請注意傳遞的類別:kernelkernel:retainkernel 類別會指示核心追蹤所有項目。在本範例中,核心已追蹤所有項目,也就是啟動時的預設行為。這裡指定這個值,是為了以簡單的方式告知 ktrace_provider (Fuchsia 追蹤系統和核心之間的介面),系統正在收集核心資料。kernel:retain 類別會告知 ktrace_provider,不要在追蹤開始時倒轉核心追蹤緩衝區。

第二個是緩衝區大小。核心的預設追蹤緩衝區大小為 32MB,而 Fuchsia 追蹤的預設緩衝區大小為 4MB。使用較大的 Fuchsia 追蹤記錄緩衝區大小,表示有足夠空間可保存核心追蹤記錄緩衝區的內容。

第三個重要事項是,在這個範例中,我們只想擷取追蹤緩衝區的目前內容,對追蹤其他項目不感興趣。因此使用一秒的持續時間。