c't Performance Monitor Utility ctpaul 2.1

Was ist das?
------------
ctpaul liest die maschinenspezifischen Register der CPU aus
und ermöglicht somit Performance Monitoring. Man erfährt, was
der Prozessor so alles treibt. Zum Beispiel, wieviele Gleitkomma-Befehle
er ausführt, wieviele Cache-Fehlzugriffe auftreten und wieviele
Sprünge er korrekt vorhergesagt hat.

Wie läuft es?
-------------
Nur bestimmte Prozessoren unterstützen Performance Monitoring, und
zwar in unterschiedlichen Formaten. ctpaul kommt nur mit folgenden
CPUs zurecht: Pentium, Pentium MMX, Cyrix/IBM 6x86MX. Auf allen
anderen Prozessoren läuft das Programm nicht.
Durch die intimen Systemzugriffe benötigt ctpaul einen Treiber-Unterbau.
Unter Windows 95 erledigt das der DIRECT95.VXD, unter NT DIRECTNT.SYS.
Eine Installation der Treiber im System ist nicht notwendig, da
ctpaul sie dynamisch lädt. Somit entfällt für ctpaul jegliche Installation
oder De-Installation. Das Ent-zippen des Archives in einen Ordner
beziehungsweise komplettes Löschen genügt.

Standard-Erklärung
------------------
ctpaul darf, wenn das Archiv nicht verändert wird, frei weitergegeben und
in Mailboxen, im Internet und auf CD-ROMs frei angeboten werden. Ein
Verkauf ist nicht zulässig. Die Urheberrechte liegen bei c't und beim Autor.

Wie geht das?
-------------
Wie Performance Monitoring funktioniert und welche Erkenntnisse man
daraus gewinnen kann, steht in einem c't-Artikel: "Gleitzeit" in 
Heft 9/97, Seite 256.

Was zählt ctpaul?
-----------------
Im Listenfeld links oben kann man wählen, was ctpaul zählen soll.
Dabei sind sinnvollerweise immer zwei Zähler zusammengefaßt (die
CPUs haben nämlich zwei Zählregister). Sobald man eine Funktion wählt,
beginnt ctpaul, die Meßwerte im Fenster anzuzeigen. Neben
Minima, Maxima und Mittelwerten der Einzelmeßwerte zeigt ctpaul
auch die Verhältnisse und Summen beziehungsweise deren Mittel-
und Extremwerte. Der Knopf "Reset stats" setzt die Statistik
zurück.
Das Verhältnis ist meist der interessanteste Wert. So zählt ctpaul
"fp instructions/instructions", also im ersten Zähler alle Gleitkomma-
Befehle und im zweiten alle Befehle. Das Verhältnis ergibt damit
den Gleitkomma-Anteil der laufenden Programme. Dieser interessante
Wert erklärt oft Performance-Einbußen des IBM/Cyrix-Prozessors
gegenüber dem Pentium. Software mit dauerhaft hohen Gleitkomma-
Anteilen im Bereich von 10 bis 20 Prozent laufen auf 6x86MX
meist langsamer als auf Pentium, weil letzterer die schnellere
FPU aufweist.
Insgesamt eignet sich Performance Monitoring auch sehr gut zum
Optimieren zeitkritischer Routinen.
Hier die Erläuterungen zu den einzelnen Zählmodi:

 "fp instructions/instructions"
 Gleitkomma-Anteil (siehe auch oben). Wichtige Anmerkung: manche
 FPU-Instruktionen (insbesondere trigonometrische Befehle) zählen
 mehrfach. Theoretisch kann der Gleitkomma-Anteil also über 100
 Prozent liegen. Trotzdem ist er ein gutes Maß für die FPU-Belastung
 eines Programms: mehrfache Zählung kommt nur bei sehr langwierigen
 Befehlen vor.
 Zu den Rekordhaltern in Dauer-FPU-Belastung gehört der Freeware-
 Raytracer POVRay. Die Windows-Version führt während der Berechnung
 eines Bildes dauerhaft etwa 20 Prozent FPU-Befehle aus.

 "branches/instructions"
 Anzahl bedingter und unbedingter Sprünge pro Befehl

 "cache miss/data read"
 Cache-Fehlzugriffe pro Daten-Lesezugriff (L1-Cache). Je höher
 diese Rate liegt, umso öfter muß die CPU Daten in den Cache holen.
 Bei vielen Anwendungen zeigt der 6x86MX hier, was ein großer Cache bringt.

 "cache miss/data write"
 Cache-Fehlzugriffe pro Daten-Schreibzugriff (L1-Cache). Bei
 Fehlzugriffen muß auf den L2-Cache oder den Hauptspeicher zugegriffen
 werden.
 
 "cache miss/code read"
 Cache-Fehlzugriff pro Code-Lesezugriff (L1-Cache). Programme mit
 niedriger cmcr-Rate sind "cache-gängig". Beispiel: Quake erzeugt
 weniger cmcr's als die Windows-95-Oberfläche im Wartezustand (Idle).

 "u/u+v instructions"
 In u-Pipeline abgearbeitete Befehle pro Befehl. Moderne x86-Prozessoren
 verfügen über zwei parallele Pipelines (u und v), so daß sie im
 Idealfall zwei Befehle gleichzeitig verarbeiten können. Je näher
 dieser Wert an 50 Prozent liegt, umso günstiger.

 "mmx instructions"
 Zählt die MMX-Befehle. Hier ist die Summe interessant, da Zähler 1
 die MMX-Befehle in der u-Pipeline zählt und Zähler 2 die in der
 v-Pipe (das ist systembedingt). Man kann gut erkennen, ob Software
 MMX verwendet und, falls ja, in welchen Funktionen. So gibt es
 Programme, die mit "MMX-Unterstützung" werben und keinen einzigen
 MMX-Befehl verwenden. Hier bedeutet "unterstützt" wohl eher
 "stürzt nicht ab bei Verwendung von". Übrigens benutzt DirectX
 MMX-Befehle, wenn die CPU das unterstützt.

 "mmx-fp-transitions/instructions"
 Bei MMX-Befehlen muß der Prozessor umständlich zwischen FPU-
 und MMX-Sektion umschalten (weil die MMX-Register ja eigentlich
 mit den FPU-Registern physikalisch identisch sind). Das dauert
 eine mittlere Ewigkeit. Je mehr dieser mmx-fp-Umschaltungen
 geschehen, umso ungünstiger.

 "BTB Hits/branches"
 Branch Target Buffer (Sprungzielzwischenspeicher) Treffer pro
 Sprung. Die CPU merkt sich Sprungziele. Wenn bei einem Sprung
 die Zieladresse im Buffer liegt, geht's schneller. Je höher
 dieser Wert ist, umso besser.

 "Data TLB miss/r or w"
 Translation Look-aside-Buffer Fehlzugriff pro Lese- oder Schreib-
 Zugriff.
 
 "Data cache line wb/r or w"
 Datencache-Line Write-Back pro Lese- oder Schreib-Zugriff.

 "Data misaligned/instr"
 Alignment-Probleme pro Befehl (Worte an ungeraden Adressen usw.)
 
 "Code TLB miss/read"
 Code-Lesezugriff Translation-Look-Aside-Buffer Fehlzugriff
 
 "Locked bus cycles/instr"
 Locked Bus-Zyklen pro Instruktion

Für weitere Informationen empfielt sich ein Blick in die Dokumentation
des Pentium (developer.intel.com) oder 6x86MX (www.chips.ibm.com)

Plot-Funktion
-------------
Der Übersicht halber kann ctpaul die letzten maximal 1000 Meßwerte
im Diagramm anzeigen, und zwar wahlweise einen der Zähler, die Summe oder
das Verhältnis. Ein Zurücksetzen des Plot-Speichers ermöglicht die
"Reset stats"-Taste. Die gerade im Speicher vorhandenen Daten kann
ctpaul in einer Textdatei speichern. Es entstehen zwei Spalten
(Nummer und Wert), die man beispielsweise in Excel importieren kann.

Info-Box
--------
Neben der Copyright-Information bietet die Info-Box Daten
über die CPU an, in Form von Frequenz und CPUID. Außerdem
erfährt man die Versionsnummer des Treibers, auf dem ctpaul
gerade aufsetzt.

Weitere Informationen und neue Versionen
----------------------------------------
ctpaul und die unterliegenden Treiber werden von c't weiterentwickelt.
Bei Fragen und Kommentaren empfiehlt sich eine Email an den Autor
(Uwe Post, up@ct.heise.de). Neue Versionen und weitere Programme
finden Sie auf dem c't-ftp-Server (http://www.heise.de/ct/ftp)
sowie auf der Homepage des Autors (http://www.heise.de/ct/Redaktion/up).

Viel Spaß mit Paul!



Uwe Post
Februar 1998
