23.2. Utiliser operf
operf
est le mode de profilage recommandé et ne requiert pas de paramétrage initial avant d'être lancé. Tous les paramètres sont spécifiés comme options de ligne de commande et il n'y a pas de commande séparée pour lancer le processus de profilage. Pour arrêter operf
, appuyez sur Ctrl+C. La syntaxe de la commande operf
habituelle est comme suit :
operf
options range command args
Remplacez options par les options de ligne de commande souhaitées pour spécifier vos paramètres de profilage. Des ensembles complets d'options sont décrits dans la page du manuel
operf(1)
. Remplacez range par l'une des options suivantes :
--system-wide
- ce paramètre permet d'effectuer un profilage global, veuillez consulter Note
--pid=PID
- sert à profiler une application en cours d'exécution, où PID est l'ID du processus que vous souhaitez profiler.
Avec command et args, vous pouvez définir une commande ou une application spécifique à profiler, ainsi que les arguments d'entrée requis par cette commande ou application. command,
--pid
ou --system-wide
est requis, mais ces options ne peuvent pas être utilisées simultanément.
Lorsque vous invoquez
operf
sur la ligne de commande sans paramétrer l'option range, des données seront collectées pour les processus enfants.
Note
Pour exécuter
operf
--system-wide
, vous devrez être connecté avec les privilèges root
. À la fin du profilage, vous pourrez arrêter operf
avec Ctrl+C
.
Si vous exécutez
operf
--system-wide
en tant que processus d'arrière-plan (avec &
), arrêtez-le de manière contrôlée pour traiter les données de profil collectées. Pour cela, veuillez utiliser :
kill -SIGINT operf-PID
Lors de l'exécution de
operf
--system-wide
, il est recommandé d'utiliser le répertoire /root
ou un sous-répertoire de /root
comme répertoire de travail actuel afin que les fichiers de données échantillons ne soient pas stockés dans des emplacements accessibles aux utilisateurs normaux.
23.2.1. Spécifier le noyau
Pour surveiller le noyau, veuillez exécuter la commande suivante :
operf
--vmlinux
=vmlinux_path
Avec cette option, vous pouvez spécifier un chemin vers un fichier vmlinux qui correspond au noyau en cours d'exécution. Les échantillons du noyau seront attribués à ce binaire en permettant aux outils post-traitement d'attribuer des échantillons aux symboles du noyau correspondant. Si cette option n'est pas spécifiée, tous les échantillons de noyau seront attribués à un pseudo binaire nommé « no-vmlinux ».
23.2.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.
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é.
Note
Certains anciens modèles de processeurs ne sont pas pris en charge par le noyau sous-jacent « Linux Performance Events Subsystem » et ne sont donc pas pris en charge par
operf
. Si vous recevez ce message :
Your kernel's Performance Events Subsystem does not support your processor typelorsque vous tentez d'utiliser
operf
, essayez d'effectuer un profilage avec opcontrol
pour voir si votre type de processeur pourrait être pris en charge par le mode hérité d'OProfile.
Note
Comme les compteurs de performance du matériel ne sont pas disponibles sur les machines virtuelles invitées, il faut activer le mode timer pour utiliser operf sur des systèmes virtuels. Pour cela, veuillez saisir en tant qu'utilisateur
root
:
opcontrol
--deinit
modprobe
oprofile
timer=1
Pour paramétrer l'événement pour chaque compteur configurable via la ligne de commande, veuillez utiliser :
operf
--events
=event1,event2…
Veuillez saisir une liste séparée par des virgules des spécifications d'événements pour le profilage. Chaque spécification est une liste d'attributs séparés par le caractère des deux-points sous le format suivant :
event-name:sample-rate:unit-mask:kernel:user
Tableau 23.2, « Spécifications d'événement » résume ces options. Les trois dernières valeurs sont optionnelles. Si vous les omettez, elles seront paramétrées sur leurs valeurs par défaut. Remarquez que certains événements requièrent un masque d'unité.
Spécification | Description |
---|---|
event-name | Nom de l'événement symbolique exact pris de ophelp |
sample-rate | 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 ne se produisent pas fréquemment, un compte plus faible peut être nécessaire pour capturer un nombre statistiquement significatif d'instances d'événements. D'un autre côté, un échantillonnage trop fréquent peut surcharger le système. Par défaut, OProfile utilise un ensemble d'événements basé temps, ce qui crée un échantillon tous les 100,000 cycles d'horloge par processeur. |
unit-mask | Les masques d'unité, qui définissent encore plus l'événement, sont répertoriés dans ophelp . Vous pouvez insérer une valeur hexadécimale, commençant par « 0x », ou une chaîne qui correspond au premier mot de la description du masque d'unité dans ophelp . La définition par nom est valide pour les masques d'unité comprenant des paramètres « extra: », comme indiqué par la sortie de ophelp . Ce type de masque d'unité ne peut pas être défini avec une valeur hexadécimale. Remarquez que sur certaines architectures, il peut y avoir de multiples masques d'unité avec la même valeur hexadécimale. Dans ce cas, ils devront être spécifiés par leurs nom uniquement. |
kernel | Indique s'il faut profiler le code du noyau (insérez 0 ou 1 (par défaut)) |
user | Indique s'il faut profiler le code de l'espace utilisateur (insérez 0 ou 1 (par défaut)) |
Les événements disponibles varient fortement selon le type du processeur. Lorsqu'aucune spécification n'est donnée, l'événement par défaut du type de processeur en cours d'exécution sera utilisé pour le profilage. Veuillez consulter la Tableau 23.4, « Événements par défaut » pour voir une liste de ces événements par défaut. Pour déterminer les événements disponibles pour un profilage, veuillez utiliser la commande
ophelp
.
ophelp
23.2.3. Catégorisation des échantillons
L'option
--separate-thread
catégorise les échantillons par ID de groupe de thread (tgid) et par ID de thread (tid). Ceci est utile pour voir les échantillons par thread dans les applications à threads multiples. Lorsqu'utilisé en conjonction avec l'option --system-wide
, --separate-thread
est également utile pour voir les échantillons par processus (par groupe de threads) dans le cas où de multiples processus seraient exécutés par le même programme pendant l'exécution d'un profilage.
L'option
--separate-cpu
catégorises les échantillons par CPU.