Chapitre 23. OProfile

OProfile est un outil de surveillance des performances système globales à faible charge. Il utilise le matériel de surveillance des performances sur le processeur pour récupérer des informations sur le noyau et les exécutables se trouvant sur le système, comme lorsque la mémoire est référencée, le nombre de requêtes de cache L2, et le nombre d'interruptions de matériel reçues. Sur un système Red Hat Enterprise Linux, le paquet oprofile doit être installé pour utiliser cet outil.
De nombreux processeurs incluent un matériel de surveillance des performances dédié. Ce matériel rend la détection de certains événements possible (comme lorsque les données requises ne se trouvent pas dans le cache). Le matériel prend normalement la forme d'un ou de plusieurs compteurs qui sont incrémentés chaque fois qu'un événement se produit. Lorsque la valeur du compteur est incrémentée, une interruption est générée, ce qui rend possible la surveillance des détails (et donc, la charge) donnés par le contrôle de la performance.
OProfile utilise ce matériel (ou un substitut basé compteur dans les cas où aucun matériel de surveillance des performances n'est présent) pour collecter des échantillons (samples) de données connexes aux performances chaque fois qu'un compteur génère une interruption. Ces échantillons sont périodiquement écrits sur le disque. Ultérieurement, les données contenues dans ces échantillons pourront être utilisées pour générer des rapports sur les performances au niveau du système et au niveau de l'application.
Limitations lors de l'utilisation d'OProfile :
  • Utilisation des bibliothèques partagées — les échantillons de code dans les bibliothèques partagées ne sont pas attribués à l'application en particulier, à moins que l'option --separate=library soit utilisée.
  • Les échantillons de surveillance des performances sont inexacts — lorsque la surveillance des performances déclenche un échantillon, la gestion de l'interruption n'est pas précise comme une division par une exception zéro. À cause de l'exécution désordonnée des instructions par le processeur, l'échantillon peut être enregistré sur une instruction aux alentours.
  • opreport n'associe pas les échantillons pour les fonctions « inline » correctementopreport utilise un simple mécanisme de gamme d'adresse pour déterminer dans quelle fonction se trouve une adresse. Les échantillons de fonctions « Inline » ne sont pas attribués à la fonction « inline » mais plutôt à la fonction dans laquelle la fonction « inline » a été insérée.
  • OProfile accumule les données de multiples exécutions — OProfile est un profileur global et s'attend à ce que les processus démarrent et s'arrêtent à plusieurs reprises. Ainsi, les échantillons des multiples exécutions s'accumulent. Veuillez utiliser la commande opcontrol --reset pour supprimer les échantillons des exécutions précédentes.
  • Les compteurs de performance du matériel ne fonctionnent pas sur les machines virtuelles invitées — comme les compteurs de performance du matériel ne sont pas disponibles sur les systèmes virtuels, vous devrez utiliser le mode timer. Saisissez la commande opcontrol --deinit, puis exécutez modprobe oprofile timer=1 pour activer le mode timer.
  • Problèmes de performances non limités au CPU — OProfile est conçu pour trouver des problèmes liés aux processus limités par les CPU. OProfile n'identifie pas les processus endormis car ils attendent qu'un verrouillage ou qu'un autre type d'événement se produise (par exemple qu'un périphérique d'E/S termine une opération).

23.1. Aperçu des outils

La Tableau 23.1, « Commandes OProfile » offre un bref aperçu des outils les plus couramment utilisés avec le paquet oprofile.

Tableau 23.1. Commandes OProfile

CommandeDescription
ophelp
Affiche les événements disponibles pour le processeur du système avec une brève description de chacun d'entre eux.
opimport
Convertit les fichiers de la base de données d'un format binaire étranger au format natif du système. Utilisez cette option uniquement lors de l'analyse d'un échantillon de base de données provenant d'une architecture différente.
opannotateCrée une source annotée pour un exécutable si l'application a été compilée avec des symboles de débogage. Veuillez consulter la Section 23.6.4, « Utiliser opannotate » pour voir des détails.
opcontrol
Configure les données à collecter. Veuillez consulter la Section 23.3, « Configurer OProfile en utilisant le mode hérité » pour voir des détails.
operf
Outil recommandé à la place de opcontrol pour le profilage. Veuillez consulter la Section 23.2, « Utiliser operf » pour voir des détails.
Pour voir les différences entre operf et opcontrol, veuillez consulter la Section 23.1.1, « operf vs. opcontrol ».
opreport
Récupère les données du profil. Veuillez consulter la Section 23.6.1, « Utiliser opreport » pour voir des détails.
oprofiled
S'exécute en tant que démon pour écrire des données échantillon sur le disque de manière périodique.

23.1.1. operf vs. opcontrol

Il existe deux méthodes mutuellement exclusives pour récupérer des données de profilage avec OProfile. Vous pouvez utiliser la méthode la plus récente, qui est également préférable, operf, ou l'outil opcontrol.

operf

Mode recommandé pour le profilage. L'outil operf utilise le sous-système « Linux Performance Events Subsystem », et ne requiert ainsi pas le pilote du noyau oprofile. L'outil operf vous permet de cibler votre profilage de manière plus précise, en tant que processus unique ou global, il permet également à OProfile de mieux co-exister avec les autres outils utilisant le matériel de surveillance des performances sur votre système. Contrairement à opcontrol, celui-ci peut être utilisé sans les privilèges d'utilisateur root. Cependant, operf est également capable d'effectuer des opérations globales en utilisant l'option --system-wide, lorsque les privilèges root sont requis.
Avec operf, aucun paramétrage initial n'est nécessaire. Vous pouvez invoquer operf avec des options de ligne de commande pour spécifier vos paramètres de profilage. Après cela, vous pourrez exécuter les outils OProfile post-traitement comme décrit dans la Section 23.6, « Analyser les données ». Veuillez consulter la Section 23.2, « Utiliser operf » pour obtenir davantage d'informations.

opcontrol

Ce mode comprend le script shell opcontrol, le démon oprofiled, et plusieurs outils post-traitement. La commande opcontrol est utilisée pour configurer, lancer et arrêter une session de profilage. Un pilote de noyau OProfile, habituellement créé en tant que module de noyau, est utilisé pour collecter les échantillons, qui sont ensuite enregistrés dans des fichiers d'échantillon par oprofiled. Vous pouvez utiliser le mode hérité uniquement si vous possédez les privilèges root. Dans certains cas, comme lorsque vous devez échantillonner des zones sur lesquelles IRQ (« Interrupt Request ») est désactivé, cette alternative est la meilleure.
Avant qu'OProfile puisse être exécuté en mode hérité, il doit être configuré comme décrit dans la Section 23.3, « Configurer OProfile en utilisant le mode hérité ». Ces paramètres sont ensuite appliqués lors du démarrage d'OProfile (Section 23.4, « Lancer et arrêter OProfile en utilisant le mode hérité »).