Linux: comando “perf” per il profiling delle prestazioni del sistema
Il comando perf
, abbreviazione di “performance”, è uno strumento potente e versatile presente nei sistemi operativi basati su Linux. Progettato per il profiling delle prestazioni del sistema, aiuta sviluppatori, sistemisti e utenti avanzati a comprendere il comportamento delle applicazioni e a ottimizzarne le prestazioni.
Introdotto nel kernel Linux 2.6.31, perf
offre una suite di strumenti per monitorare eventi di performance come contatori hardware (ad esempio, cicli CPU, cache miss), eventi software (ad esempio, fault di pagina, context switch), eventi personalizzati e tracciamento di funzioni. La sua versatilità lo rende utile per operazioni che spaziano dall’analisi di problemi di bassa latenza al miglioramento della scalabilità di applicazioni su larga scala.
Applicazioni del comando ‘perf’
Le applicazioni di perf
sono molteplici. Ecco alcune delle principali:
- Profiling del sistema:
perf
fornisce una panoramica dettagliata dei consumi di risorse del sistema, evidenziando i maggiori utilizzi di CPU, memoria, I/O e altre risorse critiche. Questo è cruciale per identificare colli di bottiglia e ottimizzare l’allocazione delle risorse. - Analisi del runtime delle applicazioni: Con
perf
è possibile misurare il tempo di esecuzione delle funzioni all’interno di un’applicazione, determinando le parti del codice più onerose dal punto di vista computazionale per ottimizzarle. - Monitoraggio dei contatori hardware:
perf
consente di accedere a una serie di contatori hardware come cicli, cache miss e branch miss, offrendo una visione dettagliata delle performance hardware. - Eventi software: Consente di monitorare eventi software come fault di pagina e context switch, influenzando le prestazioni delle applicazioni.
- Tracciamento delle chiamate di sistema:
perf
permette di tracciare le chiamate di sistema per ottimizzarne l’uso, identificando le syscalls più frequenti.
Esempio di utilizzo
Uno degli usi comuni di perf
è il comando perf stat
per ottenere statistiche di performance di un programma. Ad esempio, per monitorare un’applicazione chiamata applicazione
:
$ perf stat ./applicazione
Questo comando fornirà statistiche sull’esecuzione di applicazione
, come cicli CPU e istruzioni eseguite. Un altro comando utile è perf record
, per registrare eventi analizzabili successivamente con perf report
.
In sintesi, perf
è uno strumento essenziale per qualsiasi professionista IT che lavori in ambiente Linux, offrendo una vasta gamma di funzionalità per comprendere e ottimizzare le prestazioni del sistema.
Installazione e configurazione di ‘perf’ su Linux
Prima di sfruttare le funzionalità di perf
, è necessario installarlo e configurarlo correttamente. Seguono i dettagli su come farlo.
Prerequisiti
Assicurati di avere privilegi di root o di poter utilizzare sudo
. Idealmente, il kernel Linux deve essere almeno alla versione 2.6.31, poiché perf
è stato introdotto con tale versione.
Installazione Ubuntu/Debian
Usa il gestore di pacchetti per installare perf
:
sudo apt update sudo apt install linux-perf
Fedora
Installa perf
con:
sudo dnf install perf
Arch Linux
Su Arch Linux, perf
può essere installato con:
sudo pacman -S perf
Configurazione
Dopo l’installazione, configura perf
per massimizzare la sua efficacia. Uno degli aspetti cruciali è l’accesso ai contatori hardware, che può richiedere l’esecuzione come root. Per consentire agli utenti non privilegiati di utilizzare perf
, modifica il valore di perf_event_paranoid
:
echo 1 | sudo tee /proc/sys/kernel/perf_event_paranoid
Per rendere permanente la modifica, aggiungi questa riga a /etc/sysctl.conf
:
kernel.perf_event_paranoid=1
Applica la modifica con:
sudo sysctl -p
Verifica dell’Installazione
Verifica che perf
sia installato correttamente eseguendo:
perf --version
Se il comando restituisce una versione, l’installazione è andata a buon fine.
Sessioni di profiling e raccolta dati
Una volta installato e configurato correttamente, perf
può fornire dati dettagliati sulle prestazioni del sistema. Esploriamo alcune delle sue funzionalità avanzate per il profiling.
Sessioni di Profiling di Base
Uno dei comandi più usati è perf stat
, che raccoglie statistiche di performance durante l’esecuzione di un comando. Ad esempio:
sudo perf stat -e cpu-clock,task-clock,cycles,instructions,cache-references,cache-misses,branches,branch-misses sleep 5
Questo comando monitora vari eventi legati alla CPU durante l’esecuzione del comando sleep 5
, offrendo una panoramica delle prestazioni del sistema.
Profiling delle Funzioni del Kernel
Con perf record
e perf report
, è possibile registrare e analizzare i dati di performance. Esempio:
sudo perf record -e cycles -c 10000 -p <PID> sudo perf report
Questo consente di identificare le funzioni del kernel più onerose in termini di risorse.
Analisi degli Eventi Hardware e Software
perf
può monitorare sia eventi hardware che software. Ad esempio, per monitorare i page faults di un processo:
sudo perf stat -e page-faults -p <PID>
Analogamente, possono essere monitorati altri eventi specificando l’evento desiderato.
Visualizzazione Grafica e Analisi Avanzata
Per chi desidera una visualizzazione grafica, strumenti come FlameGraph
possono essere utilizzati in combinazione con perf
per creare grafici a fiamma.
sudo perf script | ./flamegraph.pl > perf-flame.svg
Questo processo converte i dati registrati in un grafico a fiamma visualizzabile in un browser web, facilitando la comprensione visiva delle prestazioni del sistema.
Utilizzo avanzato di ‘perf’ per il debugging delle performance
Oltre alle funzionalità di base, perf
offre opzioni avanzate per un’analisi più dettagliata delle prestazioni del sistema. Queste funzionalità sono utili per identificare problemi complessi di performance.
Analisi Dinamica con perf probe
perf probe
permette di inserire “sonde” dinamiche nel codice del kernel per raccogliere dati specifici. Ad esempio, per aggiungere una sonda su una funzione del kernel:
sudo perf probe do_sys_open
Quindi, registra e analizza l’attività:
sudo perf record -e probe:do_sys_open -aR sleep 10 sudo perf report
Individuazione dei Bottleneck con perf top
perf top
fornisce una visualizzazione interattiva in tempo reale delle funzioni che consumano più risorse:
sudo perf top
Analisi degli Eventi di Controllo GPM e Off-CPU
perf
può tracciare anche eventi off-CPU come i processi in attesa di I/O. Con perf sched
, ottieni dati dettagliati sui contesti di scheduling del kernel:
sudo perf sched record -a sudo perf sched latency
Prestazioni con perf c2c
Il plugin perf c2c
analizza la coerenza e la condivisione della cache tra diversi core della CPU:
sudo perf c2c record -aR sleep 5 sudo perf c2c report
Questo rapporto evidenzia i problemi di condivisione della cache, fornendo suggerimenti su come migliorare l’efficienza della cache.
Utilizzo di ‘perf’ per ottimizzare le applicazioni
Il comando perf
è uno degli strumenti più versatili per il profiling delle prestazioni su Linux. Con una vasta gamma di funzionalità, permette di eseguire analisi dettagliate delle prestazioni del sistema e delle applicazioni. Utilizzare perf
correttamente può aiutare a identificare e ottimizzare i punti critici di performance.
Esempi Pratici con Comandi
Dopo aver installato perf
con il gestore di pacchetti della tua distribuzione, puoi iniziare a utilizzarlo per varie operazioni di profiling. Vediamo alcuni esempi.
Analisi delle Funzioni con ‘perf record’ e ‘perf report’
Il comando perf record
cattura dati di performance che possono essere analizzati con perf report
. Per analizzare le performance di un’applicazione chiamata my_app
:
sudo perf record -g ./my_app sudo perf report
Il flag -g
cattura la call graph, utile per identificare le funzioni più onerose dal punto di vista delle prestazioni.
Monitoraggio delle I/O con ‘perf stat’
perf stat
fornisce una panoramica generale delle prestazioni del sistema, comprese le statistiche sull’I/O:
sudo perf stat -e task-clock,cycles,instructions,cache-references,cache-misses,branches,branch-misses,context-switches,cpu-migrations,page-faults
Questo comando raccoglie varie metriche di sistema in un singolo riepilogo.
Profiling Mirato con ‘perf script’
perf script
permette di estrarre e analizzare dati di eventi specifici:
sudo perf record -e cpu-clock -a -g -- sleep 5 sudo perf script
Questo comando registra eventi specifici di clock della CPU per 5 secondi e li presenta in un formato leggibile.
Visualizzazione Grafica con ‘perf report -g’
Per ottenere una visualizzazione grafica delle chiamate alle funzioni, utilizza il flag -g
con perf report
:
sudo perf record -g -- ./my_app sudo perf report -g 'graph,0.5,callee'
Questa rappresentazione visuale aiuta a identificare facilmente i punti caldi delle prestazioni.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.