Zum Inhalt springen

Perfetto – System-Wide Tracing & Analysis Cheatsheet

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

KomponenteWie
UI (keine Installation)Öffnen Sie ui.perfetto.dev in einem Browser
CLI ToolsDownload tracebox/perfetto von GitHub Releases
AndroidEingebaut (adb shell perfetto ...)
trace_processorDownload 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
ElementZweck
buffersRing Buffer Größe für Trace-Daten
data_sourcesWas zu zeichnen ist (ftrace, procstats, heapprofd, …)
ftrace_eventsSpezifische Kernel Tracepoints
duration_msErfassungslänge
-oOutput Trace-Datei

Häufige Datenquellen

QuelleRecords
linux.ftraceScheduling, Syscalls, IRQs, Custom Tracepoints
linux.process_statsPer-Process CPU/Memory über Zeit
linux.sys_statsSystem-Wide Counter (meminfo, vmstat)
android.heapprofdNative Heap Profiling
android.java_hprofJava Heap Dumps
track_eventApplication-emittierte Spans/Counter

Die UI-Workflow

SchrittAktion
1Öffnen Sie ui.perfetto.dev und ziehen Sie die Trace herein
2Timeline zeigt CPUs, Threads und Tracks
3W/S Zoom, A/D Pan
4Klicken Sie auf einen Slice, um seine Dauer und Args zu sehen
5Wählen Sie einen Range → Zusammenfassung von was lief
6Verwenden 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;
TabelleEnthält
sliceBenannte, verschachtelte Duration Events
schedScheduling Slices pro CPU
thread_stateRunning/Sleeping/Blocked Intervalle
counterNumerische Time Series (Freq, Memory)
process, threadProcess/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

ProblemWarum Perfetto hilft
Latenz-SpitzenSehen Sie genau was zur dem Moment lief/blockiert
Lock Contentionthread_state zeigt blockierte Intervalle und Gründe
CPU Migration/SchedulingPro-CPU Timeline von jedem Thread
Frequency/Thermal EffekteKorrelieren Sie cpufreq Counter mit Slowdowns
App + Kernel KorrelationApp-Spans auf der gleichen Timeline wie Kernel-Events

Perfetto vs verwandte Tools

AspektPerfettoPerfbpftrace
ModellVolle Timeline TraceSampling ProfilerAd-hoc eBPF Probes
AnalyseUI + SQLReports/Flame GraphsCustom Scripts
Am besten fürLatenz/Concurrency/TimelineCPU Hot PathsGezielte Kernel-Fragen
OverheadModerat (konfigurierbar)NiedrigNiedrig

Ergänzt perf (CPU Hot Spots) und bpftrace (gezielte Probes); Perfetto antwortet “was passierte wann.”

Ressourcen