Quando parliamo di performance nel campo dell’informatica, ci riferiamo al rapporto tra le nostre risorse e i compiti che ci permettono di completare in un determinato periodo di tempo.

In un giorno di feroce competizione tra le aziende, è importante imparare come utilizzare al meglio ciò che abbiamo a disposizione. Lo spreco di risorse hardware o software, o la mancanza di capacità di utilizzarle in modo più efficiente, finisce per essere una perdita che non possiamo permetterci se vogliamo restare al top del nostro gioco.
Allo stesso tempo, dobbiamo fare attenzione a non spingere le nostre risorse al limite in modo che un utilizzo prolungato possa causare danni irreparabili.
In questo articolo ti presenteremo uno strumento di analisi delle prestazioni relativamente nuovo e forniremo consigli che puoi utilizzare per monitorare i tuoi sistemi Linux, compresi hardware e applicazioni. Questo ti aiuterà a garantire che essi operino in modo tale da consentirti di ottenere i risultati desiderati senza sprecare risorse o la tua stessa energia.
Introduzione e installazione di Perf in Linux
Tra gli altri, Linux fornisce uno strumento di monitoraggio delle prestazioni e di analisi chiamato convenientemente perf. Quindi cosa distingue perf da altri strumenti ben noti con cui sei già familiare?
La risposta è che perf fornisce accesso all’Unità di Monitoraggio delle Prestazioni nella CPU e ci consente quindi di esaminare da vicino il comportamento dell’hardware e i relativi eventi ad esso associati.
Inoltre, può anche monitorare gli eventi software e creare rapporti dai dati raccolti.
È possibile installare perf nelle distribuzioni basate su RPM con:
# yum update && yum install perf [CentOS / RHEL / Fedora] # dnf update && dnf install perf [Fedora 23+ releases]
In Debian e derivate:
# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic
Se uname -r
nel comando sopra restituisce stringhe aggiuntive oltre alla versione effettiva (3.2.0-23-generic nel mio caso), potresti dover digitare linux-tools-3.2.0-23 invece di utilizzare l’output di uname.
È importante notare che perf fornisce risultati incompleti quando eseguito in un guest su VirtualBox o VMWare poiché non permettono l’accesso ai contatori hardware come altre tecnologie di virtualizzazione (come KVM o XEN) fanno.
Inoltre, tieni presente che alcuni comandi perf potrebbero essere limitati da root per impostazione predefinita, il che può essere disabilitato (fino al riavvio del sistema) es
# echo 0 > /proc/sys/kernel/perf_event_paranoid
Se hai bisogno di disattivare permanentemente la modalità paranoia, aggiorna l’impostazione seguente nel file /etc/sysctl.conf.
kernel.perf_event_paranoid = 0
Sottocomandi
Dopo aver installato perf, puoi fare riferimento alla sua pagina man per un elenco dei sottocomandi disponibili (i sottocomandi possono essere pensati come opzioni speciali che aprono una finestra specifica nel sistema). Per ottenere i migliori e più completi risultati, utilizza perf sia come root che tramite sudo.
Elenco di Perf
perf list (senza opzioni) restituisce tutti i tipi di eventi simbolici (lungo elenco). Se desideri visualizzare l’elenco degli eventi disponibili in una categoria specifica, utilizza perf list seguito dal nome della categoria ([hw|sw|cache|tracepoint|pmu|event_glob]), come ad esempio:
Visualizza l’elenco degli eventi predefiniti software in Linux:
# perf list sw

Statistica di Perf
perf stat esegue un comando e raccoglie le statistiche delle prestazioni di Linux durante l’esecuzione di tale comando. Cosa succede nel nostro sistema quando eseguiamo dd?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Le statistiche mostrate sopra indicano, tra le altre cose:
- L’esecuzione del comando dd ha richiesto 21,812281 millisecondi di CPU. Se dividiamo questo numero per il valore “secondi trascorsi” sottostante (<
- Mentre il comando veniva eseguito, 15 context-switches (anche noti come process switches) indicano che le CPU sono state commutate 15 volte da un processo (o thread) all’altro.
- 2 migrazioni della CPU è il risultato atteso quando in una CPU a 2 core il carico di lavoro è distribuito equamente tra il numero di core.
Durante quel periodo (21,812281 millisecondi), il numero totale di cicli CPU consumati è stato di 62.025.623, che diviso per 0,021812281 secondi dà 2,843 GHz. - Se dividiamo il numero di cicli per il conteggio totale delle istruzioni otteniamo 4,9 Cicli Per Istruzione, il che significa che ogni istruzione ha richiesto quasi 5 cicli CPU per completare (in media). Possiamo attribuire questo (almeno in parte) al numero di branch e branch-misses (vedi sotto), che finiscono per sprecare o utilizzare in modo errato i cicli CPU.
- Mentre il comando veniva eseguito, è stato incontrato un totale di 3.552.630 branch. Questa è la rappresentazione a livello di CPU dei punti decisionali e dei cicli nel codice. Più branch ci sono, più bassa è la performance. Per compensare questo, tutte le CPU moderne cercano di prevedere il flusso che il codice prenderà. 51.348 branch-misses indicano che la funzione di previsione è stata sbagliata 1,45% delle volte.
Lo stesso principio si applica alla raccolta di statistiche (o in altre parole, al profiling) mentre un’applicazione è in esecuzione. Basta avviare l’applicazione desiderata e dopo un periodo di tempo ragionevole (che dipende da te) chiuderla, e perf visualizzerà le statistiche sullo schermo. Analizzando quelle statistiche è possibile identificare eventuali problemi.
Perf top
perf top è simile al comando top, in quanto visualizza un profilo di sistema quasi in tempo reale (noto anche come analisi live).
Con l’opzione -a
verranno visualizzati tutti i tipi di evento conosciuti, mentre l’opzione -e
ti permette di scegliere una categoria di evento specifica (come restituito da perf list):
Visualizzerà tutti gli eventi di cicli.
perf top -a
Visualizzerà tutti gli eventi correlati all’orologio cpu.
perf top -e cpu-clock

La prima colonna nell’output sopra rappresenta la percentuale di campioni presi dall’inizio dell’esecuzione, raggruppati per simbolo della funzione e oggetto condiviso. Ulteriori opzioni sono disponibili in man perf-top.
Perf record
perf record esegue un comando e salva i dati statistici in un file chiamato perf.data all’interno della directory di lavoro corrente. Esegue in modo simile a perf stat.
Digita perf record seguito da un comando:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report
perf report formatta i dati raccolti in perf.data sopra in un rapporto sulle prestazioni:
# sudo perf report

Tutti i sottocomandi sopra hanno una pagina man dedicata che può essere invocata come:
# man perf-subcommand
dove sottocomando è uno tra elenco, stat, top, record, o report. Questi sono i sottocomandi più utilizzati; gli altri sono elencati nella documentazione (fare riferimento alla sezione Riepilogo per il link).
Riepilogo
In questa guida ti abbiamo introdotto a perf, un tool di monitoraggio delle prestazioni e analisi per Linux. Ti incoraggiamo vivamente a familiarizzare con la sua documentazione che è mantenuta su https://perf.wiki.kernel.org.
Se trovi applicazioni che stanno consumando un elevato percentage di risorse, potresti considerare la modifica del codice sorgente, o utilizzare altre alternative.
Se hai domande su questo articolo o suggerimenti per migliorare, siamo tutto orecchi. Non esitare a contattarci utilizzando il modulo di commenti qui sotto.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/