Perfetto - Foglio di aiuto per traccia e analisi a livello di sistema
Perfetto è lo stack open-source di traccia e profiling di qualità produzione di Google per Linux, Android e Chrome. Cattura tracce a livello di sistema — pianificazione CPU, syscall, cambi di frequenza, event di memoria e event di applicazione personalizzati — in un formato protobuf compatto, quindi ti consente di esplorarli in un”interfaccia web sofisticata o, in modo unico, interrogarli con SQL. Dove perf campiona stack, Perfetto registra una timeline di ciò che stava facendo ogni thread e CPU, che è ciò di cui hai bisogno per i problemi di latenza e concorrenza.
Installazione
| Componente | Come |
|---|
| UI (nessuna installazione) | Apri ui.perfetto.dev in un browser |
| Strumenti CLI | Scarica tracebox/perfetto da GitHub Releases |
| Android | Built-in (adb shell perfetto ...) |
| trace_processor | Scarica per l”analisi SQL locale |
| Verifica | ./tracebox --help |
Cattura di una traccia (Linux)
# Traccia semplice a livello di sistema di 10 secondi con dati di pianificazione 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
| Elemento | Scopo |
|---|
buffers | Dimensione del buffer ad anello per i dati di traccia |
data_sources | Cosa registrare (ftrace, procstats, heapprofd, …) |
ftrace_events | Tracepoint del kernel specifici |
duration_ms | Lunghezza della cattura |
-o | File di traccia di output |
Fonti di dati comuni
| Fonte | Registra |
|---|
linux.ftrace | Pianificazione, syscall, IRQ, tracepoint personalizzati |
linux.process_stats | CPU/memoria per processo nel tempo |
linux.sys_stats | Contatori a livello di sistema (meminfo, vmstat) |
android.heapprofd | Profiling heap nativo |
android.java_hprof | Dump heap Java |
track_event | Span/contatori emessi dall”applicazione |
Il flusso di lavoro dell”interfaccia utente
| Step | Azione |
|---|
| 1 | Apri ui.perfetto.dev e trascina la traccia |
| 2 | Timeline mostra CPU, thread e tracce |
| 3 | W/S zoom, A/D pan |
| 4 | Fai clic su uno slice per vedere la sua durata e arg |
| 5 | Seleziona un intervallo → riepilogo di ciò che è stato eseguito |
| 6 | Usa la casella di query per l”analisi SQL |
Analisi SQL (il superpotere)
Il processore di traccia di Perfetto espone la traccia come tabelle interrogabili.
-- Slice con il tempo di esecuzione più lungo
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;
-- Tempo CPU per processo
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;
-- Perché un thread è stato bloccato?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
| Tavolo | Contiene |
|---|
slice | Event di durata denominati e annidati |
sched | Sched slice per CPU |
thread_state | Intervalli Running/sleeping/blocked |
counter | Serie temporali numeriche (freq, memoria) |
process, thread | Metadati processo/thread |
Analisi locale
# Shell SQL interattiva su una traccia
./trace_processor trace.pftrace
# Esegui una query e emetti JSON per lo scripting
./trace_processor -q query.sql --query-output json trace.pftrace
Di cosa è migliore Perfetto
| Problema | Perché Perfetto aiuta |
|---|
| Picchi di latenza | Vedi esattamente cosa è stato eseguito/bloccato in quel momento |
| Contention del lock | thread_state mostra intervalli bloccati e motivi |
| Migrazione CPU/pianificazione | Timeline per CPU di ogni thread |
| Effetti di frequenza/termico | Correla i contatori cpufreq con i rallentamenti |
| Correlazione app + kernel | Span di applicazione sulla stessa timeline degli event del kernel |
Perfetto vs Strumenti correlati
| Aspetto | Perfetto | perf | bpftrace |
|---|
| Modello | Traccia timeline completa | Profiler di campionamento | Probe eBPF ad-hoc |
| Analisi | UI + SQL | Report/flame graph | Script personalizzati |
| Migliore per | Latenza/concorrenza/timeline | Hot spot CPU | Domande mirate al kernel |
| Overhead | Moderato (configurabile) | Basso | Basso |
Complementa perf (hot spot CPU) e bpftrace (probe mirate); Perfetto risponde a “cosa è successo quando”.
Risorse