OProfile : profilez votre système
Contents
1 Introduction
1.1 Profiling
OProfile est un outil servant à faire du profiling.
Le profiling est le processus qui consiste à examiner les données dans les différentes sources de données existantes (bases de données, fichiers,...) et à collecter des statistiques et des informations sur ces données. C'est ainsi très proche de l'analyse des données.
Le profiling a pour objectif :
- d'identifier les données réutilisables pour d'autres fins,
- d'avoir des mesures sur la qualité des données et sur la conformité par rapport aux standards de l'entreprise,
- d'évaluer les risques engendrés par l'intégration de ces données dans de nouvelles applications,
- d'évaluer si les métadonnées décrivent correctement les données sources,
- d'avoir une bonne compréhension de l'enjeu des données sources sur les projets à venir afin d'anticiper de mauvaises surprises. La découverte tardive de problèmes de données peut entrainer des dépassements de délais et de budget sur un projet (ex. avoir à modifier le format d'un code à des centaines d'endroits sur son projet mais aussi éventuellement sur des projets connexes en cours développement, avoir à reconstruire les référentiels associés, avoir à rediscuter et à revalider des documents contractuels,...).
- d'avoir une vue globale des données pour permettre la gestion des données de référence ou la gouvernance des données afin de renforcer la qualité des données.
1.2 OProfile
Oprofile est capable de profiler :
- Les interruptions
- Les applications et librairies partagées
- Les performances d'un système complet
- Les évènements à intervalle réguliers
Un des gros avantage est qu'il est peu consommateur de ressources.
Voici les inconvénients d'OProfile :
- Un des gros inconvénients d'OProfile est qu'il peut louper des captures
- Il faut installer beaucoup de packages de développement pour pouvoir s'en servir, ce qui n'est pas toujours faisable sur des environnements de production.
Pour mieux comprendre comment fonctionne OProfile, voici un schéma :
OProfile se veut le moins intrusif que possible. OProfile charge un drivers Kernel au boot qui va gérer les performances hardwares en se basant sur le comptage processeur. Le device /dev/oprofile va servir d'interface avec le user mode. Le démon va lire ce device et stocker les infos dans /var/lib/oprofile/samples.
2 Installation
2.1 Red Hat
Sur Red Hat, voici ce que nous allons installer :
yum |
yum install oprofile oprofile-gui |
Pour nous assurer qu'OProfile va pouvoir fonctionner, vérifions qu'il est bien présent dans le kernel :
Seules les 2 premières lignes surlignées sont essentielles, les autres peuvent êtres utiles mais pas indispensable.
Nous allons maintenant avoir besoin des outils debug du kernel :
yum |
yum install kernel-debuginfo |
Note : kernel-debug est différent de kernel-debuginfo
3 Utilisation
3.1 Setup
Avant d'utiliser OProfile, il faut définir quel type d'application vous souhaitez profiler.
- Si vous souhaitez profiler le kernel, nous allons devoir faire en sorte que nous démarrions au démarrage OProfile. Ajoutez donc cette ligne :
/etc/rc.local |
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux |
- Si vous souhaitez profiler une application, alors exécutez ceci :
opcontrol |
opcontrol --setup --no-vmlinux |
Il est possible de réduire le scope du profiling. Voici un exemple :
opcontrol |
opcontrol --list-events opcontrol --events=CPU_CLK_UNHALTED:400000 --event=DATA_MEM_REFS:10000 |
3.2 Test
Nous allons lancer un test. Tout d'abord, nous allons réinitialiser les données courantes :
opcontrol |
opcontrol --reset |
Ensuite nous allons démarrer le profiling :
opcontrol |
opcontrol --start |
Nous lançons maintenant les tests souhaités et les métriques d'OProfile seront périodiquement sauvegardées sous /var/lib/oprofile/samples/. Pour forcer ceci :
opcontrol |
opcontrol --dump |
Puis nous allons arrêter le profiling :
opcontrol |
opcontrol --stop |
3.3 Voir les résultats
Pour toutes les applications :
opreport |
opreport > ~/oprofile.data |
Si on regarde le fichier oprofile.data, on y trouve ces informations intéressantes :
- samples : On voit le nombre de fois que l'exécutable a été appelé
- % : La pourcentage de temps processeur passée pour l'exécution de chaque exécutable
Si vous souhaitez profiler qu'une seule application :
opreport |
opreport -l /bin/bash > ~/oprofile.data |
4 FAQ
4.1 Pourquoi le temps processeur est à 0% ?
C'est à cause de l'APIC qui n'est pas activé. Il faut être sûr que idle=pool dans grub. Vérifiez ensuite que c'est activé dans /proc/cmdline.
5 Ressources
Doc Red Hat : /usr/share/doc/oprofile-*/oprofile.html