Zum Inhalt springen

magic-trace - Intel PT High-Resolution Tracing Cheatsheet

magic-trace - Intel PT High-Resolution Tracing Cheatsheet

magic-trace (by Jane Street) erfasst und zeigt High-Resolution Execution Traces, die Intel Processor Trace (Intel PT) verwenden. Während ein Sampling Profiler dir sagt, wo die Zeit im Durchschnitt geht, zeichnet magic-trace den Tatsächlichen Kontrollflusss auf — jeder Funktionseintritt und -ausstieg — für die Letzte-Millisekunden mit Nanosekunden-Auflösung. Das macht es einzigartig geeignet für Seltene, Latency-Sensible Events: die eine Request in Zehntausend, die 40ms dauerte, wo ein Durchschnitt Profil dir nichts zeigt.

Anforderungen

  • Intel CPU mit Processor Trace Support (meiste moderne Intel)
  • Linux mit Perf und PT aktiviert
  • Root oder angemessene perf_event_paranoid Setting
  • Binaries mit Frame Pointers / Symbols für lesbare Ausgabe

Installation

MethodeBefehl
BinaryDownload magic-trace von GitHub Releases
Opam (OCaml)opam install magic_trace
Permissionssysctl kernel.perf_event_paranoid=-1 (oder 1)
Verifikationmagic-trace --help

Zwei Capture-Modi

ModeBefehlNutze
Attach zu Runningmagic-trace attach -pid <pid>Live Service
Run ein Befehlmagic-trace run ./my-programReproducible Run
# Attach, Capture bei Ctrl-C, Write ein Trace
sudo magic-trace attach -pid $(pgrep -n myservice)

Snapshot Triggers

Die Core Idee: halte einen Rolling Buffer und Snapshot wenn etwas Interessantes passiert.

TriggerWie
ManualPress Ctrl-C während Attached
Magic BreakpointApp ruft ein Designiertes Symbol auf um ein Snapshot zu triggern
TimerCapture nach einer Fixed Duration
Symbol Trigger-trigger <symbol> zu Snapshot auf einem Function Call
# Snapshot wenn ein Spezifisches Function gehittet ist
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

Weil der Buffer die Vorangegangene Millisekunden hält, siehst du, was zum Event führte, nicht nur das Event selbst.

Viewing Traces

Magic-Trace emittiert ein Trace, das in der Perfetto UI sichtbar ist.

SchrittAction
1Capture produziert trace.fxt (oder ähnlich)
2Öffne ui.perfetto.dev
3Load die Trace-Datei
4Zoom in die Microsecond Range des Interesses
5Lies die Exakte Call Sequence und Durations
Perfetto ControlTut
W/SZoom In/Out
A/DPan
Click ein SliceDuration und Function Detail
Select eine RangeSummary von was liefen war

Was du sehen kannst

Fragemagic-trace Antwort
Welche Function führte zu diesem 40ms Spike?Exact Call, Exact Duration
Haben wir eine Unerwartete Branch genommen?Full Control Flow, Sichtbar
Wo ging die Zeit innerhalb ein Request?Nanosekund-Level Breakdown
War es ein Syscall, ein Lock oder Compute?Die Call Sequence zeigt’s

Options Werth Wissen

FlagZweck
-multi-threadTrace alle Threads
-durationLänge von Capture Window
-trigger SYMBOLSnapshot auf einem Symbol
-full-executionTrace ein Ganzer Short Run
-output FILETrace Output Path

Limitations

LimitationNotiz
Intel onlyRequires Intel PT (no AMD/ARM)
Short WindowMillisekunden, nicht Minuten
Symbol QualityStripped Binaries geben Schlechte Traces
OverheadNiedrig aber Non-Zero während Tracing

magic-trace vs Verwandte Tools

Aspektmagic-traceperfPerfetto
DataFull Control Flow (Intel PT)Sampled StacksSystem-Wide Timeline
ResolutionNanosekundenSample IntervalEvent-Level
WindowLetzter Few msGanzer RunConfigurable
Am besten fürSeltene Latency SpikesAverage Hot PathsSystem-Wide Correlation

Nutze perf für Average Hot Paths, Perfetto für System-Wide Timelines und magic-trace wenn du die Exakte Story eines Rare Slow Events brauchst.

Ressourcen