sprof(1) General Commands Manual sprof(1) NUME sprof - citete i afieaza datele de profilare a obiectelor partajate SINOPSIS sprof [opiune]... ruta-obiect-partajat [ruta-date-profilare] DESCRIERE Comanda sprof afieaza un rezumat al profilarii pentru obiectul partajat (biblioteca partajata) specificat ca prim argument al liniei de comanda. Rezumatul de profilare este creat folosind datele de profilare generate anterior in cel de-al doilea argument (opional) din linia de comanda. In cazul in care se omite ruta datelor de profilare, atunci sprof va incerca sa le deduca folosind numele de fiu al obiectului partajat, cautand un fiier cu numele .profile in directorul curent. OPIUNI Urmatoarele opiuni ale liniei de comanda specifica rezultatul profilului care urmeaza sa fie produs: --call-pairs -c Afieaza o lista de perechi de rute de apelare pentru interfeele exportate de obiectul partajat, impreuna cu numarul de ori de cate ori este utilizata fiecare ruta. --flat-profile -p Genereaza un profil plat al tuturor funciilor din obiectul monitorizat, cu numaratori i ticuri. --graph -q Genereaza graficul de apeluri. Daca nu se specifica niciuna dintre opiunile de mai sus, atunci comportamentul implicit este de a afia un profil plat i un grafic al apelurilor. Sunt disponibile urmatoarele opiuni suplimentare pentru linia de comanda: --help -? Afieaza un rezumat al opiunilor disponibile in linia de comanda i iese. --usage Afieaza un scurt mesaj de utilizare i iese. --version -V Afieaza versiunea programului i iese. STANDARDE GNU. EXEMPLE Urmatorul exemplu demonstreaza utilizarea sprof. Exemplul consta intr-un program principal care apeleaza doua funcii dintr-un obiect partajat. Mai intai, codul programului principal: $ cat prog.c #include void x1(void); void x2(void); int main(int argc, char *argv[]) { x1(); x2(); exit(EXIT_SUCCESS); } Funciile x1() i x2() sunt definite in urmatorul fiier sursa care este utilizat pentru a construi obiectul partajat: $ 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); } Acum construim obiectul partajat cu numele real libdemo.so.1.1.0.1 i cu numele de fiu libdemo.so.1: $ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \ -o libdemo.so.1.0.1 libdemo.c Apoi, construim legaturi simbolice pentru numele fiului bibliotecii i pentru numele editorului de legaturi al bibliotecii: $ ln -sf libdemo.so.1.0.1 libdemo.so.1 $ ln -sf libdemo.so.1 libdemo.so In continuare, compilam programul principal, legandu-l de obiectul partajat i apoi enumeram dependenele dinamice ale programului: $ 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) Pentru a obine informaii de profilare pentru obiectul partajat, definim variabila de mediu LD_PROFILE cu numele de fiu al bibliotecii: $ export LD_PROFILE=libdemo.so.1 Apoi definim variabila de mediu LD_PROFILE_OUTPUT cu numele de ruta al directorului in care ar trebui sa fie scrisa ieirea profilului i cream acel director daca nu exista deja: $ export LD_PROFILE_OUTPUT=$(pwd)/prof_data $ mkdir -p $LD_PROFILE_OUTPUT LD_PROFILE determina ca ieirea de profilare sa fie adaugata la fiierul de ieire daca acesta exista deja, astfel incat sa ne asiguram ca nu exista date de profilare preexistente: $ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile Apoi executam programul pentru a produce rezultatul profilarii, care este scris intr-un fiier din directorul specificat in LD_PROFILE_OUTPUT: $ LD_LIBRARY_PATH=. ./prog $ ls prof_data libdemo.so.1.profile Apoi folosim opiunea sprof -p pentru a genera un profil plat cu numaratori i ticuri: $ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile Flat profile: Fiecare eantion conteaza ca 0,01 secunde. % 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 Opiunea sprof -q genereaza un grafic de apeluri: $ 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] ----------------------------------------------- Deasupra i dedesubt, irurile ,," reprezinta identificatori care se afla in afara obiectului profilat (in acest exemplu, acestea sunt instane ale main()). Opiunea sprof -c genereaza o lista de perechi de apeluri i numarul de apariii ale acestora: $ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile x1 1 x1 consumeCpu1 100 x2 1 x2 consumeCpu2 1000 CONSULTAI I gprof(1), ldd(1), ld.so(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 sprof(1)