Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ prof(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

exit(2)

profil(2)

monitor(3C)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026