TRACED_PROBES(8)

名称

traced_probes - 系统和操作系统探针

描述

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

traced 的关系

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

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

traced_probes and traced

安全和权限

traced_probes 通常需要以提升的权限(例如,Android 上的 rootsystem 用户)运行以访问内核接口,如 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)

data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "sched/sched_switch" ftrace_events: "power/cpu_idle" ftrace_events: "sched/sched_waking" } } }

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

data_sources: { config { name: "linux.process_stats" process_stats_config { scan_all_processes_on_start: true proc_stats_poll_ms: 1000 } } }

linux.sys_stats(系统范围统计)

data_sources: { config { name: "linux.sys_stats" sys_stats_config { meminfo_period_ms: 1000 vmstat_period_ms: 1000 stat_period_ms: 1000 } } }

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

data_sources: { config { name: "linux.sysfs_power" } }

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

data_sources: { config { name: "linux.inode_file_map" inode_file_config { scan_interval_ms: 10000 scan_delay_ms: 5000 scan_batch_size: 1000 } } }

metatrace(Perfetto 自 tracing)

data_sources: { config { name: "metatrace" } }

linux.system_info(系统信息)

data_sources: { config { name: "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(电源和电池信息)

data_sources: { config { name: "android.power" android_power_config { battery_poll_ms: 1000 battery_counters: BATTERY_COUNTER_CHARGE battery_counters: BATTERY_COUNTER_CAPACITY_PERCENT collect_power_rails: true } } }

android.log(Android Logcat)

data_sources: { config { name: "android.log" android_log_config { log_ids: LID_DEFAULT log_ids: LID_SYSTEM min_prio: PRIO_INFO filter_tags: "ActivityManager" } } }

android.system_property(Android 系统属性)

data_sources: { config { name: "android.system_property" android_system_property_config { poll_ms: 1000 property_name: "debug.tracing.screen_state" } } }

android.packages_list(Android 包信息)

data_sources: { config { name: "android.packages_list" packages_list_config { package_name_filter: "com.android.systemui" package_name_filter: "com.google.android.apps.nexuslauncher" } } }

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

data_sources: { config { name: "android.game_interventions" android_game_intervention_list_config { package_name_filter: "com.example.mygame" } } }

android.cpu.uid(每 UID CPU 时间)

data_sources: { config { name: "android.cpu.uid" cpu_per_uid_config { poll_ms: 1000 } } }

android.kernel_wakelocks(内核唤醒锁)

data_sources: { config { name: "android.kernel_wakelocks" kernel_wakelocks_config { poll_ms: 1000 } } }

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

data_sources: { config { name: "android.polled_state" android_polled_state_config { poll_ms: 500 } } }

android.statsd(Android StatsD 原子)

data_sources: { config { name: "android.statsd" statsd_tracing_config { pull_config { pull_atom_id: 10000 # 示例拉取原子 pull_frequency_ms: 1000 } push_atom_id: 10037 # 示例推送原子 } } }