Ir al contenido

magic-trace - Rastreo de Alta Resolución de Intel PT Hoja de Trucos

magic-trace - Rastreo de Alta Resolución de Intel PT Hoja de Trucos

magic-trace (de Jane Street) captura y muestra trazas de ejecución de alta resolución usando Intel Processor Trace (Intel PT). Donde un perfilador de muestreo te dice dónde va el tiempo en promedio, magic-trace graba el flujo de control actual — cada entrada y salida de función — durante los últimos pocos milisegundos, con resolución de nanosegundos. Eso lo hace únicamente adecuado para eventos raros y sensibles a la latencia: la una solicitud en diez mil que tomó 40ms, donde un perfil promediado no te muestra nada.

Requerimientos

  • CPU Intel con soporte de Processor Trace (la mayoría de Intel moderno)
  • Linux con perf y PT habilitado
  • Root o configuración perf_event_paranoid apropiada
  • Binarios con frame pointers / símbolos para salida legible

Instalación

MétodoComando
Binarydescargar magic-trace desde GitHub Releases
opam (OCaml)opam install magic_trace
Permisossysctl kernel.perf_event_paranoid=-1 (o 1)
Verificarmagic-trace --help

Dos Modos de Captura

ModoComandoUso
Adjuntar a ejecutándosemagic-trace attach -pid <pid>Servicio vivo
Ejecutar un comandomagic-trace run ./my-programEjecución reproducible
# Adjuntar, capturar en Ctrl-C, escribir un rastreo
sudo magic-trace attach -pid $(pgrep -n myservice)

Triggers de Snapshot

La idea principal: mantener un búfer rodante y snapshot cuando algo interesante sucede.

TriggerCómo
ManualPresionar Ctrl-C mientras está adjunto
Magic breakpointLa app llamar un símbolo designado para activar un snapshot
TimerCapturar después de duración fija
Trigger de símbolo-trigger <symbol> para snapshot en llamada de función
# Snapshot cada vez que una función específica es golpeada
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

Porque el búfer sostiene los precedentes pocos milisegundos, ves qué condujo al evento, no solo el evento en sí.

Visualizar Trazas

magic-trace emite un rastreo visualizable en la UI de Perfetto.

PasoAcción
1Captura produce trace.fxt (o similar)
2Abrir ui.perfetto.dev
3Cargar el archivo de rastreo
4Zoom en el rango de microsegundos de interés
5Leer la secuencia de llamada exacta y duraciones
Control de PerfettoHace
W/SZoom dentro/fuera
A/DPan
Click en un sliceDetalle de duración y función
Seleccionar un rangoResumen de lo que ejecutó

Lo Que Puedes Ver

PreguntaRespuesta de magic-trace
¿Qué función causó este spike de 40ms?Llamada exacta, duración exacta
¿Tomamos una rama inesperada?Flujo de control completo, visible
¿A dónde fue el tiempo dentro de una solicitud?Desglose a nivel de nanosegundo
¿Era un syscall, un bloqueo o cálculo?La secuencia de llamada lo muestra

Opciones Que Vale la Pena Conocer

FlagPropósito
-multi-threadRastrear todos los threads
-durationLongitud de ventana de captura
-trigger SYMBOLSnapshot en un símbolo
-full-executionRastrear una ejecución corta completa
-output FILERuta de salida de rastreo

Limitaciones

LimitaciónNota
Solo IntelRequiere Intel PT (sin AMD/ARM)
Ventana cortaMilisegundos, no minutos
Calidad de símboloBinarios despojados dan trazas pobres
OverheadBajo pero no cero mientras rastrea

magic-trace vs Herramientas Relacionadas

Aspectomagic-traceperfPerfetto
DatosFlujo de control completo (Intel PT)Stacks muestreadosTimeline de sistema
ResoluciónNanosegundosIntervalo de muestraNivel de evento
VentanaÚltimos pocos msEjecución completaConfigurable
Mejor paraSpikes raros de latenciaCaminos calientes promedioTimelines de sistema

Usa perf para caminos calientes promedio, Perfetto para timelines de sistema completo, y magic-trace cuando necesitas la historia exacta de un evento lento raro.

Recursos