Perfetto – System-Wide Tracing & Analysis Cheatsheet
Perfetto ist Googles Open-Source, Production-Grade Tracing und Profiling Stack für Linux, Android und Chrome. Sie erfasst System-Wide Traces – CPU Scheduling, Syscalls, Frequency-Änderungen, Memory-Events und Custom App-Events – in ein kompaktes Protobuf-Format, dann lässt Sie sie in einer anspruchsvollen Web UI erkunden oder, einzigartig, mit SQL abfragen. Wo perf Stacks sampelt, zeichnet Perfetto eine Timeline von was jeder Thread und jede CPU tat, was Sie für Latenz- und Concurrency-Probleme brauchen.
Installation
| Komponente | Wie |
|---|
| UI (keine Installation) | Öffnen Sie ui.perfetto.dev in einem Browser |
| CLI Tools | Download tracebox/perfetto von GitHub Releases |
| Android | Eingebaut (adb shell perfetto ...) |
| trace_processor | Download für lokale SQL-Analyse |
| Überprüfen | ./tracebox --help |
Eine Trace erfassen (Linux)
# Einfacher 10-Sekunden System-Wide Trace mit ftrace Scheduling-Daten
./tracebox -o trace.pftrace --txt -c - <<EOF
buffers: { size_kb: 65536 }
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "sched/sched_wakeup"
ftrace_events: "power/cpu_frequency"
}
}
}
duration_ms: 10000
EOF
| Element | Zweck |
|---|
buffers | Ring Buffer Größe für Trace-Daten |
data_sources | Was zu zeichnen ist (ftrace, procstats, heapprofd, …) |
ftrace_events | Spezifische Kernel Tracepoints |
duration_ms | Erfassungslänge |
-o | Output Trace-Datei |
Häufige Datenquellen
| Quelle | Records |
|---|
linux.ftrace | Scheduling, Syscalls, IRQs, Custom Tracepoints |
linux.process_stats | Per-Process CPU/Memory über Zeit |
linux.sys_stats | System-Wide Counter (meminfo, vmstat) |
android.heapprofd | Native Heap Profiling |
android.java_hprof | Java Heap Dumps |
track_event | Application-emittierte Spans/Counter |
Die UI-Workflow
| Schritt | Aktion |
|---|
| 1 | Öffnen Sie ui.perfetto.dev und ziehen Sie die Trace herein |
| 2 | Timeline zeigt CPUs, Threads und Tracks |
| 3 | W/S Zoom, A/D Pan |
| 4 | Klicken Sie auf einen Slice, um seine Dauer und Args zu sehen |
| 5 | Wählen Sie einen Range → Zusammenfassung von was lief |
| 6 | Verwenden Sie die Abfrage-Box für SQL-Analyse |
SQL-Analyse (der Superpower)
Perfettos Trace Processor exponiert die Trace als abfragbare Tabellen.
-- Längste laufende Slices
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;
-- CPU-Zeit pro Process
SELECT p.name, SUM(s.dur)/1e6 AS cpu_ms
FROM sched s JOIN thread t USING(utid) JOIN process p USING(upid)
GROUP BY p.name ORDER BY cpu_ms DESC;
-- Warum wurde ein Thread blockiert?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
| Tabelle | Enthält |
|---|
slice | Benannte, verschachtelte Duration Events |
sched | Scheduling Slices pro CPU |
thread_state | Running/Sleeping/Blocked Intervalle |
counter | Numerische Time Series (Freq, Memory) |
process, thread | Process/Thread Metadaten |
Lokale Analyse
# Interaktive SQL-Shell über einer Trace
./trace_processor trace.pftrace
# Führen Sie eine Abfrage aus und emittieren Sie JSON zum Scripting
./trace_processor -q query.sql --query-output json trace.pftrace
Wofür Perfetto am besten ist
| Problem | Warum Perfetto hilft |
|---|
| Latenz-Spitzen | Sehen Sie genau was zur dem Moment lief/blockiert |
| Lock Contention | thread_state zeigt blockierte Intervalle und Gründe |
| CPU Migration/Scheduling | Pro-CPU Timeline von jedem Thread |
| Frequency/Thermal Effekte | Korrelieren Sie cpufreq Counter mit Slowdowns |
| App + Kernel Korrelation | App-Spans auf der gleichen Timeline wie Kernel-Events |
| Aspekt | Perfetto | Perf | bpftrace |
|---|
| Modell | Volle Timeline Trace | Sampling Profiler | Ad-hoc eBPF Probes |
| Analyse | UI + SQL | Reports/Flame Graphs | Custom Scripts |
| Am besten für | Latenz/Concurrency/Timeline | CPU Hot Paths | Gezielte Kernel-Fragen |
| Overhead | Moderat (konfigurierbar) | Niedrig | Niedrig |
Ergänzt perf (CPU Hot Spots) und bpftrace (gezielte Probes); Perfetto antwortet “was passierte wann.”
Ressourcen