43.2. Configurazione di OProfile

Prima di eseguire OProfile, esso deve essere configurato. È necessario selezionare il controllo del kernel (oppure non selezionarlo). Le seguenti sezioni descrivono come usare la utility opcontrol, per configurare OProfile. Quando i comandi opcontrol vengono eseguiti, le opzioni d'impostazione vengono salvate su di un file /root/.oprofile/daemonrc.

43.2.1. Specificare il Kernel

Prima di tutto, configurare se OProfile deve controllare il kernel. Questa è l'unica opzione di configurazione richiesta prima d'iniziare OProfile. Tutte le altre sono facoltative.

Per controllare il kernel, eseguire il seguente comando come root:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

Per configurare OProfile in modo da non controllare il kernel, eseguire il seguente comando come root:

opcontrol --no-vmlinux

Questo comando carica anche il modulo del kernel oprofile (se non è già caricato), creando la directory /dev/oprofile/ se non è esistente. Consultare la Sezione 43.6 per maggiori informazioni su questa directory.

NotaNota Bene
 

Anche se OProfile è configurato in modo da non rappresentare il kernel, il kernel SMP deve essere eseguito per poter caricare, dallo stesso, il modulo oprofile.

Impostando se si desidera raccogliere informazioni all'interno del kernel, si ottiene solo una variazione dei dati da ottenere, e non come e dove i dati vengono memorizzati. Per generare diversi file d'esempio per le librerie dell'applicazione e del kernel, consultare la Sezione 43.2.3.

43.2.2. Impostare gli eventi da controllare

Molti processori contengono dei contatori, i quali vengono usati da OProfile per controllare eventi specifici. Come mostrato in Tabella 43-2, il numero di contatori disponibile, dipende dal processore.

Processorecpu_typeNumero dei contatori
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (non-hyper-threaded)i386/p48
Pentium 4 (hyper-threaded)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
iSeries eServer di IBMtimer1
pSeries eServer di IBMtimer1
S/390 eServer di IBMtimer1
zSeries eServer di IBMtimer1

Tabella 43-2. Processori e contatori di OProfile

Usare Tabella 43-2 per verificare che il corretto tipo di processore è stato rilevato, e per determinare il numero degli eventi che possono essere controllati simultaneamente. timer viene usato come tipo di precessore se il processore non ha un hardware di controllo della prestazione supportato.

Se viene usato timer, gli eventi non possono essere impostati per qualsiasi processore, in quanto l'hardware non possiede un supporto per i contatori della prestazione hardware. L'interruzione del timer invece, viene usata per il profiling.

Se timer non viene usato come tipo di processore, gli eventi controllati possono essere cambiati, e il contatore 0 per il processore viene impostato per default per un evento basato sul tempo. Se sono presenti sul processore più di un contatore, i contatori diversi dal contatore 0 non sono impostati per default ad un evento. Gli eventi di default controllati, sono mostrati in Tabella 43-3.

ProcessoreEvento di default per il contatore 0Descrizione
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDL'orologio del processore non viene fermato
Pentium 4 (HT e non-HT)GLOBAL_POWER_EVENTSIl periodo durante il quale il processore non viene fermato
Itanium 2CPU_CYCLESCicli CPU
TIMER_INT(none)Esempio per ogni interruzione del timer

Tabella 43-3. Eventi di default

Il numero di eventi che può essere controllato contemporaneamente, viene determinato dal numero di contatori per il processore. Tuttavia, non è un paragone uno-ad-uno, su alcuni processori determinati eventi devono essere mappati su contatori specifici. Per determinare il numero di contatori disponibili, eseguire il seguente comando:

cat /dev/oprofile/cpu_type

Gli eventi disponibili variano a seconda del tipo di processore. Per determinare gli eventi disponibili per il profiling, eseguire il seguente comando come utente root (l'elenco è specifico a seconda del tipo di processore del sistema):

op_help

Gli eventi per ogni contatore possono essere configurati tramite la linea di comando o attraverso una interfaccia grafica. Se il contatore non può essere impostato su di un evento specifico, verrà visualizzato un messaggio di errore.

Per impostare l'event per ogni counter configurabile tramite la linea di comando, usare opcontrol:

opcontrol --ctrlN-event=<event-name>

Sostituire N con il numero del contatore (iniziando con 0), e sostituire <event-name> con il nome esatto dell'evento da op_help.

43.2.2.1. Frequenza di campionamento

Per default, viene selezionata una impostazione dell'evento in rapporto al tempo. Essa crea circa 2000 esempi al secondo per processore. Se viene usato un timer interrupt, il timer è impostato sulla velocità di jiffy e non può essere regolata dall'utente. Se cpu_type non è timer, ogni evento può avere una impostazione sampling rate. La frequenza di campionamento è il numero degli eventi tra ogni esempio snapshot.

Quando si imposta l'event per il counter, si può specificare una frequenza di campionamento:

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

Sostituire <sample-rate> con il numero degli eventi da attendere prima di effettuare un campionamento. Più piccolo è il conteggio, più frequenti sono gli esempi. Per gli eventi che non si verificano frequentemente, è necessario un conteggio più basso per poter catturare gli esempi dell'evento.

CautelaAttenzione
 

Siate molto prudenti quando impostate la frequenza di campionamento. Se eseguite un campionamento molto frequente, potete sovraccaricare il sistema, causandone il suo arresto.

43.2.2.2. Maschere dell'unità

Se cpu_type non è timer, unit masks potrebbe essere necessario per definire maggiormente l'evento.

Le maschere dell'unità per ogni evento sono elencate con il comando op_help. I valori per ogni maschera dell'unità sono elencati in formato esadecimale. Per specificare più di una maschera dell'unità, i valori esadecimali devono essere combinati usando una operazione or di alterazione di bit.

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. Separazione dei profili dello spazio-utente e del kernel

Per default, le informazioni della modalità kernel e di quella dell'utente, vengono raccolte per ogni evento. Per configurare OProfile in modo da non contare gli eventi nella modalità kernel per un contatore specifico, eseguire il seguente comando (dove N è il numero del contatore):

opcontrol --ctrN-kernel=0

Eseguire il seguente comando per iniziare il profiling della modalità del kernel per un nuovo conteggio:

opcontrol --ctrN-kernel=1

Per configurare OProfile in modo da non eseguire il conteggio degli eventi in modalità utente per un counter specifico, eseguire il seguente comando (dove N è il numero del counter):

opcontrol --ctrN-user=0

Eseguire il seguente comando per iniziare il profiling della modalità utente per un nuovo conteggio:

opcontrol --ctrN-user=1

Quando il demone di OProfile scrive i dati del profilo su dei file semplici, è in grado di separare i dati del profilo della libreria e del kernel, in file semplici separati . Per configurare il modo in cui il demone scrive sui file semplici, eseguire il seguente comando come root:

opcontrol --separate=<choice>

<choice> può essere uno dei seguenti:

Se si usa --separate=library, l'esempio del file name include il nome dell'eseguibile e il nome della libreria.