Ricerca nel sito web

Perf: uno strumento di monitoraggio e analisi delle prestazioni per Linux


Quando parliamo di prestazioni in ambito informatico, ci riferiamo alla relazione tra le nostre risorse e i compiti che ci consentono di completare in un dato periodo di tempo.

In un’epoca di concorrenza spietata tra le aziende, è importante imparare a utilizzare ciò che abbiamo al meglio delle sue capacità. Lo spreco di risorse hardware o software, o la mancanza di capacità di sapere come usarle in modo più efficiente, finisce per essere una perdita che non possiamo permetterci se vogliamo essere al top del nostro gioco.

Allo stesso tempo, dobbiamo stare attenti a non portare le nostre risorse al limite in cui un uso prolungato causerebbe danni irreparabili.

In questo articolo ti presenteremo uno strumento di analisi delle prestazioni relativamente nuovo e forniremo suggerimenti che puoi utilizzare per monitorare i tuoi sistemi Linux, inclusi hardware e applicazioni. Ciò ti aiuterà a garantire che operino in modo da essere in grado di produrre i risultati desiderati senza sprecare risorse o la tua stessa energia.

Presentazione e installazione di Perf in Linux

Tra gli altri, Linux fornisce uno strumento di monitoraggio e analisi delle prestazioni chiamato convenientemente perf. Quindi cosa distingue perf da altri strumenti noti con cui hai già familiarità?

La risposta è che perf fornisce l'accesso all'unità di monitoraggio delle prestazioni nella CPU e quindi ci permette di osservare da vicino il comportamento dell'hardware e gli eventi ad esso associati.

Inoltre, può anche monitorare gli eventi del software e creare report dai dati raccolti.

Puoi 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 derivati:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Se uname -r nel comando sopra restituisce stringhe extra 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.

È anche importante notare che perf produce risultati incompleti se eseguito in un guest su VirtualBox o VMWare poiché non consentono l'accesso ai contatori hardware come fanno altre tecnologie di virtualizzazione (come KVM o XEN) .

Inoltre, tieni presente che alcuni comandi perf potrebbero essere limitati a root per impostazione predefinita, che può essere disabilitato (fino al riavvio del sistema) eseguendo:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Se devi disattivare la modalità paranoica in modo permanente, aggiorna la seguente impostazione nel file /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Sottocomandi

Una volta installato perf, puoi fare riferimento alla sua pagina man per un elenco dei sottocomandi disponibili (puoi pensare ai sottocomandi come opzioni speciali che aprono una finestra specifica nel sistema). Per risultati migliori e più completi, utilizza perf come root o tramite sudo.

Elenco delle prestazioni

perf list (senza opzioni) restituisce tutti i tipi di eventi simbolici (elenco lungo). 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 ]), ad esempio:

Visualizza l'elenco degli eventi predefiniti del software in Linux:

perf list sw 

Statistica prestazioni

perf stat esegue un comando e raccoglie statistiche sulle 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 sopra riportate indicano, tra le altre cose:

  1. L'esecuzione del comando dd ha richiesto 21,812281 millisecondi di CPU. Se dividiamo questo numero per il valore "secondi trascorsi" riportato di seguito (23,914596 millisecondi), si ottiene 0,912 (CPU utilizzata).
  2. Mentre il comando veniva eseguito, 15 cambi di contesto (noti anche come cambi di processo) indicano che le CPU sono state cambiate 15 volte da un processo (o thread) a un altro.
  3. 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.
  4. 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 della CPU per essere completata (in media). Possiamo dare la colpa di questo (almeno in parte) al numero di branch e branch miss (vedi sotto), che finiscono per sprecare o utilizzare in modo improprio i cicli della CPU.
  5. Quando il comando è stato eseguito, sono stati rilevati un totale di 3.552.630 rami. Questa è la rappresentazione a livello di CPU dei punti decisionali e dei cicli nel codice. Maggiore è il numero di rami, minore è la prestazione. Per compensare ciò, tutte le CPU moderne tentano di prevedere il flusso che prenderà il codice. 51.348 salti mancati indicano che la funzione di previsione era sbagliata nell'1,45% delle volte.

Lo stesso principio si applica alla raccolta di statistiche (o in altre parole, alla profilazione) mentre un'applicazione è in esecuzione. Avvia semplicemente l'applicazione desiderata e dopo un periodo di tempo ragionevole (che dipende da te) chiudila e perf visualizzerà le statistiche sullo schermo. Analizzando queste statistiche puoi identificare potenziali problemi.

Top perfetto

perf top è simile al comando top, in quanto mostra un profilo di sistema quasi in tempo reale (noto anche come analisi live).

Con l'opzione -a visualizzerai tutti i tipi di eventi conosciuti, mentre l'opzione -e ti permetterà di scegliere una categoria di eventi specifica (come restituita da elenco prestazioni):

Visualizzerà tutti gli eventi dei cicli.

perf top -a 

Visualizzerà tutti gli eventi relativi all'orologio della CPU.

perf top -e cpu-clock 

La prima colonna nell'output sopra rappresenta la percentuale di campioni prelevati dall'inizio della corsa, raggruppati per funzione Simbolo e Oggetto condiviso. Ulteriori opzioni sono disponibili in man perf-top.

Record perfetto

Il record perf esegue un comando e salva i dati statistici in un file denominato perf.data all'interno della directory di lavoro corrente. Funziona 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

Rapporto sulle prestazioni

Il perf report formatta i dati raccolti in perf.data sopra in un report sul rendimento:

sudo perf report

Tutti i sottocomandi di cui sopra hanno una pagina man dedicata che può essere richiamata come:

man perf-subcommand

dove sottocomando è list, stat, top, record o segnalare. Questi sono i sottocomandi utilizzati più frequentemente; altri sono elencati nella documentazione (fare riferimento alla sezione Riepilogo per il collegamento).

Riepilogo

In questa guida ti abbiamo presentato perf, uno strumento di monitoraggio e analisi delle prestazioni per Linux. Ti invitiamo vivamente a familiarizzare con la sua documentazione che è mantenuta in https://perf.wiki.kernel.org.

Se trovi applicazioni che consumano un'alta percentuale di risorse, potresti prendere in considerazione la modifica del codice sorgente o utilizzare altre alternative.

Se hai domande su questo articolo o suggerimenti per migliorare, siamo tutt'orecchi. Sentiti libero di contattarci utilizzando il modulo di commento qui sotto.