記錄啟動追蹤記錄

Zircon 核心的內部追蹤系統可在啟動時啟用。也就是說,使用者可以設定啟動選項,藉此追蹤啟動核心那一端。啟動完成後,資料就已存在,只需要收集資料。

啟用核心追蹤啟動參數

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

選擇收集的資料是由「ktrace.grpmask=0xNNN」指令列選項控管。0xNNN 值是來自 //zircon/kernel/lib/boot-options/include/lib/boot-options/options.inc 的 KTRACE_GRP_* 值的位元遮罩。預設值為 0x000,這會停用所有追蹤記錄類別 (或 ktrace 剖析中的群組)。

透過 fx set 指令,將啟動選項設為 GN 變數:

fx set ... --args='dev_kernel_cmdline=["ktrace.grpmask=0xFFF"]'

然後必須重新建構並重新部署。

如要進一步瞭解 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 不要在追蹤開始時倒轉核心追蹤記錄緩衝區。

第二個是緩衝區大小核心的預設追蹤記錄緩衝區空間是 32 MB,Fuchsia 追蹤的預設緩衝區空間則是 4MB。使用較大的 Fuchsia 追蹤記錄緩衝區空間,意味著有足夠的空間可以保留核心追蹤緩衝區的內容。

第三,請務必留意,在這個範例中,我們只想要擷取追蹤記錄緩衝區的目前內容,而不再想要追蹤任何項目。這也是為什麼我們會使用一秒的長度。