monitor(3C) monitor(3C)
NAME
monitor - Ausführungsprofil vorbereiten
SYNTAX
#include <mon.h>
void monitor(int (*lowpc)(), int (*highpc)(), WORD *buffer,
sizet bufsize, sizet nfunc);
BESCHREIBUNG
monitor() ist eine Schnittstelle zu profil(). monitor() wird automa-
tisch für jedes Programm, welches durch cc -p erstellt wurde, mit
Standard-Parametern aufgerufen. monitor() muß nur explizit aufgerufen
werden, wenn zusätzliche Informationen zum Ausführungsprofil gewünscht
werden.
monitor() wird mindestens am Anfang und am Ende eines Programms aufge-
rufen. Der erste Aufruf von monitor() startet die Aufzeichnung zweier
Arten von Informationen bezüglich des Ausführungsprofils: die Vertei-
lung der Laufzeiten und die Anzahl der Aufrufe von Funktionen. Die
Daten zur Verteilung der Laufzeiten werden von profil() erzeugt, die
Zählung der Funktionsaufrufe durch den Programmcode, der durch die
Compileroption -p den Objektdateien zur Verfügung gestellt wurde. Der
letzte Aufruf von monitor() schreibt die gesammelten Daten in die Aus-
gabedatei mon.out.
lowpc und highpc sind die Anfangs- und Endadressen des Bereichs, der
gemessen werden soll.
buffer wird von monitor() dazu verwendet, das von profil() erstellte
Histogramm und die Zählung der Funktionsaufrufe zu speichern.
bufsize gibt die Anzahl von Feldelementen in buffer an.
nfunc bezeichnet die Anzahl der Feldelemente in buffer, die für die
Zählung von Funktionsaufrufen reserviert wurden. Weitere Feldelemente
werden automatisch zugewiesen, sobald sie benötigt werden.
bufsize sollte nach folgender Formel berechnet sein (C-Notation):
sizeofbuffer =
sizeof(struct hdr) +
nfunc * sizeof(struct cnt) +
((highpc-lowpc)/BARSIZE) * sizeof(WORD) +
sizeof(WORD) - 1 ;
bufsize = (sizeofbuffer / sizeof(WORD)) ;
Dabei gilt:
- lowpc, highpc, nfunc haben dieselben Werte wie die Argumente für
monitor();
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
monitor(3C) monitor(3C)
- BARSIZE ist die Anzahl der Programmbytes, die jedem Balken des
Histogramms oder jedem Feld des profil()-Puffers zugeordnet sind.
- Die Stukturen hdr und cnt und der Typ WORD sind in der Include-
Datei mon.h definiert.
monitor() wird standardmäßig folgendermaßen aufgerufen (C-
Notation):
monitor (&eprol, &etext, wbuf, wbufsz, 600);
Dabei ist:
- eprol der Anfang des Benutzerprogramms, das mit der Option -p
übersetzt wurde
- etext das Ende des Benutzerprogramms;
- wbuf ein Feld von WORD mit wbufsz Elementen;
- wbufsz wird mit der oben gezeigten Formel für bufsize berechnet,
wobei für BARSIZE der Wert 8 eingesetzt wird;
- 600 ist die Anzahl der Felder zum Zählen der Funktionsaufrufe,
die in buffer reserviert wurden.
Mit diesen Parametereinstellungen kann das Histogramm zur Laufzeit-
verteilung unter Verwendung von profil() für das gesamte Programm
berechnet werden. Zu Beginn werden 600 Einträge in buffer reser-
viert, und es werden genügend Histogrammeinträge zur Verfügung
gestellt, um signifikante Ergebnisse bezüglich der Laufzeitvertei-
lung zu erzeugen. (Weitere Informationen zu dem Einfluß von bufsize
auf die Berechnung der Laufzeitverteilung finden Sie unter pro-
fil(2).)
Sie können die Messung stoppen und die Ergebnisse in eine Datei
schreiben, wenn Sie die folgende Programmzeile verwenden:
monitor((int (*)())0, (int (*)())0, (WORD *)0, 0, 0);
HINWEISE
Zusätzliche Aufrufe von monitor() nach dem Aufruf von main() und vor
exit() fügen weitere Felder zum Zählen der Funktionsaufrufe hinzu.
Solche Aufrufe setzen jedoch auch die Berechnung des profil-
Histogramms zurück.
Der Name der von monitor() erzeugten Datei wird durch die Umgebungsva-
riable PROFDIR gesteuert. Wenn PROFDIR nicht existiert, wird die Datei
mon.out im aktuellen Verzeichnis angelegt. Wenn PROFDIR existiert,
aber keinen Wert trägt, dann unternimmt monitor() keine Messungen und
erzeugt keine Ergebnisdatei. Wenn PROFDIR auf dirname gesetzt ist und
monitor() automatisch aufgrund der Übersetzung mit der Option -p
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
monitor(3C) monitor(3C)
aufgerufen wird, so heißt die erzeugte Datei dirname/pid.progname.
Dabei ist progname der Name des Programms.
DATEIEN
mon.out
SIEHE AUCH
cc(1), profil(2).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98