Salta ai contenuti

magic-trace - Cheatsheet del Tracing ad Alta Risoluzione di Intel PT

magic-trace - Cheatsheet del Tracing ad Alta Risoluzione di Intel PT

magic-trace (di Jane Street) cattura e visualizza tracce di esecuzione ad alta risoluzione usando Intel Processor Trace (Intel PT). Dove un profiler di sampling ti dice dove va il tempo in media, magic-trace registra il flusso di controllo effettivo — ogni voce e uscita di funzione — per l”ultimo millisecondo, a risoluzione nanosecondo. Questo la rende unica per gli eventi latenti e sensibili alla latenza: la richiesta uno su diecimila che ha impiegato 40ms, dove un profilo mediano non ti mostra nulla.

Requirements

  • CPU Intel con supporto Processor Trace (la maggior parte di Intel moderno)
  • Linux con perf e PT abilitato
  • Root o impostazione perf_event_paranoid appropriata
  • Binari con frame pointer / simboli per output leggibile

Installation

MethodCommand
Binarydownload magic-trace da GitHub Releases
opam (OCaml)opam install magic_trace
Permissionssysctl kernel.perf_event_paranoid=-1 (o 1)
Verifymagic-trace --help

Two Capture Modes

ModeCommandUse
Attach to runningmagic-trace attach -pid <pid>Servizio live
Run a commandmagic-trace run ./my-programEsecuzione riproducibile
# Attach, capture on Ctrl-C, write a trace
sudo magic-trace attach -pid $(pgrep -n myservice)

Snapshot Triggers

L”idea principale: tieni un buffer di scorrimento e snapshot quando succede qualcosa di interessante.

TriggerHow
ManualPremi Ctrl-C mentre collegato
Magic breakpointL”app chiama un simbolo designato per attivare uno snapshot
TimerCattura dopo una durata fissa
Symbol trigger-trigger <symbol> per snapshot su una chiamata di funzione
# Snapshot whenever a specific function is hit
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

Poiché il buffer contiene il precedente millisecondo di pochi, vedi ciò che ha portato all”evento, non solo l”evento stesso.

Viewing Traces

magic-trace emette una traccia visualizzabile nell”UI di Perfetto.

StepAction
1Capture produce trace.fxt (o simile)
2Apri ui.perfetto.dev
3Carica il file di traccia
4Zoom nell”intervallo microsecondo di interesse
5Leggi la sequenza di chiamata esatta e le durate
Perfetto controlDoes
W/SZoom in/out
A/DPan
Click a sliceDettagli di durata e funzione
Select a rangeRiepilogo di ciò che è stato eseguito

What You Can See

Questionmagic-trace answer
Quale funzione ha causato questo picco di 40ms?Chiamata esatta, durata esatta
Abbiamo preso un ramo inaspettato?Flusso di controllo completo, visibile
Dove è andato il tempo all”interno di una richiesta?Breakdown a livello nanosecondo
È stata una syscall, un blocco o calcolo?La sequenza di chiamata lo mostra

Options Worth Knowing

FlagPurpose
-multi-threadTraccia tutti i thread
-durationLunghezza della finestra di cattura
-trigger SYMBOLSnapshot su un simbolo
-full-executionTraccia un”intera esecuzione breve
-output FILEPercorso di output della traccia

Limitations

LimitationNote
Intel onlyRichiede Intel PT (niente AMD/ARM)
Short windowMilliseconda, non minuti
Symbol qualityI binari spogliati producono tracce scarse
OverheadBasso ma non zero durante il tracing
Aspectmagic-traceperfPerfetto
DataFlusso di controllo completo (Intel PT)Stack campionatiTimeline di sistema
ResolutionNanosecondiIntervallo di campioneLivello di evento
WindowUltimi millisecondiIntera esecuzioneConfigurabile
Best forPicchi di latenza rariPercorsi hot mediCorrelazione di sistema

Usa perf per i percorsi hot medi, Perfetto per le timeline di sistema e magic-trace quando hai bisogno della storia esatta di un evento lento raro.

Resources