Cours informatique gestion de mémoire, tutoriel & guide de travaux pratiques en pdf.
Quelques outils
Purify (Rational / IBM) : le plus connu !
DevPartner (compuWare) (ex-BoundChecker)
Insure++ (ParaSoft)
et en GPL :
memprof,
dmalloc,
mpatrol,
Boehm Collector,
…
Les différents outils sont souvent complémentaires !
PROFILER
Objectifs:
Analyser les performances et localiser les fonctions consommant le plus de CPU
déterminer la fréquence des appels et permettre une classification en fonction du contexte (à partir de quelle fonction la fonction étudiée a-t-elle été appelée ?).
Un outil de profiling ne remplace pas une bonne conception et une implémentation soignée, il les complète.
outils …
Nous étudierons ici un outil assez simple et généraliste:
gprof de GNU
puis deux variantes à usage spécifique :
time
strace
gprof
gprof est compatible avec gcc.
Utilisation : gprof se déroule en trois phases:
compilation spéciale pour ajouter automatiquement au code des instructions de profiling.
Il faut ajouter les options -pg à la compilation ET à l’édition de liens.
exécution du programme : cela crée un fichier binaire de données, par défaut gmon.out
exécuter gprof pour exploiter les données collectées à l’exécution et obtenir un rapport
gprof
$ gcc -ansi -Wall -c -pg test.c
$ gcc -pg -o test test.o
$ ./test …
Génère gmon.out dans le répertoire courant
$ gprof ./test
….
gprof : données obtenues
$ gprof mon_executable
(avec gmon.out présent dans le répertoire courant)
Flat profile
liste des fonctions avec le nombre d’appels et le temps total passé dedans, en incluant ou pas les fonctions appelées.
Permet de repérer très rapidement les quelques fonctions prenant beaucoup de temps.
Call graph
Beaucoup plus de précisions sur le contexte :
Contributions par appelant / appelée
Pour chaque fonction, on a :
les fonctions appelantes (les lignes au-dessus de la ligne de référence commençant par [i])
proportion du temps pris par la fonction et par ses « enfants » (l’appel des sous-fonctions)
nombre d’appels de la fonction, en indiquant aussi les appels récursifs
pour chaque appel d’ « enfant », contribution de la fonction au nombre total d’appel de cet « enfant ».
gprof : Statistiques …
les nombres d’appels sont comptabilisés => donc précis et répétables
Les temps sont échantillonnés (défaut 10 ms), donc sujet à des erreur statistiques
Importance d’avoir une exécution assez longue
Possibilité de sommer des « run » …
Option -s ou –sum
Autres outils…
Commerciaux
Quantify (rational => IBM) : Unix/Windows
DevPartner (compuWare)
time
L’outil le plus simple !
donne le temps d’exécution d’une commande:
le temps écoulé
le temps CPU en mode utilisateur
le temps CPU en mode noyau (exécution d’appels systèmes)
la version GNU rajoute, si possible, des informationssur l’utilisation de la mémoire (swap) et des I/O.