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:
op_time
oprofpp
op_to_source
op_merge
Usare questi tool, insieme con i binari 'profiled', per generare i riporti che possono essere analizzati in modo più approfondito.
![]() | Avvertimento |
---|---|
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.
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.
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:
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.
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.
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.
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:
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.
Usare <file-name> come il nome di un eseguibile per il quale poter riprendere i dati.
Nomi del simbolo di decodifica C++
Nomi del simbolo di decodifica C++, e nomi decodificati della libreria STL semplificata.
Raccogliere informazioni da un contatore specifico. Il contatore di default, se non specificato, è 0.
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 |
Escludere l'elenco di simboli separato dalla virgola dall'output.
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.
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:
Lettera | Descrizione |
---|---|
v | Indirizzo della memoria virtuale |
s | Numero degli esempi |
S | Numero comulativo di esempi |
p | Percentuale di esempi relativa al numero totale di esempi per l'eseguibile |
P | Percentuale cumulativa di esempi relativi al numero totale di esempi per l'eseguibile |
q | Percentuale di esempi relativa a tutti gli eseguibili provati |
Q | Percentuale cumulativa di esempi relativa a tutti gli eseguibili provati |
n | Nome del simbolo |
l | File name del file sorgente e numero della riga, incluso il percorso completo |
L | Nome di base del nome del file del codice della sorgente e numero della riga |
i | Nome dell'eseguibile, incluso il percorso completo |
I | Nome di base dell'eseguibile |
d | Dettagli dell'esempio |
h | Mostrare i testi della colonna |
Tabella 43-4. Lettere per un ordine nella colonna
Specificare il percorso completo sulla sessione o una directory relativa alla directory /var/lib/oprofile/samples/.
Specificare un elenco separato da una virgola, di percorsi nei quali si trovano gli eseguibili da analizzare.
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.
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.