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
| Composant | Comment |
|---|
| UI (pas d’installation) | Ouvrir ui.perfetto.dev dans un navigateur |
| CLI tools | Télécharger tracebox/perfetto depuis GitHub Releases |
| Android | Built in (adb shell perfetto ...) |
| trace_processor | Té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ément | Objectif |
|---|
buffers | Taille du ring buffer pour les données de trace |
data_sources | Quoi enregistrer (ftrace, procstats, heapprofd, …) |
ftrace_events | Tracepoints kernel spécifiques |
duration_ms | Longueur de capture |
-o | Fichier de sortie trace |
Sources de données courantes
| Source | Enregistre |
|---|
linux.ftrace | Scheduling, syscalls, IRQs, tracepoints personnalisés |
linux.process_stats | CPU/mémoire par-process dans le temps |
linux.sys_stats | Compteurs system-wide (meminfo, vmstat) |
android.heapprofd | Profiling de heap native |
android.java_hprof | Dumps de heap Java |
track_event | Spans/compteurs émis par l’application |
Le flux de travail UI
| Étape | Action |
|---|
| 1 | Ouvrir ui.perfetto.dev et glisser la trace |
| 2 | Timeline montre les CPUs, threads, et tracks |
| 3 | W/S zoom, A/D pan |
| 4 | Cliquer une slice pour voir sa durée et args |
| 5 | Sélectionner une plage → résumé de ce qui a tourné |
| 6 | Utiliser 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;
| Table | Contient |
|---|
slice | Événements de durée nommés, imbriqués |
sched | Slices de scheduling par CPU |
thread_state | Intervalles Running/sleeping/blocked |
counter | Séries temporelles numériques (freq, mémoire) |
process, thread | Mé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ème | Pourquoi Perfetto aide |
|---|
| Latency spikes | Voir exactement ce qui a tourné/bloqué à ce moment |
| Lock contention | thread_state montre les intervalles bloqués et les raisons |
| CPU migration/scheduling | Timeline par-CPU de chaque thread |
| Effets fréquence/thermal | Corréler les compteurs cpufreq aux ralentissements |
| App + corrélation kernel | Spans d’application sur la même timeline que les événements kernel |
Perfetto vs outils apparentés
| Aspect | Perfetto | perf | bpftrace |
|---|
| Modèle | Trace full timeline | Profiler sampling | Probes eBPF ad-hoc |
| Analyse | UI + SQL | Rapports/flame graphs | Scripts personnalisés |
| Idéal pour | Latence/concurrence/timeline | CPU hot paths | Questions kernel ciblées |
| Overhead | Modéré (configurable) | Bas | Bas |
Complète perf (CPU hot spots) et bpftrace (probes ciblées) ; Perfetto répond à “que s’est-il passé quand.”
Ressources