Prestazione

Esercitazione sul profilo

Esercitazione sul profilo

OProfile è un profiler delle prestazioni per Linux. In questo articolo, esploreremo cosa fa, come installarlo e configurarlo e come utilizzare i dati che assembla.

Potresti chiederti perché avresti bisogno di uno strumento come questo dato che ci sono molti buoni strumenti di analisi delle prestazioni disponibili per impostazione predefinita sulla maggior parte delle distribuzioni Linux. Ogni installazione include strumenti come top e vmstat e le utility di tracciamento come strace sono di solito solo un apt-get away. Dove si inserisce OProfile??

Gli strumenti precedentemente menzionati sono eccellenti per ottenere un'istantanea di un sistema Linux in tempo reale. Strumenti come top o htop mostrano tutti i processi in esecuzione, il loro consumo di memoria corrente e l'utilizzo del processore. Ma sapere quali processi e chiamate di sistema stanno consumando la maggior parte delle risorse diventa problematico.

È qui che entra in gioco OProfile. Questa suite di utilità non solo esegue la sua analisi a un livello più profondo, ma salva anche i dati e consente di produrre report sulle prestazioni che offrono una vasta gamma di informazioni che possono aiutarti a eseguire il debug anche del problema di prestazioni più sfuggente.

OProfile non è solo per gli sviluppatori. In un ambiente desktop, OProfile può aiutarti a rintracciare attività in background ad alta intensità di CPU o chiamate I/O che ti rallentano e non sono immediatamente evidenti. Su un sistema occupato con priorità di processo mutevoli, questi dati possono essere difficili da raccogliere, figuriamoci da interpretare. La natura multiprocesso di un ambiente server rende questo compito ancora più difficile con gli strumenti tradizionali.

Detto questo, gli sviluppatori senza dubbio trarranno il massimo vantaggio da OProfile. Le informazioni che presenterò copriranno le basi di entrambi i casi d'uso in modo da poter approfondire le metriche delle prestazioni di qualsiasi programma Linux.

Installazione

C'è una nota molto importante che deve essere fatta prima di immergersi profondamente in OProfile: potresti non essere in grado di installarlo in un ambiente virtualizzato. Se stai eseguendo Linux all'interno di un VirtualBox, VMWare o un ambiente VM simile, OProfile potrebbe non essere in grado di accedere ai contatori delle prestazioni necessari per raccogliere i dati. Inoltre, anche se sei in grado di usarlo in un ambiente virtuale, i tempi precisi potrebbero essere in qualche modo distorti in base al carico del sistema host, quindi tienilo a mente se non stai eseguendo su hardware nativo.

Diverse distribuzioni Linux hanno OProfile nei loro sistemi di gestione dei pacchetti, rendendo l'installazione facile:

Un semplice esempio

Una volta installato il programma, inzuppiamoci i piedi con un esempio banale ma utile. Il programma "ls" è un comando che probabilmente usi sempre. Visualizza semplicemente un elenco di file e cartelle nella directory corrente. Tracciamo il suo output:

sudo operf ls

Vedrai qualcosa di simile alla schermata sopra. Una volta terminato il profiler, annuncerà "Profilazione completata."Ha salvato i suoi dati in una cartella chiamata oprofile_data che può essere utilizzata per generare un report.

L'esecuzione del comando opreport (senza sudo in questo caso) produce un report simile a questo:

In questo esempio, il report predefinito mostra il numero di campioni quando la CPU non era in uno stato HALT (in altre parole, stava attivamente facendo qualcosa). Kallsyms fornisce la ricerca dei simboli utilizzata dal profiler e ld.così e libc.quindi fanno parte del pacchetto glibc, una libreria comune collegata a quasi tutti gli eseguibili Linux che fornisce funzionalità di base che gli sviluppatori possono utilizzare per evitare di reinventare la ruota e fornire un livello generico di compatibilità tra vari sistemi. Puoi vedere che il programma reale ls ha avuto molto meno tempo non HALT - la maggior parte del lavoro pesante è stato svolto dalle librerie standard.

Una volta terminato il rapporto, è una buona idea rimuovere la cartella dei dati o salvarla per analisi future. In questo esempio, lo rimuoveremo semplicemente poiché stiamo eseguendo esercizi di esempio. Poiché abbiamo eseguito il comando con sudo, dobbiamo rimuovere la cartella con sudo. Stai attento!

sudo rm -Rf oprofile_data

Un esempio più complesso

In questo prossimo esempio, eseguiremo un programma che in realtà fa qualcosa di più complesso che elencare semplicemente i file nella cartella corrente. Scarichiamo WordPress con wget.

sudo operf wget http://wordpress.org/ultima.catrame.gz

Dopo questo esempio, possiamo generare un report con il comando "opreport":

Vedrai molta più attività dopo questa. Il comando wget ha dovuto lavorare molto dietro le quinte per ottenere l'ultima copia di WordPress. Sebbene non sia necessario esaminare ogni elemento, i punti di interesse interessanti sono:

Questo tipo di dati può fornire una grande quantità di informazioni per uno sviluppatore. Ma quanto è importante questo per un amministratore di sistema di un server o un utente esperto su un desktop?? Sapendo quali parti di un programma richiedono più tempo della CPU, possiamo scoprire cosa necessita di ottimizzazione o dove si verifica il rallentamento, consentendoci di prendere decisioni migliori su come ottimizzare il nostro sistema.

In questo esempio, la maggior parte del tempo della CPU è stata impiegata dalle routine crypto/SSL. Questo è comprensibile perché la crittografia è un'attività che richiede tempo. Aveva il wordpress.org non ci ha reindirizzato a https:// questa libreria non sarebbe stata utilizzata, risparmiando tempo della CPU. Il livello di rete sarebbe stato ancora utilizzato, ma l'utilizzo di una connessione cablata invece di una connessione wireless sarebbe stato probabilmente meno faticoso. La disabilitazione dell'indicatore di avanzamento sul programma wget (tramite l'opzione -nv) avrebbe risparmiato tempo alla CPU nella visualizzazione dell'avanzamento del download.

Scavando nei simboli

Anche se il rapporto predefinito fornisce informazioni preziose e utili, possiamo approfondire. Eseguendo questo:

opreport --demanngle=smart --symbols

Possiamo scoprire esattamente quanto tempo CPU funziona nelle librerie consumate:

In questo esempio, ho usato il comando wget sopra ma ho usato un URL http:// (uno che non reindirizza a https://) e puoi vedere l'assenza di librerie OpenSSL nella traccia. Tuttavia, invece del solo nome della libreria, ora abbiamo un elenco completo delle funzioni coinvolte. Come puoi vedere, il livello di rete ha consumato la maggior parte del tempo non HALT della CPU.

Portarlo al livello successivo

Negli esempi precedenti abbiamo usato OProfile per dare un'occhiata a un programma alla volta. Puoi esaminare l'intero sistema contemporaneamente utilizzando l'opzione -system-wide:

sudo operf --system-wide

Usando questa tecnica, OProfile raccoglierà le statistiche allo stesso modo e si fermerà quando premi CTRL+C. Successivamente, puoi eseguire il comando opreport. Poiché il profiler genererà probabilmente molti più dati (specialmente su un desktop o un server occupato).

opreport > rapporto.TXT

Il report è ora visualizzabile in un file chiamato report.TXT

Spese generali basse

È importante notare che mentre OProfile non dovrebbe interferire con il funzionamento dei tuoi programmi, creerà un po' di sovraccarico e quindi rallenterà l'esecuzione. Nei nostri semplici esempi sopra non ha creato un problema, ma su un programma con esecuzione lunga e chiamate di funzioni estese probabilmente noterai una differenza. Per questo motivo, non consiglierei di utilizzare questo programma in un ambiente server di produzione a meno che non si trovi di fronte a un problema di prestazioni critico che deve essere risolto con l'utilizzo live. Anche allora, lo userei abbastanza a lungo per trovare il problema.

Conclusione

OProfile è un potente strumento di profilazione delle prestazioni. Attinge al livello più basso disponibile in Linux per ottenere contatori delle prestazioni e metriche che ti forniscono preziose informazioni sui tuoi programmi.

Sono finiti i giorni delle congetture nel debug delle prestazioni: ora hai il potere di sapere esattamente cosa sta facendo il tuo sistema e come migliorarlo. Studiando i report generati da OProfile, puoi prendere decisioni informate e basate sui dati sull'ottimizzazione del tuo sistema.

OpenTTD vs Simutrans
Creare la tua simulazione di trasporto può essere divertente, rilassante ed estremamente allettante. Ecco perché devi assicurarti di provare quanti pi...
Tutorial OpenTTD
OpenTTD è uno dei giochi di simulazione aziendale più popolari in circolazione. In questo gioco, devi creare una meravigliosa attività di trasporto. T...
SuperTuxKart per Linux
SuperTuxKart è un fantastico titolo progettato per offrirti l'esperienza di Mario Kart gratuitamente sul tuo sistema Linux. È piuttosto impegnativo e ...