Gprof – Wikipedia

Gprof ist ein Tool zur Leistungsanalyse für Unix-Anwendungen. Es wurde eine Mischung aus Instrumentierung und Probenahme verwendet[1] und wurde als erweiterte Version des älteren “prof” -Tools erstellt. Im Gegensatz zu prof ist gprof in der Lage, das Sammeln und Drucken von Anrufdiagrammen zu beschränken.[1][2]

Geschichte[edit]

GPROF wurde ursprünglich von einer Gruppe unter der Leitung von Susan L. Graham an der University of California in Berkeley für Berkeley Unix (4.2BSD) geschrieben[3]). Eine weitere Implementierung wurde 1988 im Rahmen des GNU-Projekts für GNU Binutils von Jay Fenlason geschrieben.[4][5]

Implementierung[edit]

Der Instrumentierungscode wird beim Kompilieren automatisch in den Programmcode eingefügt (z. B. mithilfe von ‘-pg‘Option des gcc-Compilers), um Aufruferfunktionsdaten zu sammeln. Vor jedem Funktionsaufruf wird ein Aufruf der Monitorfunktion ‘mcount’ eingefügt.[6]

Die Abtastdaten werden in ‘gmon.out’ oder in ‘gespeichert.Progname.gmon ‘Datei kurz vor dem Beenden des Programms und kann mit der’gprof‘Kommandozeilen-Tool. Mehrere gmon-Dateien können mit ‘kombiniert werdengprof -s‘um Daten aus mehreren Läufen eines Programms zu sammeln.

Die GPROF-Ausgabe besteht aus zwei Teilen: dem flachen Profil und dem Anrufdiagramm. Das flache Profil gibt die Gesamtausführungszeit für jede Funktion und ihren Prozentsatz an der Gesamtlaufzeit an. Die Anzahl der Funktionsaufrufe wird ebenfalls gemeldet. Die Ausgabe wird nach Prozentsatz sortiert, wobei Hotspots ganz oben auf der Liste stehen.

Der zweite Teil der Ausgabe ist das Textaufrufdiagramm, das für jede Funktion anzeigt, wer sie aufgerufen hat (übergeordnet) und wen sie aufgerufen hat (untergeordnete Unterprogramme). Es gibt ein externes Tool namens gprof2dot, mit dem das Aufrufdiagramm von gprof in eine grafische Form konvertiert werden kann.[7]

Einschränkungen und Genauigkeit[edit]

Zur Laufzeit werden Zeitwerte durch statistische Abtastung erhalten. Die Abtastung erfolgt durch Prüfen des Programmzählers des Zielprogramms in regelmäßigen Abständen unter Verwendung von Betriebssystem-Interrupts (programmiert über Profil- (2) oder Setitimer- (2) -Syscalls). Die resultierenden Daten sind nicht genau, sondern eine statistische Annäherung. Die Fehlermenge beträgt normalerweise mehr als eine Abtastperiode. Wenn ein Wert das n-fache der Abtastperiode beträgt, ist der erwartete Fehler im Wert die Quadratwurzel von n Abtastperioden.[8][9] Eine typische Abtastperiode beträgt 0,01 Sekunden (10 Millisekunden) oder 0,001 Sekunden (1 ms) oder mit anderen Worten 100 oder 1000 Abtastungen pro Sekunde der CPU-Laufzeit.

In einigen Versionen, wie z. B. BSD, kann die Profilerstellung für gemeinsam genutzte Bibliotheken aufgrund von Einschränkungen der Profil Funktion, die als Bibliotheksfunktion oder als Systemaufruf implementiert werden kann. In glibc gab es eine analoge Nützlichkeit namens “sprof”, um dynamische Bibliotheken zu profilieren.[10]

Gprof kann die im Kernelmodus verbrachte Zeit nicht messen (Systemaufrufe, Warten auf CPU- oder E / A-Wartezeiten), und nur User-Space-Code wird profiliert.[9]

Das mcount Die Funktion ist in einigen Implementierungen möglicherweise nicht threadsicher, sodass Anwendungsprofile mit mehreren Threads möglicherweise falsch sind (normalerweise wird nur der Hauptthread der Anwendung profiliert).[11]

Der Instrumentierungsaufwand kann hoch sein (geschätzt auf 30%)[12]-260%[13]) für übergeordnete oder objektorientierte Programme. Gegenseitige Rekursion und nicht triviale Zyklen können mit dem gprof-Ansatz (kontextunabhängiges Aufrufdiagramm) nicht aufgelöst werden, da nur die Bogenüberquerung und nicht die vollständigen Aufrufketten aufgezeichnet werden.[13][14][15]

Gprof mit Call-Graph-Sammlung kann nur mit kompatiblen Compilern wie GCC, Clang / LLVM und einigen anderen verwendet werden.

Rezeption[edit]

Im Jahr 2004 erschien ein GPROF-Papier auf der Liste der 50 einflussreichsten PLDI-Papiere aller Zeiten als eines von vier Papieren des Jahres 1982.[16]

Laut Thiel[6] “GPROF … hat das Feld der Leistungsanalyse revolutioniert und wurde schnell zum bevorzugten Werkzeug für Entwickler auf der ganzen Welt. Das Tool hat immer noch eine große Anhängerschaft. Das Tool wird immer noch aktiv gewartet und bleibt in der modernen Welt relevant.”

Siehe auch[edit]

Verweise[edit]

  1. ^ ein b Susan L. Graham, Peter B. Kessler und Marshall K. Mckusick. gprof: ein 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
  2. ^ gprof — Call Graph // Ping Huang, Computer neu erfinden, MIT AI Lab
  3. ^ GESCHICHTE Der gprof-Profiler erschien in 4.2BSD
  4. ^ GNU gprof Handbuch: “GNU gprof wurde von Jay Fenlason geschrieben.”
  5. ^ GNU’s Bulletin, vol. 1 nr. 5 (1988): “Jay Fenlason, Mitarbeiter der Gprof Replacement Foundation, hat kürzlich einen Profiler für GNU C fertiggestellt, der mit” GPROF “von Berkeley Unix kompatibel ist.”
  6. ^ ein b Justin Thiel, Ein Überblick über Tools und Techniken zur Analyse der Softwareleistung: Von GProf zu DTrace (2006) “2.1.1 Überblick über GProf”
  7. ^ Gprof Call Graph Visualisierung // Kochbuch für wissenschaftliches Rechnen. Python-Kochbuch. École polytechnique fédérale de Lausanne (EPFL)
  8. ^ Statistische Ungenauigkeit von gprof Ausgabe Archiviert 2012-05-29 an der Wayback-Maschine
  9. ^ ein b gprof Profiling Tools auf BG / P-Systemen Archiviert 2013-12-21 an der Wayback Machine, “Probleme bei der Interpretation von Profildaten”, Argonne Leadership Computing Facility
  10. ^ http://www.hpl.hp.com/research/linux/qprof/
  11. ^ HOWTO: Verwenden von gprof mit Multithread-Anwendungen // Sam Hocevar, 13.12.2004
  12. ^ GNU gprof Profiler Archiviert 08.12.2015 an der Wayback-Maschine, Yu Kai Hong, Fakultät für Mathematik an der National Taiwan University; 19. Juli 2008
  13. ^ ein b Low-Overhead-Call-Path-Profiling von unverändertem, optimiertem Code, ACM 1-59593-167 / 8/06/2005.
  14. ^ JM Spivey Schnelle und genaue Profilerstellung für Anrufdiagramme Archiviert 2012-02-07 at the Wayback Machine, 3. September 2003 // Software – Archiv für Praxis und Erfahrung, Band 34, Ausgabe 3, März 2004, Seiten 249 – 264 Spivey, JM (2004). “Schnelle und genaue Profilerstellung für Anrufdiagramme”. Software: Praxis und Erfahrung. 34 (3): 249–264. CiteSeerX 10.1.1.62.1032. doi:10.1002 / spe.562.
  15. ^ Yossi Kreinin, Wie Profiler lügen: die Fälle von gprof und KCachegrind // 2. Februar 2013
  16. ^ 20 Jahre PLDI (1979–1999): Eine Auswahl, Kathryn S. McKinley, Herausgeberin

Weiterführende Literatur[edit]

  • Susan L. Graham, Peter B. Kessler und Marshall K. Mckusick. gprof: ein 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 und McKusick, MK (1983), Ein Ausführungsprofiler für modulare Programme. Software: Pract. Exper., 13: 671–685. doi: 10.1002 / spe.4380130803

Externe Links[edit]