OProfile : profilez votre système

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
OProfile

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.png

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 :

Command 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 :

Command grep
> grep -i PROFIL /boot/config-`uname -r`
CONFIG_EVENT_PROFILE=yCONFIG_PROFILING=yCONFIG_OPROFILE=mCONFIG_OPROFILE_EVENT_MULTIPLEX=yCONFIG_HAVE_OPROFILE=y
# GCOV-based kernel profiling
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_FUNCTION_PROFILER=y

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 :

Command 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 :
Configuration File /etc/rc.local
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux

  • Si vous souhaitez profiler une application, alors exécutez ceci :
Command opcontrol
opcontrol --setup --no-vmlinux

Il est possible de réduire le scope du profiling. Voici un exemple :

Command 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 :

Command opcontrol
opcontrol --reset

Ensuite nous allons démarrer le profiling :

Command 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  :

Command opcontrol
opcontrol --dump

Puis nous allons arrêter le profiling :

Command opcontrol
opcontrol --stop

3.3 Voir les résultats

Pour toutes les applications :

Command opreport
opreport > ~/oprofile.data

Si on regarde le fichier oprofile.data, on y trouve ces informations intéressantes :

Configuration File ~/oprofile.data
CPU: CPU with timer interrupt, speed 863.195 MHz (estimated)
Profiling through timer interrupt
          TIMER:0|
  samples|      %|
------------------
  1698146 99.5540 no-vmlinux
     1178  0.0691 libc-2.12.so
      957  0.0561 libpixman-1.so.0.18.4
      839  0.0492 libxul.so
      665  0.0390 libpython2.6.so.1.0
      569  0.0334 libsqlite3.so
      323  0.0189 libglib-2.0.so.0.2200.5
...

  • 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 :

Command 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