录制启动跟踪记录

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 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 轨迹缓冲区意味着有足够的空间 来存放内核跟踪缓冲区的内容。

需要注意的第三点是 获取跟踪缓冲区的当前内容,而不感兴趣 能够跟踪任何其他事物因此,将使用 1 秒的时长。