Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ profil(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

times(2)

monitor(3C)

profil(2)                                                         profil(2)

NAME
     profil - Ausführungsprofil erstellen

SYNTAX
     #include <unistd.h>

     void profil(unsigned short *buff, sizet bufsiz, int offset,
                 unsigned scale);

BESCHREIBUNG
     profil() stellt Statistiken über den CPU-Verbrauch eines Programmes
     bereit, indem es die aufgewendete Zeit mitprotokolliert. profil
     erzeugt Statistiken, indem es ein Ausführungshistogramm für einen lau-
     fenden Prozeß erstellt. Das Histogramm ist für einen spezifischen Pro-
     grammbereich definiert, für den das Profil erstellt werden soll. Der
     definierte Bereich wird in mehrere Teile gleicher Größe aufgegelie-
     dert, von denen jeder einzelne einer Zählung im Histogramm entspricht.
     Mit jedem Prozeßwechsel wird der aktive Teil identifiziert und seine
     entsprechende Histogrammzählung erhöht. Diese Zählungen geben einen
     relativen Wert, wieviel Zeit in jedem Code-Teil verbraucht wird. Die
     für einen protokollierten Bereich resultierenden Histogrammzählungen
     können zur Identifizierung jener Funktionen benutzt werden, die einen
     unverhältnismäßig großen prozentualen Anteil an CPU-Zeit verbrauchen.

     buff ist ein Puffer mit bufsiz-Bytes, in welchem die Histogrammzählun-
     gen als eine Reihe von unsigned short int gespeichert sind.

     offset, scale und bufsiz geben den zu protokollierenden Bereich an.

     offset ist die Startadresse des zu profilierenden Bereichs.

     scale ist ein Kontraktionsfaktor, der anzeigt, um wieviel kleiner der
     Histogrammpuffer im Gegensatz zu dem zu profilierenden Bereich ist.
     scale wird also als eine 16-Bit-Festpunktzahl ohne Vorzeichen inter-
     pretiert, deren Dezimalpunkt links vor dem ersten Bit steht. Sein Wert
     ist das Reziproke der Anzahl an Bytes in einer Histogrammunterteilung.
     Da es zwei Bytes pro Histogrammzähler gibt, ist die tatsächliche
     Anzahl Bytes pro Histogrammunterteilung das Doppelte der angegebenen
     Skala.

     -  Der maximale Wert von scale, 0xffff (etwa 1), erzeugt Abbildungsun-
        terteilungen mit einer Länge von 2 Bytes für jeden Zähler.

     -  Der minimale Wert von scale (dafür wird protokolliert), 0x0002
        (1/32768), erzeugt Abbildungsunterteilungen mit einer Länge von
        65536 Bytes für jeden Zähler.









Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

profil(2)                                                         profil(2)

     -  Der Standardwert von scale (momentan benutzt von cc -qp), 0x4000,
        erzeugt Abbildungsunterteilungen mit einer Länge von 8 Bytes für
        jeden Zähler.

     Die Werte werden innerhalb des Betriebssystemkerns folgenderweise
     benutzt: Sobald der Prozeß für einen Prozeßwechsel unterbrochen ist,
     wird der Wert von offset vom aktuellen Wert des Programmzählers sub-
     trahiert und mit dem Rest von scale multipliziert, um ein Ergebnis
     abzuleiten. Dieses Ergebnis wird in der Histogrammreihe als Index
     benutzt, womit die zu inkrementierende Speicherzelle lokalisiert wird.
     Daher repräsentiert die Speicherzellenzählung die Anzahl der Zeit-
     punkte, in denen der Prozeß den Code in der mit dieser Speicherzelle
     verbundenen Unterteilung ausgeführt hat, als der Prozeß unterbrochen
     wurde.

     scale kann als (RATIO * 0200000) berechnet werden, wobei RATIO das
     erwünschte Zahlenverhältnis von bufsiz zur profilierten Bereichsgröße
     ist und einen Wert zwischen 0 und 1 hat. Je näher RATIO also 1 kommt,
     umso höher ist die Auflösung der Profil-Information.

     bufsiz kann als (sizeofregiontobeprofiled * RATIO) berechnet wer-
     den.

HINWEISE
     Die Profilierung wird abgeschaltet, wenn eine scale von 0 oder 1 gege-
     ben wird. Sie wird wirkungslos, wenn eine Größe bufsiz von 0 eingege-
     ben wird. Die Profilierung wird abgeschaltet, wenn ein exec(2) ausge-
     führt wird. Sie bleibt jedoch in einem Sohn- und Vaterprozeß nach
     einem fork(2) eingeschaltet. Die Profilierung wird abgeschaltet, wenn
     eine Änderung in buff einen Speicherfehler verursachen würde.

SIEHE AUCH
     times(2), monitor(3C).





















Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

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