Používám perf
z linux-2.6.36-gentoo-r4. Soubor /proc/sys/kernel/perf_event_paranoid
je nastavena na 0, takže by odtud neměly být žádné problémy.
Protože dlouhodobě běžící aplikace, kterou profiluji, někdy z nějakého neznámého důvodu spadne (nenašel jsem žádné informace o důvodu, proč přestala fungovat), obrátil jsem se na celosystémové profilování s událostmi výkonu.
Dotyčná aplikace provádí paralelní numerické výpočty pomocí MPI (Message Passing Interface) pro komunikaci. Před spuštěním aplikace (pomocí mpirun
) Začal jsem zaznamenávat data profilu celého systému na jednu z uzlů se spouští:
$ perf record -o perf.all.cycles,graph.data -g -e cycles -a &
Poté, co jsem si uvědomil, že aplikace spadla, zabil jsem perf
úkol.
Odešlo
$ du -sh perf.all.cycles,graph.data
14G perf.all.cycles,graph.data
14 GB dat. Bohužel perf report
nepodporuje -a
přepínač.
Jak mohu analyzovat data profilování celého systému z perf
nástroja ?
Stačí spustit perf report
neprodukuje užitečný výstup:
$ perf report -i perf.all.cycles,graph.data
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
To je celý výstup z 14GB profilových dat…
Přijatá odpověď:
Pokud distribuujete výpočty pomocí MPI, pak použití nástroje s podporou MPI by vám poskytlo rozumnější výsledky:s distribuovanou aplikací můžete mít problémy s nerovnováhou zatížení, kdy jeden proces MPI nečinně čeká na data z jiných procesů. . Pokud náhodou profilujete přesně tento proces MPI, váš výkonnostní profil bude úplně špatný.
Prvním krokem je tedy obvykle zjistit způsob komunikace a vyvažování zátěže vašeho programu a identifikovat vzorový vstup, který vám poskytne požadované pracovní zatížení (např. náročné na CPU na úrovni 0) Například mpiP je MPI profilovací nástroj, který dokáže vytvořit velmi kompletní zprávu o komunikačním vzoru, o tom, jak dlouho trvalo každé volání MPI atd.
Poté můžete spustit nástroj pro profilování kódu na jedné nebo více vybraných úrovních MPI. Každopádně pomocí perf
na jedné úrovni MPI pravděpodobně není dobrý nápad, protože její měření budou obsahovat také výkon kódu knihovny MPI, což pravděpodobně není to, co hledáte.