Salta ai contenuti

Perfetto - Foglio di aiuto per traccia e analisi a livello di sistema

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

ComponenteCome
UI (nessuna installazione)Apri ui.perfetto.dev in un browser
Strumenti CLIScarica tracebox/perfetto da GitHub Releases
AndroidBuilt-in (adb shell perfetto ...)
trace_processorScarica 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
ElementoScopo
buffersDimensione del buffer ad anello per i dati di traccia
data_sourcesCosa registrare (ftrace, procstats, heapprofd, …)
ftrace_eventsTracepoint del kernel specifici
duration_msLunghezza della cattura
-oFile di traccia di output

Fonti di dati comuni

FonteRegistra
linux.ftracePianificazione, syscall, IRQ, tracepoint personalizzati
linux.process_statsCPU/memoria per processo nel tempo
linux.sys_statsContatori a livello di sistema (meminfo, vmstat)
android.heapprofdProfiling heap nativo
android.java_hprofDump heap Java
track_eventSpan/contatori emessi dall”applicazione

Il flusso di lavoro dell”interfaccia utente

StepAzione
1Apri ui.perfetto.dev e trascina la traccia
2Timeline mostra CPU, thread e tracce
3W/S zoom, A/D pan
4Fai clic su uno slice per vedere la sua durata e arg
5Seleziona un intervallo → riepilogo di ciò che è stato eseguito
6Usa 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;
TavoloContiene
sliceEvent di durata denominati e annidati
schedSched slice per CPU
thread_stateIntervalli Running/sleeping/blocked
counterSerie temporali numeriche (freq, memoria)
process, threadMetadati 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

ProblemaPerché Perfetto aiuta
Picchi di latenzaVedi esattamente cosa è stato eseguito/bloccato in quel momento
Contention del lockthread_state mostra intervalli bloccati e motivi
Migrazione CPU/pianificazioneTimeline per CPU di ogni thread
Effetti di frequenza/termicoCorrela i contatori cpufreq con i rallentamenti
Correlazione app + kernelSpan di applicazione sulla stessa timeline degli event del kernel

Perfetto vs Strumenti correlati

AspettoPerfettoperfbpftrace
ModelloTraccia timeline completaProfiler di campionamentoProbe eBPF ad-hoc
AnalisiUI + SQLReport/flame graphScript personalizzati
Migliore perLatenza/concorrenza/timelineHot spot CPUDomande mirate al kernel
OverheadModerato (configurabile)BassoBasso

Complementa perf (hot spot CPU) e bpftrace (probe mirate); Perfetto risponde a “cosa è successo quando”.

Risorse