Aller au contenu

Perfetto - Guide du tracing et de l'analyse system-wide

Perfetto - Guide du tracing et de l’analyse system-wide

Perfetto est la stack de tracing et profiling open-source, production-grade de Google pour Linux, Android, et Chrome. Elle capture les traces system-wide — CPU scheduling, syscalls, changements de fréquence, événements mémoire, et événements d’application personnalisés — dans un format protobuf compact, puis vous permet de les explorer dans une UI sophistiquée ou, de façon unique, de les interroger avec SQL. Où perf prélève les stacks, Perfetto enregistre une timeline de ce que chaque thread et CPU faisait, c’est ce dont vous avez besoin pour les problèmes de latence et de concurrence.

Installation

ComposantComment
UI (pas d’installation)Ouvrir ui.perfetto.dev dans un navigateur
CLI toolsTélécharger tracebox/perfetto depuis GitHub Releases
AndroidBuilt in (adb shell perfetto ...)
trace_processorTélécharger pour l’analyse SQL locale
Vérifier./tracebox --help

Capturer une trace (Linux)

# Simple trace system-wide de 10 secondes avec données scheduling ftrace
./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
ÉlémentObjectif
buffersTaille du ring buffer pour les données de trace
data_sourcesQuoi enregistrer (ftrace, procstats, heapprofd, …)
ftrace_eventsTracepoints kernel spécifiques
duration_msLongueur de capture
-oFichier de sortie trace

Sources de données courantes

SourceEnregistre
linux.ftraceScheduling, syscalls, IRQs, tracepoints personnalisés
linux.process_statsCPU/mémoire par-process dans le temps
linux.sys_statsCompteurs system-wide (meminfo, vmstat)
android.heapprofdProfiling de heap native
android.java_hprofDumps de heap Java
track_eventSpans/compteurs émis par l’application

Le flux de travail UI

ÉtapeAction
1Ouvrir ui.perfetto.dev et glisser la trace
2Timeline montre les CPUs, threads, et tracks
3W/S zoom, A/D pan
4Cliquer une slice pour voir sa durée et args
5Sélectionner une plage → résumé de ce qui a tourné
6Utiliser la boîte query pour l’analyse SQL

Analyse SQL (le super-pouvoir)

Perfetto’s trace processor expose la trace comme des tables interrogeables.

-- Slices les plus longues
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;

-- Temps CPU par processus
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;

-- Pourquoi un thread était-il bloqué ?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
TableContient
sliceÉvénements de durée nommés, imbriqués
schedSlices de scheduling par CPU
thread_stateIntervalles Running/sleeping/blocked
counterSéries temporelles numériques (freq, mémoire)
process, threadMétadonnées de processus/thread

Analyse locale

# Shell SQL interactif sur une trace
./trace_processor trace.pftrace

# Exécuter une requête et émettre JSON pour scripting
./trace_processor -q query.sql --query-output json trace.pftrace

Ce que Perfetto fait mieux

ProblèmePourquoi Perfetto aide
Latency spikesVoir exactement ce qui a tourné/bloqué à ce moment
Lock contentionthread_state montre les intervalles bloqués et les raisons
CPU migration/schedulingTimeline par-CPU de chaque thread
Effets fréquence/thermalCorréler les compteurs cpufreq aux ralentissements
App + corrélation kernelSpans d’application sur la même timeline que les événements kernel

Perfetto vs outils apparentés

AspectPerfettoperfbpftrace
ModèleTrace full timelineProfiler samplingProbes eBPF ad-hoc
AnalyseUI + SQLRapports/flame graphsScripts personnalisés
Idéal pourLatence/concurrence/timelineCPU hot pathsQuestions kernel ciblées
OverheadModéré (configurable)BasBas

Complète perf (CPU hot spots) et bpftrace (probes ciblées) ; Perfetto répond à “que s’est-il passé quand.”

Ressources