Pular para o conteúdo

magic-trace - Intel PT Tracing de Alta Resolução

magic-trace - Intel PT Tracing de Alta Resolução

magic-trace (por Jane Street) captura e exibe traços de execução de alta resolução usando Intel Processor Trace (Intel PT). Onde um profiler de amostragem diz aonde o tempo vai em média, magic-trace registra o fluxo de controle real — cada entrada e saída de função — pelos últimos poucos milissegundos, em resolução de nanosegundo. Isso o torna únicamente adequado para eventos raros e sensíveis a latência: aquele requisição em dez mil que levou 40ms, onde um perfil médio não mostra nada.

Requisitos

  • Intel CPU com suporte a Processor Trace (maioria dos Intel modernos)
  • Linux com perf e PT habilitado
  • Root ou configuração apropriada de perf_event_paranoid
  • Binários com frame pointers / símbolos para saída legível

Instalação

MétodoComando
Binarybaixe magic-trace do GitHub Releases
opam (OCaml)opam install magic_trace
Permissõessysctl kernel.perf_event_paranoid=-1 (ou 1)
Verificarmagic-trace --help

Dois Modos de Captura

ModoComandoUso
Anexar a rodandomagic-trace attach -pid <pid>Serviço ao vivo
Executar um comandomagic-trace run ./my-programRun reproduzível
# Anexar, capturar em Ctrl-C, escrever um traço
sudo magic-trace attach -pid $(pgrep -n myservice)

Snapshot Triggers

A ideia central: manter um buffer rolando e fazer snapshot quando algo interessante acontece.

TriggerComo
ManualPressione Ctrl-C enquanto anexado
Magic breakpointApp chama um símbolo designado para desencadear um snapshot
TimerCapturar após uma duração fixa
Symbol trigger-trigger <symbol> para snapshot em uma chamada de função
# Fazer snapshot sempre que uma função específica é atingida
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

Porque o buffer mantém os anteriores poucos milissegundos, você vê o que levou ao evento, não apenas o evento em si.

Visualizando Traços

magic-trace emite um traço visualizável na UI Perfetto.

PassoAção
1Captura produz trace.fxt (ou similar)
2Abrir ui.perfetto.dev
3Carregar o arquivo de traço
4Zoom no intervalo microsecond de interesse
5Ler a sequência exata de chamada e durações
Controle PerfettoFaz
W/SZoom in/out
A/DPan
Click em um sliceDetalhe de duração e função
Selecionar um intervaloSumário do que rodou

O que Você Pode Ver

PerguntaResposta de magic-trace
Qual função causou esse spike de 40ms?Chamada exata, duração exata
Tomamos um branch inesperado?Fluxo de controle completo, visível
Para onde o tempo foi dentro de um requisição?Breakdown de nanosegundo
Era uma syscall, um lock, ou compute?A sequência de chamada mostra

Opções Vale Conhecer

FlagPropósito
-multi-threadRastrear todas as threads
-durationDuração da janela de captura
-trigger SYMBOLFazer snapshot em um símbolo
-full-executionRastrear uma run curta inteira
-output FILECaminho de saída de traço

Limitações

LimitaçãoNota
Apenas IntelRequer Intel PT (sem AMD/ARM)
Janela curtaMilissegundos, não minutos
Qualidade de símboloBinários stripped rendem traços pobres
OverheadBaixo mas não zero enquanto rastreando

magic-trace vs Ferramentas Relacionadas

Aspectomagic-traceperfPerfetto
DadosFluxo de controle completo (Intel PT)Stacks amostradosTimeline system-wide
ResoluçãoNanosegundosIntervalo de amostraEvent-level
JanelaÚltimos poucos msToda a runConfigurável
Melhor paraSpikes de latência rarosHot paths médiosTimelines system-wide

Use perf para hot paths médios, Perfetto para timelines system-wide, e magic-trace quando você precisa da história exata de um evento lento raro.

Recursos