Aller au contenu

samply - Profileur d'échantillonnage avec l'interface Firefox Profiler

samply - Profileur d’échantillonnage avec l’interface Firefox Profiler

samply est un profileur d’échantillonnage en ligne de commande multiplateforme pour macOS, Linux, et Windows. Il échantillonne les traces de pile d’une commande ou d’un processus en cours (par défaut ~1000 Hz) puis sert les résultats à l’interface Web Firefox Profiler — une interface avant-garde mature avec des graphes en flamme, des graphiques de pile, un arbre d’appels, et des chronologies par thread. Il profile le code natif (C/C++/Rust/Go) et d’autres langages qui émettent des informations de pile standard, sans changements de code nécessaires.

Installation

MéthodeCommande
Cargocargo install --locked samply
Binairetélécharger depuis la page GitHub Releases
Accès aux événements Linux perfpeut nécessiter sysctl kernel.perf_event_paranoid=1 (ou inférieur)
Vérifiersamply --version

Utilisation de base

CommandeDescription
samply record ./my-program argsProfiler une commande, puis ouvrir l’interface
samply record -- cargo run --releaseProfiler après -- (passer les flags à travers)
samply record --pid 1234Profiler un processus déjà en cours d’exécution
samply load profile.json.gzRéouvrir un profil sauvegardé dans l’interface
samply --helpListe complète des options

Options d’enregistrement

OptionDescription
-r, --rate NFréquence d’échantillonnage en Hz (par défaut ~1000)
-o, --output FILESauvegarder le profil dans un fichier
--save-onlyEnregistrer sans lancer l’interface du navigateur
-p, --pid PIDAttacher à un processus en cours d’exécution
-d, --duration SECSProfiler pendant une durée fixe
--reuse-threadsAjustement du traitement des threads pour certaines charges de travail
--Tout après est la commande + ses args

L’interface Web Firefox Profiler

Après l’enregistrement, samply ouvre une vue Firefox Profiler locale. Panneaux clés :

PanneauAffiche
Flame graphPiles agrégées (où le temps est dépensé)
Stack chartLe temps sur l’axe x, les piles empilées verticalement
Call treeHiérarchie haut-bas / bas-haut avec temps propre/total
Marker chartÉvénements dans le temps (si présent)
TimelineActivité par thread ; sélectionner une plage pour se concentrer
UI actionUtilisation
Sélectionner une plage de tempsConcentrer l’analyse sur une partie de l’exécution
Inverser la pile d’appelsTrouver les fonctions de feuille chaudes (temps propre)
RechercheFiltrer l’arbre d’appels par nom de fonction
Partager/exporterSauvegarder ou uploader le profil

Conseils de workflow

ObjectifApproche
Trouver les chemins chauds CPUEnregistrer, ouvrir le graphe en flamme, chercher les cadres larges
Trouver une phase lente spécifiqueSélectionner cette plage de temps dans la chronologie
Comparer les buildsSauvegarder les profils et charger côte à côte
Réduire le bruitProfiler les builds release avec les infos de debug (debug = true)

Workflows courants

# Profiler une compilation Rust release (garder les symboles avec les infos de debug)
samply record -- cargo run --release

# Profiler un serveur en cours d'exécution pendant 20 secondes
samply record --pid $(pgrep -n myserver) -d 20

# Enregistrer headless dans CI, inspecter l'artefact plus tard
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs autres profileurs

Aspectsamplyperf + FlameGraphhotspot
PlateformesmacOS/Linux/WindowsLinuxLinux
InterfaceFirefox Profiler (riche)SVG statiqueQt GUI
ConfigurationBinaire uniquePlusieurs outilsInstallation GUI
Meilleur pourMultiplateforme, interactifProfilage Linux scriptéUtilisateurs Qt/perf GUI

Ressources