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
下载轨迹。
记录 Zircon 启动轨迹事件
Zircon 内核的内部跟踪系统可以在启动时处于活动状态。这意味着,在系统启动时由内核创建的性能事件可以作为性能轨迹的一部分进行记录和捕获。
启用 Zircon 启动轨迹事件是在 component_manager 启动之前捕获轨迹事件的主要方法。
启用内核跟踪启动参数
内核的轨迹缓冲区大小可在启动时使用 ktrace.bufsize=N
命令行选项进行更改,其中 N
是缓冲区的大小(以兆字节为单位)。
要收集的数据的选择由 `ktrace.grpmask=0xNNN` 命令行选项控制。0xNNN 值是来自 //zircon/kernel/lib/boot-options/include/lib/boot-options/options.inc 的 KTRACE_GRP_* 值的位掩码。默认值为 0x000,用于停用所有轨迹类别(或 ktrace 术语中的组)。
通过设置本地内核选项,可以在本地更改 build 中的内核命令行实参
示例:
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
或 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 秒的时长。