samply - Sampling Profiler con UI Firefox Profiler
samply è un sampling profiler da linea di comando cross-platform per macOS, Linux e Windows. Campiona le tracce di stack di un comando o di un processo in esecuzione (default ~1000 Hz) e poi serve i risultati all”UI web Firefox Profiler — un front-end maturo e interattivo con grafici flame, grafici di stack, un call tree e timeline per-thread. Profila il codice nativo (C/C++/Rust/Go) e altri linguaggi che emettono informazioni di stack standard, senza modifiche al codice richieste.
Installazione
| Metodo | Comando |
|---|
| Cargo | cargo install --locked samply |
| Binario | scarica dalla pagina GitHub Releases |
| Accesso ai perf event su Linux | potrebbe essere necessario sysctl kernel.perf_event_paranoid=1 (o inferiore) |
| Verifica | samply --version |
Utilizzo Base
| Comando | Descrizione |
|---|
samply record ./my-program args | Profila un comando, poi apri l”UI |
samply record -- cargo run --release | Profila dopo -- (passa i flag attraverso) |
samply record --pid 1234 | Profila un processo già in esecuzione |
samply load profile.json.gz | Riapri un profilo salvato nell”UI |
samply --help | Elenco completo delle opzioni |
Opzioni di Registrazione
| Opzione | Descrizione |
|---|
-r, --rate N | Tasso di sampling in Hz (default ~1000) |
-o, --output FILE | Salva il profilo in un file |
--save-only | Registra senza avviare il browser UI |
-p, --pid PID | Allega a un processo in esecuzione |
-d, --duration SECS | Profila per una durata fissa |
--reuse-threads | Regolazione della gestione dei thread per alcuni carichi di lavoro |
-- | Tutto dopo è il comando + i suoi argomenti |
L”UI Firefox Profiler
Dopo la registrazione, samply apre una vista Firefox Profiler locale. Pannelli principali:
| Pannello | Mostra |
|---|
| Grafico flame | Stack aggregati (dove è speso il tempo) |
| Stack chart | Tempo sull”asse x, stack impilati verticalmente |
| Call tree | Gerarchia top-down / bottom-up con tempo self/total |
| Marker chart | Eventi nel tempo (se presenti) |
| Timeline | Attività per-thread; seleziona un intervallo per mettere a fuoco |
| Azione UI | Usa |
|---|
| Seleziona un intervallo di tempo | Metti a fuoco l”analisi su parte della corsa |
| Inverti call stack | Trova funzioni foglia hot (self time) |
| Ricerca | Filtra il call tree per nome funzione |
| Condividi/export | Salva o carica il profilo |
Suggerimenti del Flusso di Lavoro
| Scopo | Approccio |
|---|
| Trova i percorsi hot della CPU | Registra, apri il grafico flame, cerca frame ampi |
| Trova una fase lenta specifica | Seleziona quell”intervallo di tempo nella timeline |
| Confronta build | Salva i profili e carica side by side |
| Riduci il rumore | Profila release build con info di debug (debug = true) |
Flussi di Lavoro Comuni
# Profila una build Rust release (mantieni simboli con info di debug)
samply record -- cargo run --release
# Profila un server in esecuzione per 20 secondi
samply record --pid $(pgrep -n myserver) -d 20
# Registra headless in CI, ispeziona l''artefatto più tardi
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz
samply vs Altri Profiler
| Aspetto | samply | perf + FlameGraph | hotspot |
|---|
| Piattaforme | macOS/Linux/Windows | Linux | Linux |
| UI | Firefox Profiler (ricco) | SVG statico | GUI Qt |
| Setup | Singolo binario | Strumenti multipli | Installazione GUI |
| Migliore per | Cross-platform, interattivo | Profilazione scripted Linux | Utenti GUI Qt/perf |
Risorse