Gprof
Gprof är ett prestandaanalysverktyg för Unix -applikationer. Den använde en hybrid av instrumentering och sampling och skapades som en utökad version av det äldre "proff"-verktyget. Till skillnad från prof kan gprof samla in och skriva ut begränsad samtalsgraf .
Historia
GPROF skrevs ursprungligen av en grupp ledd av Susan L. Graham vid University of California, Berkeley för Berkeley Unix ( 4.2BSD ). En annan implementering skrevs som en del av GNU-projektet för GNU Binutils 1988 av Jay Fenlason.
Genomförande
Instrumenteringskoden infogas automatiskt i programkoden under kompileringen (till exempel genom att använda alternativet ' -pg
' i gcc- kompilatorn), för att samla in anropsfunktionsdata. Ett anrop till monitorfunktionen 'mcount' infogas före varje funktionsanrop.
Samplingsdata sparas i 'gmon.out' eller i filen ' progname .gmon' precis innan programmet avslutas, och kan analyseras med kommandoradsverktyget ' gprof '.
Flera gmon-filer kan kombineras med ' gprof -s
' för att samla data från flera körningar av ett program.
GPROF-utgången består av två delar: den platta profilen och anropsgrafen. Den platta profilen anger den totala exekveringstiden som spenderas i varje funktion och dess procentandel av den totala körtiden. Antalet funktionsanrop rapporteras också. Utdata sorteras efter procent, med hot spots överst på listan.
Den andra delen av utdata är den textuella anropsgrafen, som visar för varje funktion vem som anropade den (förälder) och vem den anropade (underrutiner). Det finns ett externt verktyg som heter gprof2dot som kan konvertera samtalsgrafen från gprof till grafisk form.
Begränsningar och noggrannhet
Vid körning erhålls tidsvärden genom statistisk sampling. Sampling görs genom att sondera målprogrammets programräknare med jämna mellanrum med användning av operativsystemavbrott (programmeras via profil(2) eller setitimer(2) syscalls ) . De resulterande uppgifterna är inte exakta, snarare en statistisk uppskattning. Mängden fel är vanligtvis mer än en samplingsperiod. Om ett värde är n gånger samplingsperioden är det förväntade felet i värdet kvadratroten ur n samplingsperioder. En typisk samplingsperiod är 0,01 sekund (10 millisekunder) eller 0,001 sekund (1 ms) eller med andra ord 100 eller 1000 sampel per sekund av CPU-körtid.
I vissa versioner, såsom BSD, kan profilering av delade bibliotek begränsas på grund av begränsningar av profilfunktionen, som kan implementeras som biblioteksfunktion eller som systemanrop. Det fanns liknande verktyg i glibc som kallas "sprof" för att profilera dynamiska bibliotek.
Gprof kan inte mäta tid som spenderas i kärnläge (syscalls, väntar på CPU eller I/O-väntar), och endast användarutrymmeskod är profilerad.
Funktionen mcount kanske inte är trådsäker i vissa implementeringar, så flertrådade programprofiler kan vara felaktiga (vanligtvis profilerar den bara programmets huvudtråd).
Instrumentationsoverhead kan vara hög (uppskattad till 30%-260%) för högre ordning eller objektorienterade program. Ömsesidig rekursion och icke-triviala cykler går inte att lösa med gprof-metoden (kontextokänslig anropsgraf), eftersom den bara registrerar bågkorsning, inte hela anropskedjor.
Gprof med anropsgrafinsamling kan endast användas med kompatibla kompilatorer, som GCC, clang/LLVM och några andra.
Reception
2004 dök en GPROF-tidning upp på listan över de 50 mest inflytelserika PLDI- tidningarna genom tiderna som en av fyra tidningar från 1982 år.
Enligt Thiel, "GPROF ... revolutionerade prestandaanalysområdet och blev snabbt det bästa verktyget för utvecklare runt om i världen ... verktyget har fortfarande en stor efterföljare ... verktyget underhålls fortfarande aktivt och är fortfarande relevant i modern värld."
Se även
Vidare läsning
- Susan L. Graham, Peter B. Kessler och Marshall K. Mckusick. gprof: en Call Graph Execution Profiler // Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, nr 6, s. 120–126; doi: 10.1145/800230.806987
- Graham, SL, Kessler, PB och McKusick, MK (1983), En exekveringsprofil för modulära program. Mjukvara: Öva. Exper., 13: 671–685. doi: 10.1002/spe.4380130803
externa länkar
- Vinayak Hegde Programmers verktygslåda: Profileringsprogram med gprof , Linux Gazette, 2004
- Martyn Honeyford, Snabba upp din kod med GNU-profileraren. Rikta in de delar av dina applikationer som tar mest tid , 3 april 2006 // IBM DeveloperWorks, Technical library
- GNU Gprof dokumentation