并发 trace 会话

Perfetto 支持多个并发 trace 会话。会话彼此隔离,每个会话可以在其 配置 中选择不同的生产者和数据源组合,并且通常它只接收该配置指定的事件。这是一个强大的机制,允许在从实验室或现场收集 trace 时具有很大的灵活性。然而,并发 trace 会话有一些注意事项:

  1. 某些数据源不支持并发会话
  2. 某些设置是每个会话的,而其他设置是每个生产者的
  3. 由于 atrace 的工作方式,如果会话请求 任何 atrace 类别或应用程序,它将接收 所有 在设备上启用的 atrace 事件
  4. 应用各种限制

某些数据源不支持并发会话

虽然使用 Perfetto SDK 实现的大多数数据源以及 Perfetto 团队提供的大多数数据源确实支持并发 trace 会话,但有些不支持。这可能是由于:

已知可以工作

已知可以工作但有注意事项

已知不能工作

某些设置是每个会话的而其他设置是每个生产者的

配置中指定的大多数缓冲区大小和时间是每个会话的。例如缓冲区大小

但是,某些参数配置每个生产者的设置:例如,生产者和 traced 之间的 shmem 缓冲区的大小和布局。虽然这是通用数据源设置,但同样适用于数据源特定设置。例如, ftrace [内核缓冲区大小和排空周期](https://cs.android.com/android/platform/superproject/main/+/main:external/perfetto/protos/perfetto/config/ftrace/ftrace_config.proto;l=32;drc=6a3d3540e68f3d5949b5d86ca736bfd7f811deff)是必须在 traced_probes 的所有用户之间共享的设置。

请记住

Atrace

Atrace 是 Android 特定的机制,用于进行用户空间检测,并且是将 Perfetto SDK 引入 Android 之前唯一可用的 trace 方法。它仍然为 os.Trace(由平台和应用程序 Java 代码使用)和 ATRACE_*(由平台 C++ 使用)提供支持。

Atrace(Perfetto 之前和通过 Perfetto)的工作方式如下:

如上所述,每个类别可能启用多个内核 ftrace 事件。例如,"sched" atrace 类别启用 sched/sched_switch ftrace 事件。内核 ftrace 事件不受当前会话问题的影响,因此不会进一步描述。

对于用户空间检测:

各种限制