43.2. Configuration de OProfile

Avant de pouvoir l'exécuter, OProfile doit être configuré. Il est requis, au minimum, de sélectionner le contrôle de noyau (ou de ne pas le sélectionner). Les sections suivantes décrivent comment utiliser l'utilitaire opcontrol pour configurer OProfile. Lorsque les commandes opcontrol sont exécutées, les options de configuration sont enregistrées dans le fichier /root/.oprofile/daemonrc.

43.2.1. Spécification du noyau

Tout d'abord, spécifiez si OProfile devrait contrôler le noyau. Cette option de configuration est la seule requise avant le lancement de OProfile. Toutes les autres sont facultatives.

Pour contrôler le noyau, exécutez la commande suivante en tant que super-utilisateur :

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

Pour configurer OProfile de façon à ce qu'il ne contrôle pas le noyau, exécutez la commande suivante en tant que super-utilisateur :

opcontrol --no-vmlinux

Cette commande charge également le module de noyau oprofile (si il n'est pas déjà chargé) et crée le répertoire /dev/oprofile/ si il n'existe pas déjà. Reportez-vous à la Section 43.6 afin d'obtenir de plus amples informations sur ce répertoire.

NoteRemarque
 

Même si OProfile est configuré de façon à ne pas créer le profil du noyau, le noyau SMP doit quand même être en cours d'exécution afin que le module oprofile puisse être chargé.

Le fait de définir si les échantillons devraient être recueillis au sein du noyau ne change que le type de données à recueillir et non pas la façon ou l'emplacement où les données recueillies sont stockées. Pour produire des fichiers d'échantillons différents pour le noyau ou les bibliothèques d'applications, reportez-vous à la Section 43.2.3.

43.2.2. Configuration d'évènements à contrôler

La plupart des processeurs contiennent des compteurs, qui sont utilisés par OProfile pour contrôler des évènements spécifiques. Comme l'illustre le Tableau 43-2, le nombre de compteurs disponibles dépend du processeur.

Processeurcpu_typeNombre de compteurs
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 IBMtimer1
pSeries eServer IBMtimer1
S/390 eServer IBMtimer1
zSeries eServer IBMtimer1

Tableau 43-2. Processeurs et compteurs OProfile

Utilisez le Tableau 43-2 pour vérifier que le bon type de processeur a été détecté et pour déterminer le nombre d'évènements qui peuvent être contrôlés simultanément. timer est utilisé comme type de processeur si le processeur n'a pas de matériel de contrôle de performance pris en charge.

Si timer est utilisé, des évènements ne peuvent pas être définis pour un autre processeur car le matériel ne prend pas en charge les compteurs de performance matérielle. L'interruption d'horloge est utilisée à la place pour le profilage.

Si timer n'est pas utilisé comme type de processeur, les évènements contrôlés peuvent être changés et le compteur 0 du processeur est réglé sur un évènement basé sur le temps, par défaut. Si il existe plusieurs compteurs sur le processeur, les compteurs autres que le compteur 0 ne sont pas configurés sur un évènement, par défaut. Les évènements contrôlés par défaut sont représentés dans le Tableau 43-3.

ProcesseurÉvènements par défaut pour le compteur 0Description
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDL'horloge du processeur n'est pas arrêtée.
Pentium 4 (HT et non-HT), Intel® EM64TGLOBAL_POWER_EVENTSLa période de temps pendant laquelle le processeur n'est pas arrêté.
Itanium 2CPU_CYCLESCycles du CPU.
TIMER_INT(aucun)Échantillon pour chaque arrêt d'horloge.

Tableau 43-3. Évènements par défaut

Le nombre d'évènements qui peuvent être contrôlés à un moment donné est défini par le nombre de compteurs pour le processeur. Toutefois, ceci n'est pas une corrélation de un à un ; sur certains processeurs, des évènements doivent être mappés à des compteurs donnés. Afin de déterminer le nombre de compteurs disponibles, exécutez la commande suivante :

cat /dev/oprofile/cpu_type

Les évènements disponibles varient selon le type de processeur. Afin de les déterminer pour le profilage, exécutez la commande suivante en tant que super-utilisateur (la liste est spécifique au type de processeur du système) :

op_help

Les évènements pour chaque compteur peuvent être configurés via la ligne de commande ou avec une interface graphique. Si le compteur ne peut pas être défini sur un évènement spécifique, un message d'erreur apparaît.

Pour définir un évènement pour chaque compteur configurable via la ligne de commande, utilisez opcontrol :

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

Remplacez N par le numéro de compteur (en commençant par 0), puis remplacez <event-name> par le nom exact de l'évènement depuis op_help.

43.2.2.1. Taux d'échantillonnage

Par défaut, un ensemble d'évènements basés sur le temps est sélectionné. Il crée approximativement 2000 échantillons par seconde par processeur. Si l'interruption d'horloge est utilisée, l'horloge est réglée sur le taux jiffy quel qu'il soit et l'utilisateur ne peut pas le modifier. Si cpu_type n'est pas timer, chaque évènement peut avoir un taux d'échantillonnage défini. Le taux d'échantillonnage est le nombre d'évènements entre chaque instantané d'échantillons.

Lors de la définition d'un évènement pour le compteur, un taux d'échantillonnage peut également être spécifié :

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

Remplacez <sample-rate> par le nombre d'évènements attendu avant de lancer un autre échantillonnage. Plus le nombre est petit, plus les échantillons seront fréquents. Pour les évènements qui ne se produisent pas fréquemment, un nombre plus bas peut être nécessaire pour capturer les évènements.

AttentionAttention
 

Soyez extrêmement vigilant lors de la définition de taux d'échantillonnage. Si vous effectuez cette procédure trop fréquemment, le système peut devenir surchargé. Ainsi, le système peut apparaître gelé ou peut être actuellement gelé.

43.2.2.2. Masques d'unité

Si le cpu_type n'est pas timer, il se peut que les masques d'unité soient requis pour définir l'évènement plus en détails.

Les masques d'unité pour chaque évènement sont énumérés avec la commande op_help. Les valeurs de chaque masque d'unité sont listées en format hexadécimal. Pour spécifier plusieurs masques d'unité, ces valeurs doivent être associées à l'aide d'une opération or (OU) de manipulation de bits.

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

43.2.3. Séparation des profils du noyau et de l'espace utilisateur

Par défaut, les informations du mode noyau et du mode utilisateur sont rassemblées pour chaque évènement. Pour configurer OProfile afin qu'il ne compte pas les évènements dans le mode noyau pour un compteur donné, exécutez la commande suivante (où N représente le nombre de compteurs) :

opcontrol --ctrN-kernel=0

Exécutez la commande suivante pour commencer le profilage du mode noyau pour le compteur :

opcontrol --ctrN-kernel=1

Pour configurer OProfile afin qu'il ne compte pas les évènements en mode utilisateur pour un compteur donné, exécutez la commande suivante (où N représente le nombre de compteurs) :

opcontrol --ctrN-user=0

Exécutez la commande suivante pour commencer le profilage du mode utilisateur pour le compteur :

opcontrol --ctrN-user=1

Lorsque le démon de OProfile écrit les données sur des fichiers échantillons, il peut séparer les données de profil du noyau et des bibliothèques en fichiers d'échantillons séparés. Pour configurer la façon dont le démon écrit sur les fichiers échantillons, exécutez la commande suivante en tant que super-utilisateur :

opcontrol --separate=<choice>

<choice> peut avoir l'une des valeurs suivantes :

Si --separate=library est utilisée, le nom du fichier échantillon inclut le nom de l'exécutable ainsi que le nom de la bibliothèque.