记录内核跟踪记录

内核会将记录写入内部缓冲区,以捕获各种操作的轨迹。然后,您可以在 Perfetto 等工具中检索、打印和查看这些轨迹。

内核轨迹格式

内核轨迹格式使用 FXT。

轨迹缓冲区大小

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

控制要跟踪的内容

您可以通过内核命令行参数 ktrace.grpmask 控制要跟踪的内容。该值指定为 0xNNN,是一个用于启用跟踪组的位掩码。查看 system/ulib/zircon-internal/include/lib/zircon-internal/ktrace.h 中的 KTRACEGRP 值。默认情况下,值为 0xfff,表示跟踪所有内容。

您还可以使用 ktrace 命令行实用程序动态控制要跟踪的内容。

ktrace 命令行实用程序

您可以使用 ktrace 命令行实用程序控制内核轨迹。

使用 ktrace --help 可查看所有可用命令:

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 查看轨迹。您需要先捕获轨迹,然后才能查看轨迹。

  1. 在目标设备上开始跟踪:

    ktrace start 0xfff
    ... do something ...
  2. 停止轨迹:

    ktrace stop
  3. 将轨迹保存到 /tmp/save.ktrace:

    ktrace save /tmp/save.ktrace
  4. 使用 fx cp 将文件复制到开发主机:

    fx cp --to-host /tmp/save.ktrace save.fxt
    
  5. 在 ui.perfetto.dev 中查看轨迹文件。

与 Fuchsia 跟踪搭配使用

Fuchsia 的跟踪系统支持通过 ktrace_provider 跟踪提供方收集内核跟踪记录。如需详细了解 Fuchsia 的跟踪系统,请参阅 Fuchsia 跟踪系统。