.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2014 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SPROF 1 "1 novembre 2020" Linux "Manuel de l'utilisateur Linux" .SH NOM sprof \- Lire et afficher les données de profilage des objets partagés .SH SYNOPSIS .nf \fBsprof\fP [\fIoption\fP]... \fIchemin_objet_partagé\fP [\fIchemin_données_profil\fP] .fi .SH DESCRIPTION La commande \fBsprof\fP 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, \fBsprof\fP tentera de le déduire à partir du \fIsoname\fP de l'objet partagé, en recherchant dans le répertoire actuel un fichier avec le nom \fI.profile\fP. .SH OPTIONS Les options suivantes de la ligne de commande indiquent la sortie de profilage à produire\ : .TP \fB\-c\fP, \fB\-\-call\-pairs\fP 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é. .TP \fB\-p\fP, \fB\-\-flat\-profile\fP Générer un fichier de profilage plat de toutes les fonctions de l'objet examiné, avec le nombre d'appels et de tics. .TP \fB\-q\fP, \fB\-\-graph\fP Générer un graphe d'appels. .PP 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. .PP Les options supplémentaires suivantes sont disponibles en ligne de commande\ : .TP \fB\-?\fP, \fB\-\-help\fP Afficher un résumé des options et paramètres de la ligne de commande, puis terminer. .TP \fB\-\-usage\fP Afficher un court message d'aide et terminer. .TP \fB\-V\fP, \fB\-\-version\fP Afficher la version du programme et terminer. .SH CONFORMITÉ La commande \fBsprof\fP est une extension GNU non présente dans POSIX.1. .SH EXEMPLES L'exemple suivant illustre l'utilisation de \fBsprof\fP. Il consiste dans un programme principal qui appelle deux fonctions d'un objet partagé. D'abord, le code du programme principal\ : .PP .in +4n .EX $ \fBcat prog.c\fP #include void x1(void); void x2(void); int main(int argc, char *argv[]) { x1(); x2(); exit(EXIT_SUCCESS); } .EE .in .PP Les fonctions \fIx1\fP() et \fIx2\fP() sont définies dans le fichier source suivant, utilisé pour construire l'objet partagé\ : .PP .in +4n .EX $ \fBcat libdemo.c\fP #include void consumeCpu1(int lim) { for (int j = 0; j < lim; j++) getppid(); } void x1(void) { for (int j = 0; j < 100; j++) consumeCpu1(200000); } void consumeCpu2(int lim) { for (int j = 0; j < lim; j++) getppid(); } void x2(void) { for (int j = 0; j < 1000; j++) consumeCpu2(10000); } .EE .in .PP Maintenant, nous construisons l'objet partagé avec le nom réel \fIlibdemo.so.1.0.1\fP et le \fIsoname\fP \fIlibdemo.so.1\fP\ : .PP .in +4n .EX $ \fBcc \-g \-fPIC \-shared \-Wl,\-soname,libdemo.so.1 \e\fP \fB\-o libdemo.so.1.0.1 libdemo.c\fP .EE .in .PP Puis, nous construisons les liens symboliques pour le \fIsoname\fP de la bibliothèque et le nom de l'éditeur de liens de la bibliothèque\ : .PP .in +4n .EX $ \fBln \-sf libdemo.so.1.0.1 libdemo.so.1\fP $ \fBln \-sf libdemo.so.1 libdemo.so\fP .EE .in .PP Ensuite, nous compilons le programme principal en le liant à l'objet partagé, puis nous affichons les dépendances dynamiques du programme\ : .PP .in +4n .EX $ \fBcc \-g \-o prog prog.c \-L. \-ldemo\fP $ \fBldd prog\fP 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) .EE .in .PP Afin d'avoir les informations de profilage de l'objet partagé, nous positionnons la variable d'environnement \fBLD_PROFILE\fP sur le \fIsoname\fP de la bibliothèque\ : .PP .in +4n .EX $ \fBexport LD_PROFILE=libdemo.so.1\fP .EE .in .PP Puis, nous définissons la variable d'environnement \fBLD_PROFILE_OUTPUT\fP 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\ : .PP .in +4n .EX $ \fBexport LD_PROFILE_OUTPUT=$(pwd)/prof_data\fP $ \fBmkdir \-p $LD_PROFILE_OUTPUT\fP .EE .in .PP \fBLD_PROFILE\fP a pour conséquence que la sortie de profilage \fIs'ajoute\fP au fichier de sortie s'il existe, aussi nous nous assurons qu'il n'y a pas de données de profilage préexistantes\ : .PP .in +4n .EX $ \fBrm \-f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile\fP .EE .in .PP Puis, nous lançons le programme pour produire la sortie de profilage, écrite dans un fichier du répertoire indiqué dans \fBLD_PROFILE_OUTPUT\fP\ : .PP .in +4n .EX $ \fBLD_LIBRARY_PATH=. ./prog\fP $ \fBls prof_data\fP libdemo.so.1.profile .EE .in .PP Nous utilisons alors l'option \fBsprof \-p\fP pour générer un fichier de profilage plat avec le nombre d'appels et de tics\ : .PP .in +4n .EX $ \fBsprof \-p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP Profil plat : 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 .EE .in .PP L'option \fBsprof \-q\fP génère un graphe d'appel\ : .PP .in +4n .EX $ \fBsprof \-q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP 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] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .EE .in .PP Ci\-dessus et ci\-dessous, les chaînes "" représentent les identifiants à l'extérieur du fichier de l'objet examiné (dans cet exemple, il s'agit des instances de \fImain()\fP). .PP L'option \fBsprof \-c\fP génère une liste d’une paire d’appels et du nombre de leurs occurrences\ : .PP .in +4n .EX $ \fBsprof \-c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP x1 1 x1 consumeCpu1 100 x2 1 x2 consumeCpu2 1000 .EE .in .SH "VOIR AUSSI" \fBgprof\fP(1), \fBldd\fP(1), \fBld.so\fP(8) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Gérard Delafond , Alain Portal , Christophe Blaess , David Prévot , Denis Barbier , Florentin Duneau , François Micaux, Jean-Luc Coulon (f5ibh) , Jean-Philippe Guérard , Julien Cristau , Nicolas François , Simon Paillard , Stéphan Rafin , Thierry Vignaud , Thomas Blein , Thomas Huriaux et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .