记录内核跟踪记录

内核通过将记录写入内部缓冲区来跟踪各种操作,稍后可以对其进行检索、输出和查看。

内核轨迹格式

内核轨迹格式使用 FXT

控制要跟踪的内容

内核命令行参数 ktrace.grpmask 控制了要跟踪的内容。该值指定为 0xNNN,是要启用的跟踪组的位掩码。请参阅 system/ulib/zircon-internal/include/lib/zircon-internal/ktrace.h 中的 *KTRACE_GRP_*值。 默认值为 0xfff,可跟踪所有内容。

要跟踪的内容也可以通过 ktrace 命令行实用程序控制,如下所述。

轨迹缓冲区空间

轨迹缓冲区的大小在启动时是固定的,由 ktrace.bufsize 内核命令行参数控制。其值为缓冲区大小(以兆字节为单位)。默认值为 32MB。

ktrace 命令行实用程序

可以使用 ktrace 命令行实用程序控制内核跟踪。

$ ktrace --help
Usage: ktrace [options] <control>
Where <control> is one of:
  start <group_mask>  - start tracing
  stop                - stop tracing
  rewind              - rewind trace buffer
  written             - print bytes written to trace buffer
    Note: This value doesn't reset on "rewind". Instead, the rewind
    takes effect on the next "start".
  save <path>         - save contents of trace buffer to <path>

Options:
  --help  - Duh.

查看内核跟踪记录

轨迹文件可以上传到 ui.perfetto.dev 以供查看。或者,可以使用主机工具 trace2json 将轨迹导出到更易读的 json 输出。

示例:

首先在目标上收集跟踪记录:

$ ktrace start 0xfff
... do something ...
$ ktrace stop
$ ktrace save /tmp/save.ktrace

然后,将该文件复制到开发主机,并将其导出:

host$ out/default/host-tools/netcp :/tmp/save.ktrace save.fxt
host$ fx trace2json < save.fxt > save.json

输出内容可能非常庞大,因此建议将其发送到文件,然后在编辑器或其他工具中查看。

与 Fuchsia Tracing 搭配使用

Fuchsia 的跟踪系统支持通过 ktrace_provider 跟踪提供程序收集内核跟踪记录。如需有关 Fuchsia 跟踪系统的文档,请参阅 Fuchsia 跟踪系统中的文档。

更多信息

如需详细了解 ktrace,请参阅内核命令行参数的完整列表