Man page - sprof(1)

Packages contains this manual

Available languages:

en fr da ja ru ro de

Manual

sprof

NOM
SYNOPSIS
DESCRIPTION
OPTIONS
STANDARDS
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

sprof - Lire et afficher les données de profilage des objets partagés

SYNOPSIS

sprof [ option ]... chemin_objet_partagé [ chemin_données_profil ]

DESCRIPTION

La commande sprof affiche un rĂ©sumĂ© de profilage de l’objet (la bibliothĂšque) partagĂ© indiquĂ© comme premier paramĂštre de la ligne de commande. Le rĂ©sumĂ© du profilage est créé Ă  partir de donnĂ©es de profilage prĂ©cĂ©demment gĂ©nĂ©rĂ©es dans le second paramĂštre (optionnel) de la ligne de commande. Si le chemin vers les donnĂ©es de profilage est absent, sprof tentera de le dĂ©duire Ă  partir du soname de l’objet partagĂ©, en recherchant dans le rĂ©pertoire actuel un fichier avec le nom <soname>.profile .

OPTIONS

Les options suivantes de la ligne de commande indiquent la sortie de profilage à produire :
--call-pairs

-c

Afficher une liste des paires de chemins d’appel pour les interfaces exportĂ©es par l’objet partagĂ©, ainsi que le nombre de fois que chaque chemin est utilisĂ©.

--flat-profile

-p

GĂ©nĂ©rer un fichier de profilage plat de toutes les fonctions de l’objet examinĂ©, avec le nombre d’appels et de tics.

--graph

-q

GĂ©nĂ©rer un graphe d’appels.

Si aucune des options ci-dessus n’est spĂ©cifiĂ©e, le comportement par dĂ©faut consiste Ă  afficher un profilage plat et un graphe des appels.

Les options supplémentaires suivantes sont disponibles en ligne de commande :

--help

-?

Afficher un résumé des options et paramÚtres de la ligne de commande, puis terminer.

--usage

Afficher un court message d’aide et terminer.

--version

-V

Afficher la version du programme et terminer.

STANDARDS

GNU.

EXEMPLES

L’exemple suivant illustre l’utilisation de sprof . Il consiste dans un programme principal qui appelle deux fonctions d’un objet partagĂ©. D’abord, le code du programme principal :

$ cat prog.c
#include <stdlib.h>
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
exit(EXIT_SUCCESS);
}

Les fonctions x1 () et x2 () sont dĂ©finies dans le fichier source suivant, utilisĂ© pour construire l’objet partagé :

$ cat libdemo.c
#include <unistd.h>
void
consumeCpu1(int lim)
{
for (unsigned int j = 0; j < lim; j++)

getppid();

}
void
x1(void) {
for (unsigned int j = 0; j < 100; j++)

consumeCpu1(200000);

}
void
consumeCpu2(int lim)
{
for (unsigned int j = 0; j < lim; j++)

getppid();

}
void
x2(void)
{
for (unsigned int j = 0; j < 1000; j++)

consumeCpu2(10000);

}

Maintenant, nous construisons l’objet partagĂ© avec le nom rĂ©el libdemo.so.1.0.1 et le soname libdemo.so.1 :

$ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c

Puis, nous construisons les liens symboliques pour le soname de la bibliothĂšque et le nom de l’éditeur de liens de la bibliothĂšque :

$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so

Ensuite, nous compilons le programme principal en le liant Ă  l’objet partagĂ©, puis nous affichons les dĂ©pendances dynamiques du programme :

$ cc -g -o prog prog.c -L. -ldemo
$ ldd prog

linux-vdso.so.1 => (0x00007fff86d66000)

libdemo.so.1 => not found

libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)

/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)

Afin d’avoir les informations de profilage de l’objet partagĂ©, nous positionnons la variable d’environnement LD_PROFILE sur le soname de la bibliothĂšque :

$ export LD_PROFILE=libdemo.so.1

Puis, nous dĂ©finissons la variable d’environnement LD_PROFILE_OUTPUT avec le chemin du rĂ©pertoire oĂč devrait ĂȘtre Ă©crite la sortie de profilage et nous crĂ©ons ce rĂ©pertoire s’il n’existe pas encore :

$ export LD_PROFILE_OUTPUT=$(pwd)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT

LD_PROFILE a pour consĂ©quence que la sortie de profilage s’ajoute au fichier de sortie s’il existe, aussi nous nous assurons qu’il n’y a pas de donnĂ©es de profilage prĂ©existantes :

$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile

Puis, nous lançons le programme pour produire la sortie de profilage, écrite dans un fichier du répertoire indiqué dans LD_PROFILE_OUTPUT :

$ LD_LIBRARY_PATH=. ./prog
$ ls prof_data
libdemo.so.1.profile

Nous utilisons alors l’option sprof -p pour gĂ©nĂ©rer un fichier de profilage plat avec le nombre d’appels et de tics :

$ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Flat profile:
Chaque échantillon est compté toutes les 0.01 secondes.
% cumulative self self total
time seconds seconds calls us/call us/call name
60.00 0.06 0.06 100 600.00 consumeCpu1
40.00 0.10 0.04 1000 40.00 consumeCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2

L’option sprof -q gĂ©nĂšre un graphe d’appel :

$ sprof -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
index % time self children called name
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 consumeCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 consumeCpu2 [2]
-----------------------------------------------

Ci-dessus et ci-dessous, les chaĂźnes "<UNKNOWN>" reprĂ©sentent les identifiants Ă  l’extĂ©rieur du fichier de l’objet examinĂ© (dans cet exemple, il s’agit des instances de main() ).

L’option sprof -c gĂ©nĂšre une liste d’une paire d’appels et du nombre de leurs occurrences :

$ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
<UNKNOWN> x1 1
x1 consumeCpu1 100
<UNKNOWN> x2 1
x2 consumeCpu2 1000

VOIR AUSSI

gprof (1), ldd (1), ld.so (8)

TRADUCTION

La traduction française de cette page de manuel a été créée par Gérard Delafond <gerard@delafond.org>, Alain Portal <aportal@univ-montp2.fr>, Christophe Blaess <https://www.blaess.fr/christophe/>, David Prévot <david@tilapin.org>, Denis Barbier <barbier@debian.org>, Florentin Duneau <fduneau@gmail.com>, François Micaux, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Julien Cristau <jcristau@debian.org>, Nicolas François <nicolas.francois@centraliens.net>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Thomas Blein <tblein@tblein.eu>, Thomas Huriaux <thomas.huriaux@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .