prof(1) prof(1)
NAME
prof - Ausführungsprofil ausgeben
SYNTAX
prof [-t | c | a | n] [-o | x] [-g | l] [-z] [-h] [-s] [-m Meßdatei]
[-V] [Prog]
BESCHREIBUNG
Das Kommando prof (profile) interpretiert eine Datei mit Meßwerten,
die von der Funktion monitor angelegt wird. Die Symboltabelle in der
Objektdatei Prog (standardmäßig a.out) wird gelesen und in Beziehung
gesetzt zu einer entsprechenden Datei mit Meßwerten, standardmäßig
mon.out. Für jedes externe Textsymbol wird der prozentuale Wert der
Zeit, die für die Ausführung zwischen der Adresse dieses Symbols und
der Adresse des nächsten Symbols benötigt wurde, sowie die Häufigkeit,
mit der diese Funktion aufgerufen wurde, und die durchschnittliche
Dauer je Aufruf in Millisekunden ausgegeben.
OPTIONEN
Die sich gegenseitig ausschließenden Optionen -t, -c, -a und -n legen
die Sortierung der Ausgabezeilen fest:
-t Nach abnehmendem Prozentanteil der Gesamtzeit sortieren (Stan-
dard).
-c Nach abnehmender Anzahl der Aufrufe sortieren.
-a Nach zunehmender Symboladresse sortieren.
-n Lexikalisch nach Symbolnamen sortieren.
Die sich gegenseitig ausschließenden Optionen -o und -x legen die Form
der Ausgabe der Adresse jedes überwachten Symbols fest:
-o Jede Symboladresse in Oktalform zusammen mit dem Symbolnamen aus-
geben.
-x Jede Symboladresse in Hexadezimalform zusammen mit dem Symbolna-
men ausgeben.
Die sich gegenseitig ausschließenden Optionen -g und -l steuern die
Typen der Symbole, über die Bericht erstattet werden soll. Die Option
-l muß mit Vorsicht verwendet werden; sie schlägt die Zeit, die in
einer Funktion der Speicherklasse static verbracht wird, der im Spei-
cher vorhergehenden globalen Funktion zu, anstatt der Funktion der
Speicherklasse static im Bericht einen getrennten Eintrag zu geben.
Wenn alle Funktionen der Speicherklasse static an der richtigen Stelle
untergebracht sind, kann diese Option sehr sinnvoll sein (siehe Bei-
spiel). Wenn das aber nicht der Fall ist, kann der Bericht irreführend
werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
prof(1) prof(1)
Nehmen Sie an, daß A und B globale Funktionen sind und nur A die Funk-
tion S der Speicherklasse static aufruft. S im Quellcode unmittelbar
hinter A steht (das heißt, wenn S an der richtigen Stelle liegt), dann
kann mit der Option -l die Zeit, die in A verbracht wurde, einschließ-
lich der Zeit, die in S verbracht wurde, leicht bestimmt werden. Wenn
jedoch beide, A und B, S aufrufen und die Option -l verwendet wird,
wird der Bericht irreführend.
Die von S beim Aufruf von B verbrachte Zeit wird zu A mitgerechnet,
und dann scheint es so, als ob in A mehr Zeit verbracht wurde, als es
in Wirklichkeit der Fall war. In diesem Fall kann die Funktion S gar
nicht an einer richtigen Stelle untergebracht werden.
-g Lokale Funktionen der Speicherklasse static einschließen.
-l Lokale Funktionen der Speicherklasse static nicht einschließen
(Standard).
Die folgenden Optionen können in beliebiger Kombination verwendet wer-
den:
-z Alle Symbole im Meßbereich einschließen, selbst wenn diese nicht
aufgerufen werden und keine Zeit verbrauchen.
-h Die Überschrift unterdrücken, die normalerweise für die Aufstel-
lung ausgegeben wird. Dies ist nützlich, wenn die Liste weiter
verarbeitet werden soll.
-s Eine Zusammenfassung mehrerer Überwachungsparameter und -stati-
stiken auf die Standard-Fehlerausgabe ausgeben.
-m Meßdatei
Meßdatei anstelle von mon.out als Eingabedatei mit Meßwerten ver-
wenden.
-V Versionsinformationen von prof auf die Standard-Fehlerausgabe
ausgeben.
Ein Programm erstellt eine Datei mit Meßwerten, wenn es mit der Option
-p von cc gebunden wurde. Diese Option für das Kommando cc sorgt für
den Aufruf von monitor am Anfang und Ende der Ausführung. Mit dem Auf-
ruf von monitor am Ende der Ausführung wird das Schreiben der
Meßwert-Datei ausgelöst. Die Anzahl der Aufrufe einer Funktion wird
gezählt, wenn die Option -p bei der Übersetzung der Datei verwendet
wurde, die diese Funktion enthält.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
prof(1) prof(1)
Der Name der Datei, die von einem profilierten Programm erstellt wird,
wird von der Umgebungsvariablen PROFDIR gesteuert. Wenn PROFDIR nicht
gesetzt ist, wird mon.out in dem Dateiverzeichnis erstellt, das bei
Programmende aktuell ist. PROFDIR=Zeichenkette erstellt
Zeichenkette/pid.Progname, wobei Progname aus argv[0] durch Entfernen
eines eventuellen Pfadpräfixes entsteht und pid die Prozeßnummer des
Programms ist. Wenn PROFDIR gesetzt, aber Null ist, wird keine
Meßwert-Ausgabe erstellt.
Eine einzelne Funktion kann für die Profilierung mit Hilfe des Makros
MARK in Unterfunktionen unterteilt werden.
HINWEISE
Die für aufeinanderfolgende identische Abläufe gemeldeten Zeiten kön-
nen voneinander abweichen. Dies ist auf die variierenden Cache-
Trefferraten infolge der Mitbenutzung des Cache-Speichers durch andere
Prozesse zurückzuführen. Selbst wenn es den Anschein hat, daß ein Pro-
gramm den Rechner allein benutzt, können dennoch Hintergrund- oder
asynchrone Prozesse die Daten verwischen. In seltenen Fällen kann es
zu Konflikten zwischen dem Taktimpuls, der die Aufzeichnung des Pro-
grammzählers steuert, und Schleifen im Programm kommen, wodurch die
Messungen stark verzerrt werden. Aufrufe werden jedoch immer genau
gezählt.
Nur für Programme, die exit aufrufen, oder von main zurückkehren, wird
garantiert, daß sie eine Datei mit Meßwerten erzeugen, es sei denn am
Ende des Programms wird explizit die Funktion monitor aufgerufen.
Die Zeiten für Funktionen der Speicherklasse static werden dem vorher-
gehenden externen Text-Symbol zugeschrieben, wenn die Option -g nicht
verwendet wird. Jedoch werden die Aufrufe für die vorhergehende Funk-
tion dennoch richtig gezählt, d. h. die Aufrufe von Funktionen der
Speicherklasse static werden nicht zu den Aufrufen der externen Funk-
tion hinzugefügt.
Wenn mehr als eine der Optionen -t, -c, -a und -n angegeben wird, wird
die zuletzt angegebene Option verwendet, und der Benutzer wird
gewarnt.
Vorsicht ist angebracht, wenn Profile für dynamisch gebundene Pro-
gramme erstellt werden sollen. Dies ist grundsätzlich möglich, es müs-
sen aber die folgenden Einschränkungen beachtet werden.
Um überhaupt Ausgaben von prof zu bekommen, muß die Bibliothek libc
auch beim dynamischen Binden statisch an das Programm, von dem ein
Profil erstellt werden soll, gebunden werden. Dies kann man durch
"cc ... -Bstatic -lc -Bdynamic ..." erzwingen, ohne gleich das ganze
Programm statisch zu binden.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
prof(1) prof(1)
Prinzipiell können zur Zeit von gemeinsam benutzten Objekten keine
Profile mit prof erstellt werden. Wenn prof also mit einem dynamisch
gebundenen Programm verwendet wird, wird bei der Ausführung nur der
"main"-Teil des Abbilds ausgewertet. Das heißt, daß die ganze Zeit,
die außerhalb des "main"-Objekts, also in einem gemeinsam benutzten
Objekt verbracht wird, nicht bei der Meßwert-Ausgabe erscheint; die
für das Programm angegebene Gesamtzeit kann geringer sein als die
Zeit, die das Programm wirklich verbrauchte.
Da die Zeit, die in einem gemeinsam benutzten Objekt verbracht wird,
nicht mitgerechnet werden kann, sollten Sie so wenig gemeinsam
benutzte Objekte wie möglich verwenden, wenn die Meßwert-Erstellung
eines Programms mit prof erfolgen soll. Wenn möglich, sollte das Pro-
gramm vor der Profil-Erstellung statisch gebunden werden.
Betrachten wir einen Extremfall: Ein Programm mit Profileinstellung,
das dynamisch mit einer gemeinsam benutzten Bibliothek (z. B. libsok-
ket) gebunden wurde, verbringt 100 Zeiteinheiten in einer libsocket-
Routine, z. B. bind. Nehmen wir an, daß bind nur von der Routine B
aufgerufen wird und daß B nur eine Zeiteinheit benötigt. Nehmen wir
weiter an, daß Routine A 10 Zeiteinheiten braucht, mehr als alle ande-
ren Routinen in dem profilierten "main"-Teil des Abbilds. In diesem
Fall wird prof zu dem Schluß gelangen, daß die meiste Zeit in A und
gar keine Zeit in B verbracht wird. Daraus ist es dann fast unmöglich,
festzustellen, daß die größte Verbesserung in Routine B und nicht in
Routine A erreicht werden könnte. In diesem Fall ist der Gebrauch des
Profilers so gut wie wertlos. Wenn Sie das Profil eines Programmes
erstellen wollen, dann sollten Sie im eigenen Interesse statt dyna-
misch gebundener Objekte Archive verwenden.
DATEIEN
mon.out für Ausführungsprofil
a.out Standard-Objektdatei für die Symboltabelle
SIEHE AUCH
cc(1), exit(2), profil(2), monitor(3C).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98