TRACED_PROBES(8)

名称

traced_probes - 系统和操作系统探针

描述

traced_probes 是一个专门的守护程序,充当 Perfetto 架构中特权化的 Producer。虽然任何应用程序都可以作为生产者来贡献自己的 trace 数据,但 traced_probes 专门负责收集通常需要提升权限的系统和内核级别的数据。

与 traced 的关系

traced_probes 是 traced 服务的客户端。它连接到 traced 的生产者套接字并注册一组数据源。然后,traced 向 traced_probes 发送请求以启动或停止这些数据源,作为 Tracing Session 的一部分。

这种关注点分离是 Perfetto 设计的关键部分。traced 是中央管理器,而 traced_probes 是专门的数据提供者。这种解耦架构允许多个独立的生产者和消费者同时与 tracing 系统交互而不会相互干扰。

traced_probes and traced

安全和权限

traced_probes 通常需要以提升的权限(例如,Android 上的 root 或 system 用户)运行以访问内核接口,如 debugfs 或 /proc。将这些高权限探针分离到自己的守护程序中是 Perfetto 安全模型的关键部分。它确保只有最少的代码以高权限运行,遵循最小权限原则。

配置

traced_probes 提供的数据源在发送到 traced 的主 trace 配置 protobuf 中配置。例如,要启用 ftrace,你将在 linux.ftrace 数据源的 DataSourceConfig 中包含一个 FtraceConfig。

数据源

traced_probes 提供广泛的数据源,收集系统和内核级别的数据。这些数据源的配置在整体 trace 配置的 data_sources 部分中指定。每个数据源在 data_source_config 块中都有自己的配置消息。

以下是总体结构的示例:

data_sources: { config { name: "linux.ftrace" ftrace_config { # ... ftrace 特定设置 } } } data_sources: { config { name: "linux.process_stats" process_stats_config { # ... process_stats 特定设置 } } }

以下是 traced_probes 提供的主要数据源的详细列表,按平台分隔。

Linux 数据源

这些数据源在基于 Linux 的系统上可用,包括 Android。

以下是启用几个 Linux 数据源的 trace 配置示例:

# 启用几个 Linux 数据源的 trace 配置示例。 data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "sched/sched_switch" ftrace_events: "power/cpu_idle" } } } data_sources: { config { name: "linux.process_stats" process_stats_config { scan_all_processes_on_start: true proc_stats_poll_ms: 1000 } } } data_sources: { config { name: "linux.sys_stats" sys_stats_config { meminfo_period_ms: 1000 vmstat_period_ms: 1000 } } }

linux.ftrace(内核 tracing)

linux.process_stats(进程和线程统计)

linux.sys_stats(系统范围统计)

linux.sysfs_power(电源和电池信息)

linux.inode_file_map(Inode 到文件路径映射)

perfetto.metatrace(Perfetto 自 tracing)

linux.system_info(系统信息)

Android 数据源

这些数据源仅在 Android 上可用。

以下是启用几个 Android 数据源的 trace 配置示例:

# 启用几个 Android 数据源的 trace 配置示例。 data_sources: { config { name: "android.power" android_power_config { battery_poll_ms: 1000 battery_counters: BATTERY_COUNTER_CHARGE collect_power_rails: true } } } data_sources: { config { name: "android.log" android_log_config { log_ids: LID_DEFAULT log_ids: LID_SYSTEM } } } data_sources: { config { name: "android.packages_list" } }

android.power(电源和电池信息)

android.log(Android Logcat)

android.system_property(Android 系统属性)

android.packages_list(Android 包信息)

android.game_interventions(Android 游戏干预列表)

android.cpu_per_uid(每 UID CPU 时间)

android.kernel_wakelocks(内核唤醒锁)

android.polled_state(Android 初始显示状态)

android.statsd(Android StatsD 原子)