Fuchsia 跟踪系统

紫红色追踪的目的是提供一种收集、汇总 并直观呈现来自 Fuchsia 用户空间的诊断跟踪信息 进程和 Zircon 内核。

如需详细了解如何在 Fuchsia 中使用跟踪,请参阅以下指南:

默认情况下, Fuchsia 中的跟踪功能处于关闭状态。当某个事件发生时,例如 系统问题或启动调试会话时, 任意时间段都会开启。您不仅可以开启或关闭跟踪功能, 但可以单独选择特定的跟踪类别。

Fuchsia 跟踪系统的一部分

在 Fuchsia 跟踪系统中,以下 组件 以分布式方式运作:

Trace 提供程序

在编写用于创建跟踪数据的组件时,该组件会变为 跟踪提供程序。一个系统可以有多个跟踪记录提供程序。

Fuchsia 为其跟踪系统采用分布式实现, 轨迹提供程序将跟踪数据直接写入 Zircon 虚拟内存中 对象 (VMO),即共享内存段。跟踪数据会存储 而不会将其复制到任何其他位置有关 有关 VMO 的信息,请参阅 虚拟内存对象

在代码中指定 trace 语句后,类别会为你提供 控制要记录哪些跟踪数据。然后,当您运行 跟踪客户端并指定特定类别,则跟踪客户端仅记录 跟踪提供程序中的指定类别。

可跟踪或向系统提供跟踪信息的组件; 实现 TraceProvider FIDL 协议并注册跟踪提供程序 与 Registry 相关联。注册后,跟踪提供程序会在 开始或停止跟踪,并且有机会 以 Fuchsia 跟踪记录格式编码的跟踪记录数据。 请参阅 fuchsia.tracing.provider

轨迹提供程序(要跟踪的组件)仅写入轨迹缓冲区。 如果在跟踪运行时,跟踪提供程序的跟踪缓冲区已满,则 缓冲模式决定了跟踪提供程序的行为。有关 有关缓冲模式的信息,请参阅 跟踪提供程序缓冲模式

跟踪客户端

跟踪客户端是用于处理跟踪提供程序的数据的组件 生成。一个系统可以有多个跟踪提供程序和跟踪客户端。跟踪记录 客户端与跟踪管理器联系,请求启动跟踪 或停止。跟踪客户端还可以请求保存收集的跟踪数据。通过 跟踪管理器收集数据,并通过套接字将其发送到跟踪客户端。

跟踪客户端不能直接影响跟踪提供程序的运行。 在 Fuchsia 跟踪系统中,跟踪提供程序将数据写入 VMO,然后 跟踪管理器从 VMO 读取数据,最后跟踪客户端从 跟踪来自套接字的数据

Fuchsia 使用的单个轨迹客户端包含以下实用程序:

  • trace:此实用程序在 Fuchsia 目标上运行。 trace 控制跟踪并将命令发送到跟踪记录 来启动和停止跟踪,并收集跟踪数据。它还 支持将 Fuchsia 跟踪记录归档转换为其他格式,例如 Catapult JSON 记录。
  • ffx trace:此实用程序在开发主机上运行。 ffx trace 会与 trace 实用程序通信。然后, 作为输出文件从 trace 流式传输到开发主机。

您可以直接使用 Controller FIDL 协议收集跟踪记录信息。 请参阅 fuchsia.tracing.controller

Trace 管理器

跟踪管理器是一项系统服务,用于协调 跟踪提供程序,并定位来自每个跟踪提供程序的数据。还有 Fuchsia 中只有一个跟踪管理器。它可确保跟踪过程 有序,并分离出提供跟踪提供程序的组件 来自 Trace 客户端。跟踪管理器会为每个已注册的虚拟机分配一个 VMO 跟踪提供程序。

跟踪管理器实现以下 FIDL 协议:

  • Controller:为跟踪客户端提供枚举功能 跟踪提供程序,并收集跟踪数据。请参阅 fuchsia.tracing.controller
  • Registry:为轨迹提供程序提供注册功能 自身,以便跟踪系统可以发现它们。 请参阅注册表

先进先出 (FIFO) 方法通知跟踪管理器开始 跟踪提供程序的关闭和关闭系统会从跟踪记录中传递 FIFO 句柄 在初始启动跟踪过程中分配给每个跟踪提供程序 请求。如需详细了解 Fuchsia 提供的 FIFO 数据包, 跟踪系统使用情况,请参阅 FIFO 数据包

跨进程通信

下面介绍了 Fuchsia 跟踪的通信:

  • 轨迹提供程序和轨迹管理器没有同步点 而不是开始或停止收集。
  • 轨迹提供程序(要跟踪的组件)仅写入轨迹缓冲区, 也从不读取其内容
  • 跟踪管理器仅从跟踪缓冲区读取数据,而不向其写入数据。
  • 轨迹客户端通过套接字从轨迹管理器接收轨迹归档 且绝不读取原始跟踪缓冲区。这样可以保护跟踪记录提供程序 以防跟踪客户端操纵

当您启动跟踪时,跟踪管理器会询问所有相关的 跟踪提供程序以开始跟踪,并为每个提供程序提供跟踪缓冲区 他们应将跟踪记录写入的 VMO。跟踪记录运行时, 跟踪管理器会监控并激活新注册的跟踪提供程序 。

跟踪完成后,跟踪管理器会使所有处于活跃状态的跟踪提供程序 停止跟踪。然后,跟踪管理器会等待每个跟踪提供程序 确认已编写完跟踪事件。跟踪记录 然后读取并验证写入跟踪缓冲区的跟踪数据 VMO 并创建跟踪记录归档。

即使是跟踪提供程序,跟踪管理器通常也可以恢复部分数据。 异常终止,但前提是他们设法将一些数据存储到 跟踪缓冲区。如果跟踪提供程序的跟踪缓冲区变为 在轨迹运行期间处于满满状态,缓冲模式会决定 跟踪提供程序。如需了解详情,请参阅 跟踪提供程序缓冲模式

跟踪管理器通过 一个套接字这些数据是根据 Fuchsia 跟踪记录格式 但是,如果跟踪提供程序故意发出垃圾数据,其中可能会包含无意义数据。

图 1 显示了 Fuchsia 跟踪系统的组件以及 它们彼此通信

下图显示了 Fuchsia 跟踪系统。

图 1. Fuchsia 跟踪系统