Aller au contenu

magic-trace - Traçage haute résolution Intel PT

magic-trace - Traçage haute résolution Intel PT

magic-trace (par Jane Street) capture et affiche des traces d’exécution haute résolution en utilisant Intel Processor Trace (Intel PT). Alors qu’un profileur d’échantillonnage vous dit où va le temps en moyenne, magic-trace enregistre le flux de contrôle réel — chaque entrée et sortie de fonction — pour les dernières millisecondes, à une résolution nanosecondes. Cela le rend uniquement approprié pour les événements rares et sensibles à la latence : la requête unique sur dix mille qui a pris 40ms, où un profil moyenné vous montre rien.

Prérequis

  • CPU Intel avec support Intel Processor Trace (la plupart des Intel modernes)
  • Linux avec perf et PT activés
  • Root ou paramètre perf_event_paranoid approprié
  • Binaires avec frame pointers / symboles pour une sortie lisible

Installation

MéthodeCommande
Binairetélécharger magic-trace depuis les GitHub Releases
opam (OCaml)opam install magic_trace
Permissionssysctl kernel.perf_event_paranoid=-1 (ou 1)
Vérifiermagic-trace --help

Deux modes de capture

ModeCommandeUtiliser
Attacher au service en coursmagic-trace attach -pid <pid>Service live
Exécuter une commandemagic-trace run ./my-programExécution reproductible
# Attacher, capturer sur Ctrl-C, écrire une trace
sudo magic-trace attach -pid $(pgrep -n myservice)

Déclencheurs de snapshot

L’idée clé : maintenir un buffer circulaire et faire un snapshot quand quelque chose d’intéressant se produit.

DéclencheurComment
ManuelAppuyer sur Ctrl-C lors de l’attachement
Point d’arrêt magiqueL’app appelle un symbole désigné pour déclencher un snapshot
TimerCapturer après une durée fixe
Déclencheur de symbole-trigger <symbol> pour faire un snapshot sur un appel de fonction
# Faire un snapshot chaque fois qu'une fonction spécifique est frappée
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'

Parce que le buffer contient les précédentes millisecondes, vous voyez ce qui a mené à l’événement, pas juste l’événement lui-même.

Visualisation des traces

magic-trace émet une trace visualisable dans l’UI Perfetto.

ÉtapeAction
1La capture produit trace.fxt (ou similaire)
2Ouvrir ui.perfetto.dev
3Charger le fichier de trace
4Zoomer dans la gamme de microsecondes d’intérêt
5Lire la séquence d’appels exacte et les durées
Contrôle PerfettoFait
W/SZoomer in/out
A/DDéplacer
Cliquer sur une trancheDétail de durée et de fonction
Sélectionner une gammeRésumé de ce qui a tourné

Ce que vous pouvez voir

QuestionRéponse magic-trace
Quelle fonction a causé ce pic de 40ms ?Appel exact, durée exacte
Avons-nous pris une branche inattendue ?Flux de contrôle complet, visible
Où le temps est allé dans une requête ?Décomposition au niveau nanoseconde
Était-ce un syscall, un verrou, ou du calcul ?La séquence d’appels le montre

Options qui valent le coup

FlagObjectif
-multi-threadTracer tous les threads
-durationLongueur de la fenêtre de capture
-trigger SYMBOLSnapshot sur un symbole
-full-executionTracer une exécution courte complète
-output FILEChemin de sortie de trace

Limitations

LimitationNote
Intel uniquementNécessite Intel PT (pas AMD/ARM)
Fenêtre courteMillisecondes, pas minutes
Qualité des symbolesLes binaires dépouillés donnent de mauvaises traces
SurchargeFaible mais non-zéro lors du traçage

magic-trace vs outils connexes

Aspectmagic-traceperfPerfetto
DonnéesFlux de contrôle complet (Intel PT)Piles échantillonnéesChronologie système
RésolutionNanosecondesIntervalle d’échantillonnageAu niveau des événements
FenêtreDerniers msExécution entièreConfigurable
Meilleur pourPics de latence raresChemins chauds moyensCorrélations système

Utiliser perf pour les chemins chauds moyens, Perfetto pour les chronologies système, et magic-trace quand vous avez besoin de l’histoire exacte d’un événement lent rare.

Ressources