Pular para o conteúdo

Perfetto - Rastreamento e Análise em Toda a Sistem - Guia de Referência

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

ComponenteComo
UI (sem instalação)Abrir ui.perfetto.dev em um navegador
Ferramentas CLIBaixar tracebox/perfetto de GitHub Releases
AndroidConstruído (adb shell perfetto ...)
trace_processorBaixar 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
ElementoPropósito
buffersTamanho de ring buffer para dados de trace
data_sourcesO que registrar (ftrace, procstats, heapprofd, …)
ftrace_eventsTracepoints de kernel específicos
duration_msComprimento de captura
-oArquivo de saída trace

Fontes de Dados Comuns

OrigemRegistra
linux.ftraceAgendamento, syscalls, IRQs, tracepoints customizados
linux.process_statsCPU/memória por processo ao longo do tempo
linux.sys_statsContadores em toda a sistema (meminfo, vmstat)
android.heapprofdProfiling de heap nativa
android.java_hprofDumps de heap Java
track_eventSpans/contadores emitidos pela aplicação

O Fluxo de Trabalho da UI

PassoAção
1Abrir ui.perfetto.dev e arrastar o trace
2Timeline mostra CPUs, threads e tracks
3W/S zoom, A/D pan
4Clicar um slice para ver sua duração e args
5Selecionar um intervalo → resumo do que executou
6Usar 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;
TabelaContém
sliceEventos de duração nomeados, aninhados
schedSlices de agendamento por CPU
thread_stateIntervalos de Executando/dormindo/bloqueado
counterSérie temporal numérica (freq, memória)
process, threadMetadados 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

ProblemaPor que Perfetto ajuda
Picos de latênciaVer exatamente o que executou/bloqueou naquele momento
Contenção de lockthread_state mostra intervalos bloqueados e razões
Migração/agendamento de CPUTimeline por CPU de cada thread
Efeitos de frequência/térmicaCorrelacionar contadores cpufreq com slowdowns
Correlação aplicação + kernelSpans de aplicação na mesma timeline que eventos de kernel

Perfetto vs Ferramentas Relacionadas

AspectoPerfettoperfbpftrace
ModeloTrace de timeline completoProfiler por samplingSondas eBPF ad-hoc
AnáliseUI + SQLRelatórios/flame graphsScripts customizados
Melhor paraLatência/concorrência/timelineCPU hot spotsPerguntas de kernel direcionadas
OverheadModerado (configurável)BaixoBaixo

Complementa perf (hot spots de CPU) e bpftrace (sondas direcionadas); Perfetto responde “o que aconteceu quando.”

Recursos