23.3. Configurer OProfile en utilisant le mode hérité
Avant qu'OProfile puisse être exécuté en mode hérité, il doit être configuré. Au minimum, il est requis de sélectionner de surveiller le noyau (ou de sélectionner de ne pas le surveiller). Les sections suivantes décrivent comment utiliser l'utilitaire
opcontrol
pour configurer OProfile. Tandis que les commandes opcontrol
sont exécutées, les options de l'installation sont enregistrées sur le fichier /root/.oprofile/daemonrc
.
23.3.1. Spécifier le noyau
Veuillez commencer par configurer si OProfile doit surveiller le noyau. Cette option de configuration est la seule qui est requise avant de lancer OProfile. Toutes les autres sont optionnelles.
Pour surveiller le noyau, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux
Important
Pour surveiller le noyau, le paquet kernel-debuginfo, qui contient le noyau non compressé, doit être installé. Pour obtenir davantage d'informations sur la manière d'installer ce paquet, veuillez consulter l'article Comment télécharger les paquets debuginfo comme kernel-debuginfo? sur le Portail Client Red Hat.
Pour configurer OProfile à ne pas surveiller le noyau, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:
opcontrol --setup --no-vmlinux
Cette commande charge également le module
oprofile
du noyau si celui-ci n'est pas déjà chargé, et crée le répertoire /dev/oprofile/
s'il n'existe pas déjà. Veuillez consulter la Section 23.7, « Comprendre le répertoire /dev/oprofile/ » pour obtenir des détails sur ce répertoire.
Paramétrer si les échantillons doivent être collectés dans le noyau ne change uniquement que les données collectées, et non la façon dont elles le sont, ni où elles seront stockées après leur collecte. Pour générer différents fichiers échantillons pour le noyau et les bibliothèques d'application, veuillez consulter la Section 23.3.3, « Séparer les profils du noyau et de l'espace utilisateur ».
23.3.2. Paramétrer les événements à surveiller
La plupart des processeurs contiennent des compteurs, qui sont utilisés par OProfile pour surveiller des événements spécifiques. Comme affiché dans la Tableau 23.3, « Processeurs et compteurs OProfile », le nombre de compteurs disponibles dépend du processeur.
Processeur | cpu_type | Nombre de compteurs |
---|---|---|
AMD64 | x86-64/hammer | 4 |
AMD Family 10h | x86-64/family10 | 4 |
AMD Family 11h | x86-64/family11 | 4 |
AMD Family 12h | x86-64/family12 | 4 |
AMD Family 14h | x86-64/family14 | 4 |
AMD Family 15h | x86-64/family15 | 6 |
Applied Micro X-Gene | arm/armv8-xgene | 4 |
ARM Cortex A53 | arm/armv8-ca53 | 6 |
ARM Cortex A57 | arm/armv8-ca57 | 6 |
IBM eServer System i et IBM eServer System p | timer | 1 |
IBM POWER4 | ppc64/power4 | 8 |
IBM POWER5 | ppc64/power5 | 6 |
IBM PowerPC 970 | ppc64/970 | 8 |
IBM PowerPC 970MP | ppc64/970MP | 8 |
IBM POWER5+ | ppc64/power5+ | 6 |
IBM POWER5++ | ppc64/power5++ | 6 |
IBM POWER56 | ppc64/power6 | 6 |
IBM POWER7 | ppc64/power7 | 6 |
IBM POWER8 | ppc64/power7 | 8 |
IBM S/390 et IBM System z | timer | 1 |
Intel Core i7 | i386/core_i7 | 4 |
Intel Nehalem microarchitecture | i386/nehalem | 4 |
Intel Westmere microarchitecture | i386/westmere | 4 |
Intel Haswell microarchitecture (non-hyper-threaded) | i386/haswell | 8 |
Intel Haswell microarchitecture (hyper-threaded) | i386/haswell-ht | 4 |
Intel Ivy Bridge microarchitecture (non-hyper-threaded) | i386/ivybridge | 8 |
Intel Ivy Bridge microarchitecture (hyper-threaded) | i386/ivybridge-ht | 4 |
Intel Sandy Bridge microarchitecture (non-hyper-threaded) | i386/sandybridge | 8 |
Intel Sandy Bridge microarchitecture | i386/sandybridge-ht | 4 |
Intel Broadwell microarchitecture (non-hyper-threaded) | i386/broadwell | 8 |
Intel Broadwell microarchitecture (hyper-threaded) | i386/broadwell-ht | 4 |
Intel Silvermont microarchitecture | i386/silvermont | 2 |
TIMER_INT | timer | 1 |
Veuillez utiliser la Tableau 23.3, « Processeurs et compteurs OProfile » pour déterminer le nombre d'événements pouvant être surveillés simultanément pour votre type de CPU. Si le processeur ne possède pas de matériel de surveillance des performances, le
timer
sera utilisé en tant que type de processeur.
Si
timer
est utilisé, les événements ne pourront être paramétrés pour aucun processeur car il n'offre pas la prise en charge des compteurs de performances du matériel. Au contraire, l'interruption « timer » est utilisée pour le profilage.
Si
timer
n'est pas utilisé comme type de processeur, les événements surveillés pourront être modifiés, et le compteur 0 du processeur est défini sur un événement basé temps par défaut. S'il existe plus d'un compteur sur le processeur, les compteurs autres que 0 ne seront pas définis sur un événement par défaut. Les événements par défaut surveillés sont affichés dans la Tableau 23.4, « Événements par défaut ».
Processeur | Événement par défaut du compteur | Description |
---|---|---|
AMD Athlon et AMD64 | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
AMD Family 10h, AMD Family 11h, AMD Family 12h | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
AMD Family 14h, AMD Family 15h | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
Applied Micro X-Gene | CPU_CYCLES | Cycles de processeur |
ARM Cortex A53 | CPU_CYCLES | Cycles de processeur |
ARM Cortex A57 | CPU_CYCLES | Cycles de processeur |
IBM POWER4 | CYCLES | Cycles de processeur |
IBM POWER5 | CYCLES | Cycles de processeur |
IBM POWER8 | CYCLES | Cycles de processeur |
IBM PowerPC 970 | CYCLES | Cycles de processeur |
Intel Core i7 | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
Intel Nehalem microarchitecture | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
Intel Pentium 4 (hyper-threaded et non-hyper-threaded) | GLOBAL_POWER_EVENTS | Période pendant laquelle le processeur n'est pas arrêté |
Intel Westmere microarchitecture | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
Intel Broadwell microarchitecture | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
Intel Silvermont microarchitecture | CPU_CLK_UNHALTED | L'horloge du processeur n'est pas à l'arrêt |
TIMER_INT | (aucun) | Échantillon pour chaque interruption du timer |
Le nombre d'événements pouvant être surveillés à la fois est déterminé par le nombre de compteurs du processeur. Cependant, il ne s'agit pas ici d'une corrélation exacte. Sur certains processeurs, des événements doivent être mappés sur des compteurs spécifiques. Pour déterminer le nombre de compteurs disponibles, veuillez exécuter la commande suivante :
ls -d /dev/oprofile/[0-9]*
Les événements disponibles varient en fonction du type de processeur. Veuillez utiliser la commande
ophelp
pour déterminer les événements disponibles pour le profilage. La liste est spécifique au type de processeur du système.
ophelp
Note
À moins qu'OProfile soit correctement configuré,
ophelp
échoue avec le message d'erreur suivant :
Unable to open cpu_type file for reading Make sure you have done opcontrol --init cpu_type 'unset' is not valid you should upgrade oprofile or force the use of timer mode
Pour configurer OProfile, veuillez suivre les instructions dans la Section 23.3, « Configurer OProfile en utilisant le mode hérité ».
Les événements de chaque compteur peuvent être configurés via la ligne de commande ou avec une interface graphique. Pour obtenir plus d'informations sur l'interface graphique, veuillez consulter la Section 23.10, « Interface graphique ». Si le compteur ne peut pas être défini sur un événement particulier, un message d'erreur sera affiché.
Pour définir l'événement pour chaque compteur configurable via la ligne de commande, veuillez utiliser
opcontrol
:
opcontrol --event=event-name:sample-rate
Veuillez remplacer event-name par le nom exact de l'événement de
ophelp
, et remplacez sample-rate par le nombre d'événements entre échantillons.
23.3.2.1. Taux d'échantillonnage
Par défaut, un ensemble d'événements basé temps est sélectionné. Il crée un échantillon tous les 100,000 cycles d'horloge par processeur. Si l'interruption timer est utilisée, le timer sera défini sur le taux prévu et ne pourra pas être modifié pas un utilisateur. Si
cpu_type
n'est pas égal à timer
, chaque événement aura un taux d'échantillonnage paramétré. Le taux d'échantillonnage correspond au nombre d'événements entre chaque capture d'échantillon.
Lors de la définition de l'événement pour le compteur, un taux d'échantillonnage doit également être spécifié :
opcontrol --event=event-name:sample-rate
Veuillez remplacer sample-rate par le nombre d'événements à attendre avant d'échantillonner à nouveau. Plus le compte est faible, plus les échantillons sont fréquents. Pour les événements qui n'ont pas lieu fréquemment, un compte plus faible peut être nécessaire pour capturer les instances des événements.
Avertissement
Faites extrêmement attention pendant la définition des taux d'échantillonnage. Un échantillonnage trop fréquent peut surcharger le système, le faisant apparaitre gelé ou le faisant réellement geler.
23.3.2.2. Masques d'unités
Certains événements de surveillance des performances peuvent également nécessiter des masques d'unités pour mieux définir l'événement.
Des masques d'unités pour chaque événement sont répertoriés avec la commande
ophelp
. Les valeurs de chaque masque d'unité sont répertoriées sous un format hexadécimal. Pour spécifier plus d'un masque d'unité, les valeurs hexadécimales doivent être combinées en utilisant une opération bitwise or.
opcontrol --event=event-name:sample-rate:unit-mask
Remarquez que sur certaines architectures, il peut y avoir des masques d'unités multiples comportant la même valeur hexadécimale. Dans ce cas, ils doivent être spécifiés par leur nom uniquement.
23.3.3. Séparer les profils du noyau et de l'espace utilisateur
Par défaut, les informations du mode noyau et du mode utilisateur sont collectées pour chaque événement. Pour configurer OProfile de manière à ignorer les événements en mode noyau pour un compteur spécifique, veuillez exécuter la commande suivante :
opcontrol --event=event-name:sample-rate:unit-mask:0
Veuillez exécuter la commande suivante pour lancer à nouveau le profilage du mode noyau pour le compteur :
opcontrol --event=event-name:sample-rate:unit-mask:1
Pour configurer OProfile de manière à ignorer les événements en mode utilisateur pour un compteur spécifique, veuillez exécuter la commande suivante :
opcontrol --event=event-name:sample-rate:unit-mask:1:0
Veuillez exécuter la commande suivante pour lancer à nouveau le profilage du mode utilisateur pour le compteur :
opcontrol --event=event-name:sample-rate:unit-mask:1:1
Lorsque le démon OProfile écrit les données du profil sur des fichiers échantillons, il peut séparer les données de profil du noyau et de la bibliothèque en fichiers échantillons séparés. Pour configurer la manière par laquelle le démon écrit sur les fichiers échantillons, veuillez exécuter la commande suivante en tant qu'utilisateur root :
opcontrol --separate=choice
L'argument choice peut prendre l'une des valeurs suivantes :
none
— ne pas séparer les profils (valeur 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 les modules du noyau.all
— générer des profils par application pour les bibliothèques et des profils par application pour le noyau et les modules du noyau.
Si
--separate=library
est utilisé, le nom du fichier échantillon inclura également le nom de l'exécutable, ainsi que le nom de la bibliothèque.
Note
Ces changement de configuration ne rentreont en vigueur que lorsque le profileur OProfile sera redémarré.