Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Profilování programů v C Ivana Hutařová Vařeková.

Podobné prezentace


Prezentace na téma: "Profilování programů v C Ivana Hutařová Vařeková."— Transkript prezentace:

1 Profilování programů v C Ivana Hutařová Vařeková

2 2 Obsah 1. profilování programu 2. nástroje ● gprof ● callgrind/kcachegrind ● ostatní (sprof, oprofile,... ) 3. odkazy

3 3 Profilování programu I ● Profilování programu = “vyhledávání míst v programu, které jsou vhodná pro optimalizaci” ● “Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you have proven that's where the bottleneck is.” - Rob Pike

4 4 Profilování programu II ● We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.” ● - Donald Knut

5 5 Profilování programu - postup III Standartní kroky při profilování s použitím automatickýho nástrojů: (1) ( přeložení zdrojového kódu s nutnými volbami překladače - nutné jen u některých nástrojů) (2) vygenerování profilovacích dat (3) analýza profilovacích dat

6 6 Profilování programu – výstupy (IV) ● flat profile – průměrná doba běhu procedur

7 7 Profilování programu – výstupy (V) call-graph profile zobrazuje: kým byla funkce volána které funkce volala

8 8 Nástroje ● gprof - The GNU Profiler ● valgrind (callgrind*, kcachegrind) ● sprof ● OProfile...

9 9 gprof (I) součást balíku gprof (1) přeložení kódu: přidáme přepínač -pg gcc -pg program.c -o program (2) vygenerování profilovacích dat: (3)./program < vstup (4) zpracování dat: gprof./program

10 10 gprof - překlad (II) gcc -pg program.c -o program přepínač -pg znamená: ● překladač přidá na začátek každé funkce program.c příkaz, který uloží ● odkud byla funkce volána ● bude prováděno samplovaní (intervaly 10ms) ● program se přeruší (syscall profil) a je zjištěno, v které funkci se nachází ● na zavěr programu jsou vypsána získaná data

11 11 gprof - generování dat (III)./program < vstup ● při skončení běhu vytvoří v aktuálním adresáři soubor gmon.out ● pokud soubor existoval je přepsán ● gprof používá gmon.out jako vstup

12 12 gprof - flat profile (IV) %time - procento času strávené v funkci name self seconds - třídící kritérium - počet sekund strávených ve funkci name calls - počet volání dané funkce name

13 13 gprof – flat profile (V) časy běhu procedur jsou určovány samplováním = v případě krátkých běhů procedur (100ms) nepřesné

14 14 gprof – call graph (VI)

15 15 gprof – výhody/nevýhody (VII) - překlad programu s volbou -pg (nutné i u knihoven pokud je chceme zahrnout) - samplování není přesné (problémy u krátkých funkcí) - pozor na přepsání výstupu gmon.out + jednoduché ovládání + není výrazný nárust délky běhu programu (v radu procent)

16 16 valgrind a spol. (I) ● přeložení kódu: není potřeba nic nestandartního ● vygenerování profilovacích dat: valgrind --tool=callgrind program ● sledování běhu/průběžné výpisy dat callgrind_control ● zpracování dat: callgrind_annotate - textové kcachegrind – grafické (balík – kdesdk)

17 17 valgrind – generování dat (II) valgrind --tool=callgrind./program ● vypíše profilovací data do souboru: callgrind.out.$PID... ● počet instrukcí vykonaných funkcí, ● kdo/kolikrát funkci volal, koho/kolikrát funkce volala ● suffix výstupního programu je standartně $PID, ale může být unikátní per thread,...

18 18 valgrind – užitečná nastavení (III) --dump-instr=yes ● výstupní soubor bude obsahovat informace per instrukci (umožní výpis po řádku kódu) ● --simulate-cache=yes ● umožní generování informací o využití cache

19 19 valgrind - callgrind_controll (IV) callgrind_controll $pid|program vypíše status valgrindu spuštěného na procesu definovaneho jménem program nebo pidem -l,--longvypíše adresář kde je valgrind spuštěn -b vypíše aktuální backtrace

20 20 valgrind - callgrind_controll (V) callgrind_control -d xxx $PID|program ● provede dump aktuálních dat do souboru ● -z vynuluje countery

21 21 valgrind - callgrind_annotate (VI) callgrind_annotate callgrind.out.$pid ● vyhodnotí profilovací data programu který doběhl --tree=none|caller|calling|both ● přepíná mezi druhy výpisu --inclusive=yes|no ● přepíná inkludování podfunkcí --threshold=100 ● procento času běhu které nás zajímá

22 22 valgrind - callgrind_annotate (VII) $ callgrind_annotate –inclusive=yes callgrind.out.123

23 23 valgrind - callgrind_annotate (VIII) ● má problemy s detekcí rekurze v procedurách ● kcachegrind má tento problém vyřešen

24 24 valgrind - kcachegrind (IX)

25 25 valgrind - kcachegrind flat profile (X) Incl – délka behu včetně podfunkcí Self – délka běhu bez podfunkcí Called – počet volání funkce Function – jméno funkce

26 26 valgrind - kcachegrind call graph(XI)

27 27 valgrind – výhody/nevýhody (XII) - výrazné zpomalení doby běhu programu (10-ti nasobky) + není nutný překlad programu se speciálními nastaveními (-g pro “source code“ výstup) + je možné ladit programy které neskončili běh + variabilita nastavení profilování + variabilita nastavení způsobu výstupu + kcachegrind

28 28 další nástroje ● sprof ● součást glibc-common ● OProfile ● samostatný balík (http://oprofile.sourceforge.net/about/)http://oprofile.sourceforge.net/about/ ● skládá se z driveru pro kernel a daemona, který sbírá data a nástrojů pro vyhodnocení těchto dat ● provádí samplování ●...

29 29 ODKAZY (I) ● profiling obecně: ● ● ● gprof: ●

30 30 ODKAZY (II) ● valgrind/calgrind/kcachegrind ● ● ● ● /usr/share/doc/valgrind-3.4.1/valgrind_manual.pdf ● další profilery: ● ●


Stáhnout ppt "Profilování programů v C Ivana Hutařová Vařeková."

Podobné prezentace


Reklamy Google