perfetto
配置traced.service和traced_probes.service
sudo nano /etc/systemd/system/traced.service
[Unit]
Description=Perfetto Core Daemon (traced)
Documentation=https://perfetto.dev
After=network.target
Before=traced_probes.service
[Service]
Type=simple
ExecStart=/usr/local/bin/traced
ExecStartPre=/bin/mkdir -p /run/perfetto
ExecStartPre=/bin/chmod 755 /run/perfetto
Environment=PERFETTO_PRODUCER_SOCK_NAME=/run/perfetto/perfetto-producer
Environment=PERFETTO_CONSUMER_SOCK_NAME=/run/perfetto/perfetto-consumer
Restart=always
RestartSec=3
sudo nano /etc/systemd/system/traced_probes.service
[Unit]
Description=Perfetto Probes Daemon (traced-probes)
Documentation=https://perfetto.dev
Requires=traced.service
After=traced.service
PartOf=traced.service
[Service]
Type=simple
ExecStart=/usr/local/bin/traced_probes
#ExecStartPre=/bin/chmod 666 /run/perfetto/perfetto-producer 2>/dev/null || true
#ExecStartPre=/bin/chmod 666 /run/perfetto/perfetto-consumer 2>/dev/null || true
Environment=PERFETTO_PRODUCER_SOCK_NAME=/run/perfetto/perfetto-producer
Environment=PERFETTO_CONSUMER_SOCK_NAME=/run/perfetto/perfetto-consumer
Restart=always
更新 tmpfiles 配置
sudo nano /etc/tmpfiles.d/perfetto.conf
# 类型 路径 权限 用户 组 年龄 参数
d /run/perfetto 0755 root root - -
# 设置 producer socket 权限为 666
z /run/perfetto/perfetto-producer 0666 root root -
# 设置 consumer socket 权限为 666(可选)
z /run/perfetto/perfetto-consumer 0666 root root -
# 应用配置
sudo systemd-tmpfiles --create /etc/tmpfiles.d/perfetto.conf
继续配置traced服务
sudo systemctl daemon-reload
sudo systemctl stop traced traced_probes
sudo systemctl enable traced traced_probes
# 启动 traced
sudo systemctl start traced
# 检查 socket 是否创建
ls -la /run/perfetto/
# 确保 consumer socket 权限正确
sudo chmod 666 /run/perfetto/perfetto-consumer
# 启动 traced_probes
sudo systemctl start traced_probes
# 检查状态
sudo systemctl status traced_probes --no-pager
记录systrace
perfetto --txt -c ./config.pbtxt -o ./traces/learn_trace.perfetto-trace
// config.pbtxt
buffers: {
size_kb: 32768
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 8192
fill_policy: RING_BUFFER
}
duration_ms: 300000
# ---- ftrace: 内核级事件 ----
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 0
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "sched/sched_wakeup"
ftrace_events: "sched/sched_wakeup_new"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "sched/sched_process_exec"
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
ftrace_events: "irq/irq_handler_entry"
ftrace_events: "irq/irq_handler_exit"
ftrace_events: "irq/softirq_entry"
ftrace_events: "irq/softirq_exit"
ftrace_events: "workqueue/workqueue_execute_start"
ftrace_events: "workqueue/workqueue_execute_end"
ftrace_events: "block/block_rq_issue"
ftrace_events: "block/block_rq_complete"
ftrace_events: "writeback/writeback_pages_written"
ftrace_events: "writeback/wbc_writepage"
drain_period_ms: 250
}
}
}
# ---- track_event: 应用自定义插桩事件 ----
data_sources: {
config {
name: "track_event"
target_buffer: 1
}
}
# ---- 进程信息: 让 trace 里显示进程/线程名 ----
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
proc_stats_poll_ms: 10
}
}
}
自定义trace验证1
编译perfetto的sdk,用于sqlite,效果如下
自定义trace验证2
skia本身集成perfetto的sdk,编译skia,验证viewer,效果如下
out/Debug/viewer -b vk --trace perfetto --match blurrects --perfettoOutputDir ~/skia/systrace/