sprof(1) General Commands Manual sprof(1) NOM sprof - Lire et afficher les donnees de profilage des objets partages SYNOPSIS sprof [option]... chemin_objet_partage [chemin_donnees_profil] DESCRIPTION La commande sprof affiche un resume de profilage de l'objet (la bibliotheque) partage indique comme premier parametre de la ligne de commande. Le resume du profilage est cree a partir de donnees de profilage precedemment generees dans le second parametre (optionnel) de la ligne de commande. Si le chemin vers les donnees de profilage est absent, sprof tentera de le deduire a partir du soname de l'objet partage, en recherchant dans le repertoire actuel un fichier avec le nom .profile. OPTIONS Les options suivantes de la ligne de commande indiquent la sortie de profilage a produire : --call-pairs -c Afficher une liste des paires de chemins d'appel pour les interfaces exportees par l'objet partage, ainsi que le nombre de fois que chaque chemin est utilise. --flat-profile -p Generer un fichier de profilage plat de toutes les fonctions de l'objet examine, avec le nombre d'appels et de tics. --graph -q Generer un graphe d'appels. Si aucune des options ci-dessus n'est specifiee, le comportement par defaut consiste a afficher un profilage plat et un graphe des appels. Les options supplementaires suivantes sont disponibles en ligne de commande : --help -? Afficher un resume des options et parametres 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 partage. D'abord, le code du programme principal : $ cat prog.c #include void x1(void); void x2(void); int main(int argc, char *argv[]) { x1(); x2(); exit(EXIT_SUCCESS); } Les fonctions x1() et x2() sont definies dans le fichier source suivant, utilise pour construire l'objet partage : $ cat libdemo.c #include 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 partage avec le nom reel 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 bibliotheque et le nom de l'editeur de liens de la bibliotheque : $ 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 a l'objet partage, puis nous affichons les dependances 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 partage, nous positionnons la variable d'environnement LD_PROFILE sur le soname de la bibliotheque : $ export LD_PROFILE=libdemo.so.1 Puis, nous definissons la variable d'environnement LD_PROFILE_OUTPUT avec le chemin du repertoire ou devrait etre ecrite la sortie de profilage et nous creons ce repertoire s'il n'existe pas encore : $ export LD_PROFILE_OUTPUT=$(pwd)/prof_data $ mkdir -p $LD_PROFILE_OUTPUT LD_PROFILE a pour consequence 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 donnees de profilage preexistantes : $ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile Puis, nous lancons le programme pour produire la sortie de profilage, ecrite dans un fichier du repertoire indique dans LD_PROFILE_OUTPUT : $ LD_LIBRARY_PATH=. ./prog $ ls prof_data libdemo.so.1.profile Nous utilisons alors l'option sprof -p pour generer 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 echantillon est compte 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 genere 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 [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 [3] 0.0 0.00 0.00 1 x2 [3] 0.00 0.00 1000/1000 consumeCpu2 [2] ----------------------------------------------- Ci-dessus et ci-dessous, les chaines "" representent les identifiants a l'exterieur du fichier de l'objet examine (dans cet exemple, il s'agit des instances de main()). L'option sprof -c genere 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 x1 1 x1 consumeCpu1 100 x2 1 x2 consumeCpu2 1000 VOIR AUSSI gprof(1), ldd(1), ld.so(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Gerard Delafond , Alain Portal , Christophe Blaess , David Prevot , Denis Barbier , Florentin Duneau , Francois Micaux, Jean-Luc Coulon (f5ibh) , Jean-Philippe Guerard , Julien Cristau , Nicolas Francois , Simon Paillard , Stephan Rafin , Thierry Vignaud , Thomas Blein , Thomas Huriaux et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 sprof(1)