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
| Componente | Cómo |
|---|
| UI (sin instalar) | Abre ui.perfetto.dev en un navegador |
| Herramientas CLI | Descarga tracebox/perfetto desde GitHub Releases |
| Android | Integrado (adb shell perfetto ...) |
| trace_processor | Descarga 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
| Elemento | Propósito |
|---|
buffers | Tamaño del búfer circular para datos de traza |
data_sources | Qué registrar (ftrace, procstats, heapprofd, …) |
ftrace_events | Puntos de seguimiento de kernel específicos |
duration_ms | Duración de captura |
-o | Archivo de traza de salida |
Fuentes de datos comunes
| Fuente | Registra |
|---|
linux.ftrace | Programación, llamadas de sistema, IRQs, puntos de seguimiento personalizados |
linux.process_stats | CPU/memoria por proceso en el tiempo |
linux.sys_stats | Contadores a nivel de sistema (meminfo, vmstat) |
android.heapprofd | Generación de perfiles de heap nativo |
android.java_hprof | Volcados de heap de Java |
track_event | Tramos/contadores emitidos por aplicación |
Flujo de trabajo de UI
| Paso | Acción |
|---|
| 1 | Abre ui.perfetto.dev y arrastra la traza |
| 2 | La línea de tiempo muestra CPUs, hilos y pistas |
| 3 | W/S zoom, A/D panorámica |
| 4 | Haz clic en un slice para ver su duración y args |
| 5 | Selecciona un rango → resumen de lo que corrió |
| 6 | Usa 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;
| Tabla | Contiene |
|---|
slice | Eventos de duración nombrados y anidados |
sched | Slices de programación por CPU |
thread_state | Intervalos de ejecutar/dormir/bloqueado |
counter | Series de tiempo numéricas (freq, memoria) |
process, thread | Metadatos 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
| Problema | Por qué Perfetto ayuda |
|---|
| Picos de latencia | Ve exactamente qué corrió/se bloqueó en ese momento |
| Contención de bloqueo | thread_state muestra intervalos bloqueados y razones |
| Migración de CPU/programación | Línea de tiempo por CPU de cada hilo |
| Efectos de frecuencia/térmicos | Correlaciona contadores de cpufreq con desaceleraciones |
| Correlación de aplicación + kernel | Tramos de aplicación en la misma línea de tiempo que eventos de kernel |
Perfetto vs herramientas relacionadas
| Aspecto | Perfetto | perf | bpftrace |
|---|
| Modelo | Traza de línea de tiempo completa | Generador de perfiles de muestreo | Sondeos de eBPF ad-hoc |
| Análisis | UI + SQL | Reportes/gráficos de llama | Scripts personalizados |
| Mejor para | Latencia/concurrencia/línea de tiempo | Rutas calientes de CPU | Preguntas de kernel dirigidas |
| Sobrecarga | Moderada (configurable) | Baja | Baja |
Complementa perf (puntos calientes de CPU) y bpftrace (sondeos dirigidos); Perfetto responde “qué pasó cuándo.”
Recursos