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.
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.
![]() | Remarque |
---|---|
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.
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.
Processeur | cpu_type | Nombre de compteurs |
---|---|---|
Pentium Pro | i386/ppro | 2 |
Pentium II | i386/pii | 2 |
Pentium III | i386/piii | 2 |
Pentium 4 (non-hyper-threaded) | i386/p4 | 8 |
Pentium 4 (hyper-threaded) | i386/p4-ht | 4 |
Athlon | i386/athlon | 4 |
AMD64 | x86-64/hammer | 4 |
Itanium | ia64/itanium | 4 |
Itanium 2 | ia64/itanium2 | 4 |
TIMER_INT | timer | 1 |
iSeries eServer IBM | timer | 1 |
pSeries eServer IBM | timer | 1 |
S/390 eServer IBM | timer | 1 |
zSeries eServer IBM | timer | 1 |
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 0 | Description |
---|---|---|
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64 | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas arrêtée. |
Pentium 4 (HT et non-HT), Intel® EM64T | GLOBAL_POWER_EVENTS | La période de temps pendant laquelle le processeur n'est pas arrêté. |
Itanium 2 | CPU_CYCLES | Cycles 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.
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.
![]() | Attention |
---|---|
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é. |
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> |
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 :
none (aucun) — Ne pas séparer les profils (par défaut).
library — Générer des profils par application pour les bibliothèques.
kernel — Générer des profils par application pour le noyau et ses modules.
all — Générer des profils par application pour les bibliothèques et pour le noyau et ses modules.
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.
Précédent | Sommaire | Suivant |
OProfile | Niveau supérieur | Démarrage et arrêt de OProfile |