Perfetto - Rastreamento e Análise em Toda a Sistema - Guia de Referência
Perfetto é a stack de rastreamento e profiling de código aberto e nível de produção do Google para Linux, Android e Chrome. Ele captura traces em toda a sistema — agendamento de CPU, syscalls, mudanças de frequência, eventos de memória e eventos de aplicação personalizados — em um formato protobuf compacto, então deixa você explorá-los em uma UI sofisticada ou, exclusivamente, consultá-los com SQL. Onde perf sameia pilhas, Perfetto registra uma timeline do que cada thread e CPU estava fazendo, que é o que você precisa para problemas de latência e concorrência.
Instalação
| Componente | Como |
|---|
| UI (sem instalação) | Abrir ui.perfetto.dev em um navegador |
| Ferramentas CLI | Baixar tracebox/perfetto de GitHub Releases |
| Android | Construído (adb shell perfetto ...) |
| trace_processor | Baixar para análise local com SQL |
| Verificar | ./tracebox --help |
Capturando um Trace (Linux)
# Trace simples de 10 segundos em toda a sistema com dados de agendamento 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 | Tamanho de ring buffer para dados de trace |
data_sources | O que registrar (ftrace, procstats, heapprofd, …) |
ftrace_events | Tracepoints de kernel específicos |
duration_ms | Comprimento de captura |
-o | Arquivo de saída trace |
Fontes de Dados Comuns
| Origem | Registra |
|---|
linux.ftrace | Agendamento, syscalls, IRQs, tracepoints customizados |
linux.process_stats | CPU/memória por processo ao longo do tempo |
linux.sys_stats | Contadores em toda a sistema (meminfo, vmstat) |
android.heapprofd | Profiling de heap nativa |
android.java_hprof | Dumps de heap Java |
track_event | Spans/contadores emitidos pela aplicação |
O Fluxo de Trabalho da UI
| Passo | Ação |
|---|
| 1 | Abrir ui.perfetto.dev e arrastar o trace |
| 2 | Timeline mostra CPUs, threads e tracks |
| 3 | W/S zoom, A/D pan |
| 4 | Clicar um slice para ver sua duração e args |
| 5 | Selecionar um intervalo → resumo do que executou |
| 6 | Usar o box de consulta para análise SQL |
Análise SQL (o superpoder)
O trace processor do Perfetto expõe o trace como tabelas consultáveis.
-- Slices com execução mais longa
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;
-- Tempo de CPU por 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;
-- Por que uma thread foi bloqueada?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
| Tabela | Contém |
|---|
slice | Eventos de duração nomeados, aninhados |
sched | Slices de agendamento por CPU |
thread_state | Intervalos de Executando/dormindo/bloqueado |
counter | Série temporal numérica (freq, memória) |
process, thread | Metadados de processo/thread |
Análise Local
# Shell SQL interativo sobre um trace
./trace_processor trace.pftrace
# Executar uma consulta e emitir JSON para scripting
./trace_processor -q query.sql --query-output json trace.pftrace
O que Perfetto é Melhor Fazendo
| Problema | Por que Perfetto ajuda |
|---|
| Picos de latência | Ver exatamente o que executou/bloqueou naquele momento |
| Contenção de lock | thread_state mostra intervalos bloqueados e razões |
| Migração/agendamento de CPU | Timeline por CPU de cada thread |
| Efeitos de frequência/térmica | Correlacionar contadores cpufreq com slowdowns |
| Correlação aplicação + kernel | Spans de aplicação na mesma timeline que eventos de kernel |
Perfetto vs Ferramentas Relacionadas
| Aspecto | Perfetto | perf | bpftrace |
|---|
| Modelo | Trace de timeline completo | Profiler por sampling | Sondas eBPF ad-hoc |
| Análise | UI + SQL | Relatórios/flame graphs | Scripts customizados |
| Melhor para | Latência/concorrência/timeline | CPU hot spots | Perguntas de kernel direcionadas |
| Overhead | Moderado (configurável) | Baixo | Baixo |
Complementa perf (hot spots de CPU) e bpftrace (sondas direcionadas); Perfetto responde “o que aconteceu quando.”
Recursos