Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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.

Tableau 23.3. Processeurs et compteurs OProfile

Processeurcpu_typeNombre de compteurs
AMD64x86-64/hammer4
AMD Family 10hx86-64/family104
AMD Family 11hx86-64/family114
AMD Family 12hx86-64/family124
AMD Family 14hx86-64/family144
AMD Family 15hx86-64/family156
Applied Micro X-Genearm/armv8-xgene4
ARM Cortex A53arm/armv8-ca536
ARM Cortex A57arm/armv8-ca576
IBM eServer System i et IBM eServer System ptimer1
IBM POWER4ppc64/power48
IBM POWER5ppc64/power56
IBM PowerPC 970ppc64/9708
IBM PowerPC 970MPppc64/970MP8
IBM POWER5+ppc64/power5+6
IBM POWER5++ppc64/power5++6
IBM POWER56ppc64/power66
IBM POWER7ppc64/power76
IBM POWER8ppc64/power78
IBM S/390 et IBM System ztimer1
Intel Core i7i386/core_i74
Intel Nehalem microarchitecturei386/nehalem4
Intel Westmere microarchitecturei386/westmere4
Intel Haswell microarchitecture (non-hyper-threaded)i386/haswell8
Intel Haswell microarchitecture (hyper-threaded)i386/haswell-ht4
Intel Ivy Bridge microarchitecture (non-hyper-threaded)i386/ivybridge8
Intel Ivy Bridge microarchitecture (hyper-threaded)i386/ivybridge-ht4
Intel Sandy Bridge microarchitecture (non-hyper-threaded)i386/sandybridge8
Intel Sandy Bridge microarchitecturei386/sandybridge-ht4
Intel Broadwell microarchitecture (non-hyper-threaded)i386/broadwell8
Intel Broadwell microarchitecture (hyper-threaded)i386/broadwell-ht4
Intel Silvermont microarchitecturei386/silvermont2
TIMER_INTtimer1
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 ».

Tableau 23.4. Événements par défaut

ProcesseurÉvénement par défaut du compteurDescription
AMD Athlon et AMD64CPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
AMD Family 10h, AMD Family 11h, AMD Family 12hCPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
AMD Family 14h, AMD Family 15hCPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
Applied Micro X-GeneCPU_CYCLESCycles de processeur
ARM Cortex A53CPU_CYCLESCycles de processeur
ARM Cortex A57CPU_CYCLESCycles de processeur
IBM POWER4CYCLESCycles de processeur
IBM POWER5CYCLESCycles de processeur
IBM POWER8CYCLESCycles de processeur
IBM PowerPC 970CYCLESCycles de processeur
Intel Core i7CPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
Intel Nehalem microarchitectureCPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
Intel Pentium 4 (hyper-threaded et non-hyper-threaded)GLOBAL_POWER_EVENTSPériode pendant laquelle le processeur n'est pas arrêté
Intel Westmere microarchitectureCPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
Intel Broadwell microarchitectureCPU_CLK_UNHALTEDL'horloge du processeur n'est pas à l'arrêt
Intel Silvermont microarchitectureCPU_CLK_UNHALTEDL'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é.