43.5. Analizzare i dati

Periodicamente, il demone di OProfile, oprofiled, raccoglie gli esempi e li scrive nella directory /var/lib/oprofile/samples/. Prima di leggere i dati, assicuratevi che gli stessi siano stati scritti in questa directory eseguendo il seguente comando come utente root:

opcontrol --dump

Ogni nome del file di esempio basato sul nome dell'eseguibile, con una parentesi graffa in chiusura (}), sostituendo ogni carattere barra (/). Il nome del file finisce con un carattere (#), seguito dal numero del contatore usato per quel file di esempio specifico. Per esempio, il seguente file include l'esempio dei dati per l'eseguibile /sbin/syslogd ottenuto con il contatore 0:

}sbin}syslogd#0

I seguenti tool sono disponibili per eseguire un profilo dei dati di esempio una volta raccolti:

Usare questi tool, insieme con i binari 'profiled', per generare i riporti che possono essere analizzati in modo pi approfondito.

AttenzioneAvvertimento
 

Gli eseguibili 'profiled' devono essere usati con questi tool per analizzare i dati. Se necessitano di essere cambiati dopo aver raccolto i dati, eseguite un back up degli eseguibili usati per creare gli esempi insieme con i file di esempio.

Gli esempi per ogni eseguibile vengono scritti su di un file di esempio singolo. Anche gli esempi per ogni libreria collegata dinamicamente, sono scritti su di un file di esempio singolo. Mentre OProfile in esecuzione, se l'eseguibile che sotto controllo cambia ed esistente per l'eseguibile stesso un file di esempio, il suddetto file viene cancellato automaticamente. Cos se vi bisogno del file di esempio, esso deve essere copiato, insieme con l'eseguibile usato per crearlo, prima di sostituire l'eseguibile con una nuova versione. Consultare la Sezione 43.4 per maggiori informazioni su come eseguire un back up del file di immagine.

43.5.1. Usare op_time

Il tool op_time fornisce una panoramica di tutti gli eseguibili che sono stati 'profiled'.

Il seguente esempio rappresenta una parte di output:

581        0.2949  0.0000 /usr/bin/oprofiled
966        0.4904  0.0000 /usr/sbin/cupsd
1028       0.5218  0.0000 /usr/sbin/irqbalance
1187       0.6026  0.0000 /bin/bash
1480       0.7513  0.0000 /usr/bin/slocate
2039       1.0351  0.0000 /usr/lib/rpm/rpmq
6249       3.1722  0.0000 /usr/X11R6/bin/XFree86
8842       4.4885  0.0000 /bin/sed
31342     15.9103  0.0000 /usr/bin/gdmgreeter
58283     29.5865  0.0000 /no-vmlinux
82853     42.0591  0.0000 /usr/bin/perl

Ogni eseguibile viene elencato sulla propria riga. La prima colonna rappresenta il numero di esempi registrati per l'eseguibile. La seconda colonna la percentuale di esempi relativi al numero totale di esempi. La terza colonna non viene usata, e la quarta il nome dell'eseguibile.

Consultare la pagina man op_time per un elenco delle opzioni della linea di comando come ad esempio l'opzione -r, usata per separare l'output dall'eseguibile con il numero pi grande di esempi e quello con il numero pi piccolo. L'opzione -c anche utile per specificare il numero del contatore.

43.5.2. Usare il comando oprofpp

Per ottenere informazioni pi dettagliate su eseguibili specifici, usare oprofpp:

oprofpp <mode> <executable>

<executable> deve essere il percorso completo per l'eseguibile da analizzare. <mode> deve essere uno dei seguenti:

-l

Elencare i dati di esempio tramite i simboli. Per esempio, quanto segue parte dell'output ottenuto dall'esecuzione del comando oprofpp -l /usr/X11R6/bin/XFree86:

vma      samples  %           symbol name
...
08195d10 4        3.0303      miComputeCompositeClip
080b9180 5        3.78788     Dispatch
080cdce0 5        3.78788     FreeResource
080ce4a0 5        3.78788     LegalNewID
080ce640 5        3.78788     SecurityLookupIDByClass
080dd470 9        6.81818     WaitForSomething
080e1360 12       9.09091     StandardReadRequestFromClient
...

La prima colonna la starting virtual memory address (vma). La seconda colonna il numero di esempi per il simbolo. La terza colonna rappresenta la percentuale di esempi per questo simbolo relativo al totale di esempi dell'eseguibile, e la quarta colonna il nome del simbolo.

Per separare l'output dal numero pi grande a quello pi piccolo (ordine inverso), usare -r insieme con l'opzione -l.

-s <symbol-name>

Elencare i dati di esempio specifici al nome di un simbolo. Per esempio, il seguente output viene ottenuto tramite il comando oprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86:

vma      samples  %           symbol name
080e1360 12       100         StandardReadRequestFromClient
080e1360 1        8.33333
080e137f 1        8.33333
080e13bb 1        8.33333
080e13f4 1        8.33333
080e13fb 1        8.33333
080e144a 1        8.33333
080e15aa 1        8.33333
080e1668 1        8.33333
080e1803 1        8.33333
080e1873 1        8.33333
080e190a 2        16.6667

La prima riga un sommario per la combinazione simbolo/eseguibile.

Il primo esempio consiste di indirizzi della memoria virtuale provata. La seconda colonna rappresenta il numero di esempi per l'indirizzo della memoria. La terza colonna la percentuale di esempi per l'indirizzo della memoria relativa al numero totale di esempi per il simbolo.

-L

Elenca i dati di esempio in base ai simboli con dattagli maggiori di -l. Per esempio:

vma      samples  %           symbol name
08083630 2        1.51515     xf86Wakeup
 08083641 1        50
 080836a1 1        50
080b8150 1        0.757576    Ones
 080b8179 1        100
080b8fb0 2        1.51515     FlushClientCaches
 080b8fb9 1        50
 080b8fba 1        50
...

I dati sono gli stessi dell'opzione -l, ad eccezione di ogni simbolo, ogni indirizzo della memoria virtuale usata, viene visualizzato. Per ogni indirizzo della memoria virtuale, il numero di esempi e la percentuale di esempi relativi al numero di esempi per il simbolo, viene visualizzato.

-g <file-name>

Generare un output su di un file in formato gprof. Se il file generato viene nominato gmon.out, gprof pu essere usato per analizzare maggiormente i dati. Per maggiori informazioni consultate la pagina man gprof.

Sono disponibili altre opzioni per limitare maggiormente i dati:

-f <file-name>

Usare il file di esempio specificato <file-name>. Per default, viene usato il file di esempio in /var/lib/oprofile/samples/. Usare questa opzione per specificare un file di esempio da una sessione precedente.

-i <file-name>

Usare <file-name> come il nome di un eseguibile per il quale poter riprendere i dati.

-d

Nomi del simbolo di decodifica C++

-D

Nomi del simbolo di decodifica C++, e nomi decodificati della libreria STL semplificata.

--counter <number>

Raccogliere informazioni da un contatore specifico. Il contatore di default, se non specificato, 0.

-o

Visualizza il numero della riga per ogni esempio nel codice della sorgente. Quando avete compilato l'eseguibile, dovreste aver usato l'opzione -g di GCC. In caso contrarioquesta opzione non pu mostrare i numeri delle righe. Nessuno degli eseguibili di Red Hat Enterprise Linux viene compilato con questa opzione per default.

vma      samples  %      symbol name        linear info
0806cbb0 0        0      _start             ../sysdeps/i386/elf/start.S:47
-e <symbol-name>

Escludere l'elenco di simboli separato dalla virgola dall'output.

-k

Mostrare una colonna aggiuntiva contenente la libreria condivisa. Questa opzione fornisce risultati se l'opzione --separate=library per opcontrol, viene specificata quando si configura OProfile e se l'opzione --dump-gprof-file non viene usata insieme con la suddetta opzione.

-t <format>

Mostrare l'output in un ordine specifico nella colonna. Questa opzione non pu essere usata con -g.

Usare le seguenti lettere per rappresentare le colonne:

LetteraDescrizione
vIndirizzo della memoria virtuale
sNumero degli esempi
SNumero comulativo di esempi
pPercentuale di esempi relativa al numero totale di esempi per l'eseguibile
PPercentuale cumulativa di esempi relativi al numero totale di esempi per l'eseguibile
qPercentuale di esempi relativa a tutti gli eseguibili provati
QPercentuale cumulativa di esempi relativa a tutti gli eseguibili provati
nNome del simbolo
lFile name del file sorgente e numero della riga, incluso il percorso completo
LNome di base del nome del file del codice della sorgente e numero della riga
iNome dell'eseguibile, incluso il percorso completo
INome di base dell'eseguibile
dDettagli dell'esempio
hMostrare i testi della colonna

Tabella 43-4. Lettere per un ordine nella colonna

--session <name>

Specificare il percorso completo sulla sessione o una directory relativa alla directory /var/lib/oprofile/samples/.

-p <path-list>

Specificare un elenco separato da una virgola, di percorsi nei quali si trovano gli eseguibili da analizzare.

43.5.3. Usare op_to_source

Il tool op_to_source cerca di far corrispondere gli esempi per istruzioni particolari su righe corrispondenti nel codice sorgente. I file risultanti dovrebbero avere gli esempi per le righe sulla sinistra. Inserisce inoltre un commento all'inizio di ogni funzione elencando gli esempi totali per l'istruzione.

Per far funzionare questa utility, l'eseguibile deve essere compilato con l'opzione -g di GCC. Per default, i pacchetti di Red Hat Enterprise Linux non vengono compilati con questa opzione.

La sintassi generale per op_to_source la seguente:

op_to_source --source-dir <src-dir> <executable>

La directory contenente il codice sorgente e l'eseguibile da analizzare, devono essere specificati. Consultate la pagina man op_to_source per un elenco aggiuntivo delle opzioni della linea di comando.

43.5.4. Usare op_merge

Se esistono file di esempio multipli per lo stesso eseguibile o libreria, i file di esempio possono essere uniti per consentire una analisi pi semplice.

Per esempio, per unire i file per la libreria /usr/lib/library-1.2.3.so, eseguire il seguente comando come utente root:

op_merge /usr/lib/library-1.2.3.so

Il file risultante /var/lib/oprofile/samples/}usr}lib}library-1.2.3.so.

Per limitare gli esempi uniti ad uno specifico contatore, usare l'opzione -c seguito dal numero del contatore.