Ir al contenido

Perfetto - Rastreo y análisis a nivel de sistema

Perfetto - Rastreo y análisis a nivel de sistema

Perfetto es la pila de rastreo y generación de perfiles de código abierto de calidad de producción de Google para Linux, Android y Chrome. Captura trazas a nivel de sistema — programación de CPU, llamadas de sistema, cambios de frecuencia, eventos de memoria y eventos personalizados de aplicación — en un formato protobuf compacto, luego te permite explorarlos en una UI sofisticada o, únicamente, consultarlos con SQL. Donde perf muestrea pilas, Perfetto registra una línea de tiempo de lo que cada hilo y CPU estaban haciendo, que es lo que necesitas para problemas de latencia y concurrencia.

Instalación

ComponenteCómo
UI (sin instalar)Abre ui.perfetto.dev en un navegador
Herramientas CLIDescarga tracebox/perfetto desde GitHub Releases
AndroidIntegrado (adb shell perfetto ...)
trace_processorDescarga para análisis SQL local
Verificar./tracebox --help

Captura de una traza (Linux)

# Traza simple de 10 segundos a nivel de sistema con datos de programación de 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
ElementoPropósito
buffersTamaño del búfer circular para datos de traza
data_sourcesQué registrar (ftrace, procstats, heapprofd, …)
ftrace_eventsPuntos de seguimiento de kernel específicos
duration_msDuración de captura
-oArchivo de traza de salida

Fuentes de datos comunes

FuenteRegistra
linux.ftraceProgramación, llamadas de sistema, IRQs, puntos de seguimiento personalizados
linux.process_statsCPU/memoria por proceso en el tiempo
linux.sys_statsContadores a nivel de sistema (meminfo, vmstat)
android.heapprofdGeneración de perfiles de heap nativo
android.java_hprofVolcados de heap de Java
track_eventTramos/contadores emitidos por aplicación

Flujo de trabajo de UI

PasoAcción
1Abre ui.perfetto.dev y arrastra la traza
2La línea de tiempo muestra CPUs, hilos y pistas
3W/S zoom, A/D panorámica
4Haz clic en un slice para ver su duración y args
5Selecciona un rango → resumen de lo que corrió
6Usa el cuadro de consulta para análisis SQL

Análisis SQL (el superpoder)

El procesador de traza de Perfetto expone la traza como tablas consultables.

-- Slices que se ejecutan más tiempo
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;

-- Tiempo de CPU por proceso
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;

-- ¿Por qué se bloqueó un hilo?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
TablaContiene
sliceEventos de duración nombrados y anidados
schedSlices de programación por CPU
thread_stateIntervalos de ejecutar/dormir/bloqueado
counterSeries de tiempo numéricas (freq, memoria)
process, threadMetadatos de proceso/hilo

Análisis local

# Shell SQL interactivo sobre una traza
./trace_processor trace.pftrace

# Ejecuta una consulta y emite JSON para scripts
./trace_processor -q query.sql --query-output json trace.pftrace

En qué destaca Perfetto

ProblemaPor qué Perfetto ayuda
Picos de latenciaVe exactamente qué corrió/se bloqueó en ese momento
Contención de bloqueothread_state muestra intervalos bloqueados y razones
Migración de CPU/programaciónLínea de tiempo por CPU de cada hilo
Efectos de frecuencia/térmicosCorrelaciona contadores de cpufreq con desaceleraciones
Correlación de aplicación + kernelTramos de aplicación en la misma línea de tiempo que eventos de kernel

Perfetto vs herramientas relacionadas

AspectoPerfettoperfbpftrace
ModeloTraza de línea de tiempo completaGenerador de perfiles de muestreoSondeos de eBPF ad-hoc
AnálisisUI + SQLReportes/gráficos de llamaScripts personalizados
Mejor paraLatencia/concurrencia/línea de tiempoRutas calientes de CPUPreguntas de kernel dirigidas
SobrecargaModerada (configurable)BajaBaja

Complementa perf (puntos calientes de CPU) y bpftrace (sondeos dirigidos); Perfetto responde “qué pasó cuándo.”

Recursos