在启动时记录轨迹

ffx trace 工具可用于配置跟踪管理器,以便在系统启动时开始记录性能跟踪记录。这样,您就可以在整个系统运行之前捕获性能事件。

配置启动时间跟踪记录

启动时间跟踪记录的配置与 ffx trace 捕获的任何其他跟踪记录的配置相同。唯一的区别在于,运行 ffx trace start 时,添加 --on-boot 模式开关以表明应在启动时开始跟踪记录。

示例:

ffx trace start --on-boot --buffer-size 32 --duration 120 --buffering-mode streaming

这会将跟踪记录配置为在启动时初始化跟踪管理器时开始。它将使用 32MB 的缓冲区大小,这比 4MB 的默认大小提供了额外的空间来捕获事件。跟踪记录将在 120 秒后自动停止。

检查启动跟踪记录会话的状态

可以使用命令 ffx trace status 检查设备启动时开始的跟踪记录会话的状态。

下载跟踪记录数据

跟踪记录完成后且系统正在运行时,使用 ffx trace stop 下载跟踪记录。

如需自动将跟踪记录数据上传到 Google Cloud Storage (GCS) 并生成指向 Perfetto Trace Viewer 的直接链接,请传递 --upload 标志:

ffx trace stop --upload

记录 Zircon 启动跟踪记录事件

Zircon 内核的内部跟踪记录系统可以在启动时处于活动状态。这意味着,在系统启动时由内核创建的性能事件可以记录并捕获为性能跟踪记录的一部分。

启用 Zircon 启动跟踪记录事件是在 component_manager 启动之前捕获跟踪记录事件的主要方法。

启用内核跟踪记录启动参数

内核的跟踪记录缓冲区的大小可以在启动时 使用 ktrace.bufsize=N 命令行选项进行更改,其中 N 是缓冲区的以兆字节为单位的大小。

要收集的数据的选择由 `ktrace.grpmask=0xNNN' 命令行选项控制。0xNNN 值是 KTRACE_GRP_* //zircon/kernel/lib/boot-options/include/lib/boot-options/options.inc 中的 值的位掩码。默认值为 0x000,这会停用所有跟踪记录类别(或 ktrace 术语中的组)。

通过 设置本地内核选项,可以在本地构建中更改内核命令行实参

示例:

assembly_developer_overrides("custom_kernel_args") {
  kernel = {
    command_line_args = [ "ktrace.grpmask=0xfff", "ktrace.bufsize=32" ]
  }
}

然后,您需要重新构建并重新部署。

如需详细了解 Zircon 命令行选项,请参阅: - kernel_cmdline - kernel_build

在跟踪记录结果中添加内核启动跟踪记录数据

启用内核跟踪记录启动参数后,只要内核的内部跟踪记录缓冲区未倒带,启动后,数据就可以包含在跟踪记录中。这是通过将类别 kernel:retain 传递给 ffx trace 程序来实现的。请注意,如果未传递 kernel:retain 就进行跟踪记录,则 ktrace 缓冲区会倒带,并且数据会丢失。

示例:

ffx trace start --categories "kernel:retain" --buffer-size 32 --duration 1

这里有几点需要注意。

kernel:retain 类别会告知 ktrace_provider 读取跟踪记录缓冲区的当前内容,而不是开始新的跟踪记录。

第二点是缓冲区空间。内核的默认跟踪记录缓冲区空间为 32MB,而 Fuchsia 跟踪记录的默认缓冲区空间为 4MB。使用较大的 Fuchsia 跟踪记录缓冲区空间意味着有足够的空间来保存内核跟踪记录缓冲区的内容。

第三点需要注意的是,在此示例中,我们只想获取跟踪记录缓冲区的当前内容,而对跟踪记录其他内容不感兴趣。这就是使用一秒钟时长的原因。