43.5. Analyse des données

Périodiquement, le démon OProfile, oprofiled, recueille les échantillons et les écrit dans le répertoire /var/lib/oprofile/samples/. Avant de les lire, assurez-vous que toutes les données sont bien écrites dans ce répertoire en exécutant la commande suivante en tant que super-utilisateur :

opcontrol --dump

Chaque nom de fichier d'échantillons est basé sur le nom de l'exécutable, avec une accolade fermante (}) remplaçant chaque oblique (/). Le nom du fichier se termine par un signe dièse (#), suivi du nombre de compteurs utilisés pour ce fichier d'échantillons. Par exemple, le fichier suivant inclut les données d'échantillons pour l'exécutable /sbin/syslogd recueillies avec le compteur 0 :

}sbin}syslogd#0

Les outils suivants sont disponibles pour profiler les données d'échantillons une fois recueillies :

Utilisez ces outils ainsi que les binaires profilés pour générer des rapports qui peuvent être analysés plus en détails.

AvertissementAvertissement
 

L'exécutable en cours de profilage doit être utilisé avec ces outils pour analyser les données. Si il doit changer après que les données soient recueillies, sauvegardez l'exécutable utilisé pour créer les échantillons ainsi que les fichiers d'échantillons.

Les échantillons pour chaque exécutable sont écrits sur un seul fichier d'échantillons. Les échantillons de chaque bibliothèque liée dynamiquement sont également écrits sur un seul fichier d'échantillons. Lorsque OProfile est en cours d'exécution, si l'exécutable surveillé change et si un fichier d'échantillons existe pour l'exécutable, le fichier d'échantillons existant sera automatiquement supprimé. Ainsi, si le fichier d'échantillons existant est nécessaire, il doit être sauvegardé avec l'exécutable utilisé pour le créer avant que l'exécutable ne soit remplacé par une nouvelle version. Reportez-vous à la Section 43.4 afin d'obtenir davantage d'informations sur la manière de sauvegarder le fichier d'échantillons.

43.5.1. Utilisation de op_time

L'outil op_time offre un aperçu sur tous les exécutables en cours de profilage.

Ci-dessous figure l'exemple d'une sortie :

581        0.2949  0.0000 /usr/bin/oprofiled
966        0.4904  0.0000 /usr/sbin/cupsd
1028       0.5218  0.0000 /usr/sbin/irqbalance
1187       0.6026  0.0000 /bin/bash
1480       0.7513  0.0000 /usr/bin/slocate
2039       1.0351  0.0000 /usr/lib/rpm/rpmq
6249       3.1722  0.0000 /usr/X11R6/bin/XFree86
8842       4.4885  0.0000 /bin/sed
31342     15.9103  0.0000 /usr/bin/gdmgreeter
58283     29.5865  0.0000 /no-vmlinux
82853     42.0591  0.0000 /usr/bin/perl

Chaque exécutable est répertorié sur sa propre ligne. La première colonne représente le nombre d'échantillons enregistrés pour l'exécutable. La seconde colonne représente le pourcentage d'échantillons relatif au nombre total d'échantillons. La troisième colonne n'est pas utilisée et la quatrième représente le nom de l'exécutable.

Consultez la page de manuel relative à op_time afin d'obtenir une liste de toutes les options de ligne de commande disponibles, comme l'option -r utilisée pour trier la sortie de l'exécutable avec le nombre d'échantillons le plus grand à celui avec le nombre d'échantillons le plus petit. L'option -c est également utile pour spécifier un nombre de compteurs.

43.5.2. Utilisation de oprofpp

Pour récupérer des informations plus détaillées sur un exécutable donné, utilisez oprofpp :

oprofpp <mode> <executable>

<executable> doit être le chemin complet à l'exécutable à être analysé. <mode> doit avoir l'une des valeurs suivantes :

-l

Affiche les données d'échantillons par symbole. Par exemple, l'exemple suivant fait partie de la sortie obtenue en exécutant la commande oprofpp -l /usr/X11R6/bin/XFree86 :

vma      samples  %           symbol name
...
08195d10 4        3.0303      miComputeCompositeClip
080b9180 5        3.78788     Dispatch
080cdce0 5        3.78788     FreeResource
080ce4a0 5        3.78788     LegalNewID
080ce640 5        3.78788     SecurityLookupIDByClass
080dd470 9        6.81818     WaitForSomething
080e1360 12       9.09091     StandardReadRequestFromClient
...

La première colonne représente l'adresse de mémoire virtuelle de début (vma). La seconde colonne représente le nombre d'échantillons pour le symbole. La troisième colonne représente le pourcentage d'échantillons pour ce symbole relatif à l'ensemble des échantillons de l'exécutable. La quatrième colonne représente, elle, le nom du symbole.

Pour trier la sortie du nombre d'échantillons le plus grand au plus petit (ordre inverse), utilisez -r avec l'option -l.

-s <symbol-name>

Affiche les données d'échantillons spécifiques à un nom de symbole. Par exemple, la sortie suivante est obtenue en exécutant la commande oprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86 :

vma      samples  %           symbol name
080e1360 12       100         StandardReadRequestFromClient
080e1360 1        8.33333
080e137f 1        8.33333
080e13bb 1        8.33333
080e13f4 1        8.33333
080e13fb 1        8.33333
080e144a 1        8.33333
080e15aa 1        8.33333
080e1668 1        8.33333
080e1803 1        8.33333
080e1873 1        8.33333
080e190a 2        16.6667

La première ligne est un résumé de la combinaison symbole/exécutable.

La première colonne représente les adresses de mémoire virtuelle échantillonnées. La seconde colonne représente le nombre d'échantillons pour l'adresse de mémoire. La troisième colonne représente le pourcentage d'échantillons pour l'adresse de mémoire relatif au nombre total d'échantillons pour le symbole.

-L

Affiche les données d'échantillons avec de plus amples informations que -l. Par exemple :

vma      samples  %           symbol name
08083630 2        1.51515     xf86Wakeup
 08083641 1        50
 080836a1 1        50
080b8150 1        0.757576    Ones
 080b8179 1        100
080b8fb0 2        1.51515     FlushClientCaches
 080b8fb9 1        50
 080b8fba 1        50
...

Les données sont les mêmes qu'avec l'option -l sauf que chaque adresse de mémoire virtuelle utilisée est affichée pour chaque symbole. Pour chacune d'entre elles, le nombre d'échantillons et le pourcentage d'échantillons relatif au nombre d'échantillons pour le symbole sont affichés.

-g <file-name>

Génère la sortie vers un fichier sous le format gprof. Si le fichier produit est nommé gmon.out, gprof peut être utilisé pour analyser les données plus en détails. Consultez la page de manuel associée à gprof afin d'obtenir de plus amples informations.

Voici d'autres options disponibles pour restreindre davantage les données :

-f <file-name>

Utilise le fichier d'échantillons spécifié <file-name>. Par défaut, le fichier d'échantillons dans /var/lib/oprofile/samples/ est utilisé. Utilisez cette option afin de spécifier le fichier d'échantillons d'une session précédente.

-i <file-name>

Utilise <file-name> comme le nom de l'exécutable pour lequel récupérer les données.

-d

Décode les noms de symboles C++.

-D

Décode les noms de symboles C++ et simplifie les nom décodés de bibliothèque STL.

--counter <number>

Recueille des informations sur un compteur donné. Le compteur par défaut est 0 si il n'est pas spécifié.

-o

Affiche les numéros de ligne dans le code source pour chaque échantillon. Lorsque l'exécutable a compilé, l'option -g de GCC aurait dû être utilisée. Dans le cas contraire, cette option ne peut pas afficher les numéros de ligne. Aucun exécutable de Red Hat Enterprise Linux n'est compilé avec cette option par défaut.

vma      samples  %      symbol name        linear info
0806cbb0 0        0      _start             ../sysdeps/i386/elf/start.S:47
-e <symbol-name>

Exclut la liste de symboles séparés par des virgules de la sortie.

-k

Affiche une colonne supplémentaire contenant la bibliothèque partagée. Cette option ne produit des résultats que si l'option --separate=library de opcontrol est spécifiée lors de la configuration de OProfile et si l'option --dump-gprof-file n'est pas utilisée avec celle-ci.

-t <format>

Affiche la sortie selon un ordre spécifique de colonnes. Cette option ne peut pas être utilisée avec -g.

Utilisez les lettres suivantes pour représenter les colonnes :

LettreDescription
vAdresse de mémoire virtuelle
sNombre d'échantillons
SNombre cumulé d'échantillons
pPourcentage d'échantillons relatif au nombre total d'échantillons pour l'exécutable
PPourcentage cumulé d'échantillons relatif au nombre total d'échantillons pour l'exécutable
qPourcentage d'échantillons relatif à tous les exécutables échantillonnés
QPourcentage cumulé d'échantillons relatif à tous les exécutables échantillonnés
nNom de symbole
lNom du fichier source et numéro de ligne, y compris le chemin complet
LNom de base du fichier de code source et numéro de ligne
iNom de l'exécutable, y compris le chemin complet
INom de base de l'exécutable
dDétails de l'échantillon
hAffiche les en-têtes de colonnes

Tableau 43-4. Lettres pour l'ordre de colonnes

--session <name>

Spécifie le chemin complet à la session ou à un répertoire associé au répertoire /var/lib/oprofile/samples/.

-p <path-list>

Spécifie une liste de chemins séparés par des virgules où les exécutables à analyser se trouvent.

43.5.3. Utilisation de op_to_source

L'outil op_to_source essaie de faire correspondre les échantillons pour certaines instructions à des lignes correspondantes dans le code source. Les fichiers résultants devraient avoir les échantillons pour les lignes sur la gauche. Un commentaire est également ajouté au début de chaque fonction affichant tous les échantillons pour la fonction.

Afin que cet utilitaire fonctionne, l'exécutable doit être compilé avec l'option -g de GCC. Par défaut, les paquetages de Red Hat Enterprise Linux ne sont pas compilés avec cette option.

La syntaxe générale pour op_to_source est la suivante :

op_to_source --source-dir <src-dir> <executable>

Le répertoire contenant le code source et l'exécutable à analyser doivent être spécifiés. Consultez la page de manuel relative à op_to_source afin d'obtenir une liste d'options de ligne de commande supplémentaires.

43.5.4. Utilisation de op_merge

Si plusieurs fichiers d'échantillons existent pour exactement le même exécutable ou la même bibliothèque, les fichiers d'échantillons peuvent être fusionnés pour faciliter l'analyse.

Par exemple, pour fusionner des fichiers pour la bibliothèque /usr/lib/library-1.2.3.so, exécutez la commande suivante en tant que super-utilisateur :

op_merge /usr/lib/library-1.2.3.so

Le fichier résultant est /var/lib/oprofile/samples/}usr}lib}library-1.2.3.so.

Pour limiter les échantillons fusionnés à un compteur donné, utilisez l'option -c suivie du numéro de compteur.