Zircon 内核的内部跟踪系统可以在启动时处于活跃状态。这意味着,我们可以通过 通过设置启动选项,尽量减少启动的内核端。然后,在启动完成后,数据 已经存在,只需收集即可。
启用内核跟踪启动参数
内核的跟踪缓冲区大小可以在启动时更改
ktrace.bufsize=N
命令行选项,其中 N
是大小
缓冲区空间(以兆字节为单位)。
选择要收集的数据由“ktrace.grpmask=0xNNN”控制 命令行选项。0xNNN 值是 KTRACE_GRP_* 的位掩码 值来自 //zircon/kernel/lib/boot-options/include/lib/boot-options/options.inc. 默认值为 0x000,这会停用所有跟踪类别(或 。
通过 fx set
命令将启动选项设置为 GN 变量:
fx set ... --args='dev_kernel_cmdline=["ktrace.grpmask=0xFFF"]'
然后,您需要重新构建并重新部署。
如需详细了解 Zircon 命令行选项,请参阅: - kernel_cmdline - kernel_build
在轨迹结果中包含内核启动轨迹数据
启用内核跟踪启动参数后,只要内核的内部跟踪缓冲区
不倒回,在启动后,数据将包含在跟踪记录中。这是通过
将类别 kernel:retain
传递给 ffx trace
或 trace
程序。请注意
执行时,系统不会传递 kernel:retain
,则 ktrace 缓冲区会快退,数据将会丢失。
示例:
ffx trace start --categories "kernel,kernel:retain" --buffer-size 32 --duration 1
以下是需要注意的几点重要事项。
首先要注意的是传递的类别:kernel
和 kernel:retain
。
kernel
类别会告知内核跟踪所有内容。
在本示例中,内核已经在跟踪所有内容:
启动时默认值此处指定它是一种简单的
告知 ktrace_provider
,即 Fuchsia 跟踪记录之间的接口
系统和内核,则系统和内核正在收集内核数据。
kernel:retain
类别用于告知 ktrace_provider
不要快退
跟踪开始时的内核跟踪缓冲区。
第二个是缓冲区空间。内核的默认跟踪缓冲区大小 为 32MB,而 Fuchsia 跟踪的默认缓冲区大小为 4MB。 使用更大的 Fuchsia 轨迹缓冲区意味着有足够的空间 来存放内核跟踪缓冲区的内容。
需要注意的第三点是 获取跟踪缓冲区的当前内容,而不感兴趣 能够跟踪任何其他事物因此,将使用 1 秒的时长。