image: tprof1.gif


german/tprof.tex
Version 1.2
Dokument 1.2

30/10/1996

Inhaltsverzeichnis

Einführung

Tcl Profiler ist ein Werkzeug zur Analyse eines Tcl-Scripts. Es dient zur Identifizierung von zeitintensiven Routinen, kann aber auch dazu benutzt werden, um einen Überblick über die Aufrufhierarchie eines Programmes zu bekommen.

Der größte Nachteil einer Skript-Sprache wie Tcl ist die niedrige Ausführungsgeschwindikgeit. Gleich wie bei anderen Sprachen genügt es oftmals, diejenigen Plätze zu identifiziern, an denen die meisten CPU-Zyklen verbraucht werden und sie neu zu schreiben (beispielsweise in C). So kann man die Vorteile einer interpretierten Sprache während der Entwicklung nutzen und vor der Fertigstellung der Applikation zeitkritische Routinen durch entsprechende schnellere Pendants ersetzen.

Um Engpäße in Tcl entdecken zu können braucht man zwei Dinge:

Um Meßwerte zu erlangen muß der Code instrumentiert werden, sodaß für jede Prozedur Ausführungszeiten aufgezeichnet werden. Weiters sollte auch die Anzahl der Aufrufe und die aufrufende Routine vermerkt werden.

Die Analyse der Rohdaten sollte es dem Benutzer erlauben, rasch einen Überblick über Daten zu erlangen um dann ein interaktives Erforschen der Engpäße zu ermöglichen.

Die wichtigsten Anforderungen an einen Tcl-Profiler sind:

Übersicht

Der Tcl-Profiler versucht die oben angeführten Anforderungen zu implementieren. Er ist in zwei Teile gespalten - den Datenaufzeichnungsteil und das Datenanzeige-Programm.

Um Daten eines Tcl-Scripts zu erlangen, wird das profile Kommando aus dem TclX-Paket benutzt. Details über dieses Kommando findet man im nächsten Kapitel zusammen mit einer Beschreibung des Formates des Datenfiles.

Die Analyse des Datenfiles ist komplett von der Aufzeichnung getrennt (es kann also auch eine andere Plattform benutzt werden, das Datenfile ist neutral). Tprof ist ein Programm zur Untersuchung von Meßwerten die durch die tprof-Prozedur im ersten Schritt erzeugt wurden.

Tprof kann die Daten in einem der folgenden Formate anzeigen:

Tabelle

Diese Ansicht ist lediglich eine formatierte Liste aller aufgezeichneten Daten. Sie dient der genaueren Überprüfung der Ergebnisse in den anderen Ansichten.

Diagramm

Das Balkendiagramm gibt einen schnellen Überblick über diejenigen Routinen, die viel Zeit benötigen.

Skizzze

Die Aufrufhierarchie der einzelnen Prozeduren wird in diesem Fenster dargestellt. Man erhält so einen Überblick über die Beziehungen zwischen den einzelnenn Routinen.

Datenaufzeichnung

Bevor Sie Ihre Applikation ablaufen lassen, müssen Sie Ihr Tcl-Script instrumentieren, damit ein entsprechendes Datenfile erzeugt werden kann. Mit tprof ist dies ganz einfach:

  1. Am Anfang des Scripts fügen Sie folgende Zeile ein:

    source yourpath/SW/lib/tprof.tcl

    Dies macht das Kommando tprof für die spätere Verwendung verfügbar. Sie müssen yourpath mit dem aktuellen Wert des Pfades substituieren, mit dem Sie den Tcl-Profiler installiert haben.

  2. An dem Punkt, an dem sie die Aufzeichnung starten wollen (muß nicht unbedingt direkt nach dem oben angeführten Statement sein), fügen Sie folgenden Code ein:

    tprof start

    oder auch

    tprof start -commands

    um die Aufzeichnung von Meßwerten zu starten. Die zweite Form sammelt zusätzlich Meßwerte über interne Kommandos (also in C geschriebene Tcl-Prozeduren).

  3. Dort, wo die Aufzeichnung beendet werden soll (möglicherweise am Ende Ihres Scripts oder vor einem exit oder destroy . Befehl) rufen Sie

    tprof end filename

    auf, wobei filename der Name einer (nicht existierenden Datei) ist. Bitte beachten Sie, daß keine Datei erzeugt wird, solange tprof end nicht aufgerufen wird.

Das ist alles. Führen Sie jetzt Ihr Programm aus. Wenn es beendet wird haben Sie ein Datenfile zur Analyse.

Internas der tprof Prozedur

Wie bereits weiter vorne angeführt verwendet der Tcl-Profiler TclX um Meßdaten aufzuzeichnen. Hier ist ein Auszug aus dem Manual von TclX:

profile ?-commands? on

profile off arrayVar

This command is used to collect a performance profile of a Tcl script. It collects data at the Tcl procedure level. The number of calls to a procedure, and the amount of real and CPU time is collected. Time is also collected for the global context. The procedure data is collected by bucketing it based on the procedure call stack, this allows determination of how much time is spent in a particular procedure in each of it's calling contexts.

The on option enables profile data collection. If the -commands option is specified, data on all commands within a procedure is collected as well a procedures. Multiple occurrences of a command within a procedure are not distinguished, but this data may still be useful for analysis.

The off option turns off profiling and moves the data collected to the array arrayVar. The array is addressed by a list containing the procedure call stack. Element zero is the top of the stack, the procedure that the data is for. The data in each entry is a list consisting of the procedure call count and the real time and CPU time in milliseconds spent in the procedure (and all procedures it called). The list is in the form {count real cpu}.

Format der Meßdaten-Datei

Dateien, die mittels des tprof-Kommandos geschrieben werden sind einfache Textfiles mit folgender Struktur:

  1. Header

    Hier sind prinzipielle Daten über den Datensatz zu finden (beispielsweise Zeit und Datum der Aufzeichnung oder die Kommandozeile, mit der das Script gestartet wurde). Alle Kopfzeilen beginnen mit dem Buchstaben #.

  2. Body

    Die Meßdaten befinden sich in diesem Abschnitt. Jeder Wert benötigt eine Zeile. Alle Buchstaben vor dem ersten | gehören zu einer Liste von Prozedurnamen, die die Aufrufhierarchie des Elementes an erster Stelle beschreiben. Die restlichen drei argumente sind die Anzahl der Aufrufe, die CPU- und die Echtzeit für diese Prozedur (und alle von ihr aufgerufenen Prozeduren).

  3. End

    Dies ist lediglich eine Zeile mit dem Text # eof.

Datenanalyse

Der wichtigste Teil des Tcl-Profilers ist das Datenanalyse-Programm. Es wird mit der folgenden Kommandozeile gestartet:

tprof filename

Dies funktioniert natürlich nur dann, wenn der Tcl-Profiler richtig installiert wurde. Filename ist ein optionales Argument und gibt den Namen eines Datensatzes an, der mit dem tprof-Kommando erzeugt wurde, das im vorherigen Kapitel beschrieben wurde.

image: tprof2.gif

Programm-Übersicht

Der obige Screenshot von tprof gibt Ihnen einen Überblick über das Aussehen des Programmes. In diesem Beispiel wird ein Datensatz angezeigt, der auch im demo-Unterverzeichnis der Distribution zu finden ist. Hier zeigt er gerade den Graphen der Aufrufhierarchie so daß Sie sehr einfach sehen können, welche Funktion von welcher anderen aufgerufen wird.

Das Menü am oberen Ende des Fensters dient zum Laden und Speichern von Datensätzen, zum Exportieren in anderen Formaten sowie zum Ausdrucken und Verändern von Anzeigeparametern.

Das Eingabefeld Datensatz kann zum Laden von neuen Daten benutzt werden (genauso wie das Menü Datei/Laden Datensatz) und zeigt immer den Dateinamen des aktuellen Datensatzes.

Das Kontext-Eingabefeld zeigt den Prozedur-Namen, der gerade analysiert wird. Es ist leer, wenn der komplette Datensatz angezeigt wird und enthält den Namen einer Prozedur, wenn nur Zeitwerte für diese Prozedur (und ihre Unterprogramme) im Tabellen und Diagramm-Teil angezeigt werden.

Das Skizzen-Fenster

Wie oben erklärt zeigt dieses Fenster die Aufrufhierarchie des Programmes. Sie sehen beispielsweise, daß die Prozedur f1 die Prozeduren foreach, f2 und f3 aufruft. Wenn Sie große Datensätze (z.B. data3.tprof aus dem demo-Verzeichnis) laden, werden Sie sehen, wie kompliziert so eine Hierarchie sein kann. Um die Visualisierung zu verbessern, können Sie Maßstab und Abstands-Werte verändern - selektieren Sie dazu das Maßstabs-Utility im Menü Bearbeiten/Skizzen-Maßstab und verändern Sie die Werte der Drehknöpfe.

image: tprof4.gif align=center

Die kommerzielle Version von tprof erlaubt die Auswahl einer Prozedur (z.B. f1 im obigen Bild um so nur diese Prozedur und ihren Kontext anzuzeigen. Sie können auf den entsprechenden Button klicken oder den Prozedurnamen im Kontext-Feld eingeben. Sie erhalten eine neue Anzeige, wobei die ausgewählte Prozedur im Mittelpunkt steht und sie sehen können, welche Routinen diese Prozedur aufrufen, beziehungsweise welche von dieser Prozedur aufgerufen werden. Diese zomm-in Möglichkeit ist besonders bei größeren Datensätzen sinnvoll.

Das Diagramm-Fenster

Die Balkendiagramme geben einen graphischen Überblick über die Meßwerte des kompletten (oder lediglich eines Teiles, wenn Sie Zoom In benutzen) Datensatzes. Sie schalten zwischen der Anzeige der verschiedenen Meßwerte um indem Sie auf die entsprechenden Radio-Buttons klicken.

image: tprof5.gif

Sie können einen Schwellwert für die Anzeige der Datenwerte wählen, wobei alle Werte, die unter diesem Wert liegen, nicht angezeigt werden (Menü Bearbeiten/Diagramm Schwellwert). Dieser Wert ist in Prozent des Maximalwertes aller Prozeduren, das Beispiel exkludiert alle Prozeduren mit weniger als 5 % des Maximalwertes.

Die Prozedur f0 hat sowohl einen oberen als auch einen unteren Maximalwert für ihre Ausführungszeit (abhängig davon, wie sie aufgerufen wird braucht sie mehr oder weniger Zeit). Der unterste Wert wird durch eine entsprechende Markierung im Balken angezeigt.

Die rote vertikale Linie hinter den Balken ist der Durchschnittswert aller Meßwerte.

Bitte beachten Sie die Einheit des angezeigten Datensatzes wenn Sie Vergleiche mit anderen Datensätzen anstellen, die Daten werden automatisch in eine möglichst vernünftige Einheit konvertiert. Vergleichen Sie also nicht einfach Millisekunden mit Stunden...

Das Tabellen-Fenster

Dieses Fenster zeigt eine sortierte Liste aller Wert des gerade untersuchten Datensatzes. Es dient der genaueren Inspektion von Werten, wenn Sie im Diagramm-Fenster entsprechende Hinweise gefunden haben.

image: tprof6.gif

Wie Sie im abgebildeten Screenshot sehen können, kann eine Prozedur mehr als einmal in der Liste vorkommen. Sie sehen auch, daß die Prozedur expr beispielsweise von sechs verschiedenen Stellen aufgerufen wird und entsprechend unterschiedliche Zeiten zur Ausführung benötigt.

Das Informations-Fenster

Hier erhalten Sie Informationen über die geladenen Datensätze. Dies mag besonders dann wichtig sein, wenn Sie die aktuelle Version Ihres Programmes mit älteren Versionen vergleichen. Wenn Sie Datensätze gemischt haben (Menü Bearbeiten/Vereinigen), dann listet dieses Fenster alle geladenen Datensätze.

image: tprof7.gif

Das Menü

Die meisten Menü-Einträge sind (hoffentlich) leicht zu bedienen. Hier ist die Beschreibung der eher exotischen Features:

Datei/Speichern Datensatz

Der aktuelle Datensatz wird unter einem (möglicherweise anderen) Namen gespeichert. Wenn Sie mehrere Datensätze gemischt (Menü Bearbeiten/Vereinigen) haben, dann enthält die Datei eine Vereinigung aller dieser Daten.

Datei/Exportieren Datensatz

Mit dieser Option können Sie die Daten in anderen Formaten exportieren. So können andere Programme (wie beispielsweise ein Spreadsheet) für die Analyse benutzt werden. Derzeit werden folgende Formate unterstützt

SC Tabellenkalkulation

Die exportierten Daten können direkt von sc und xspread gelesen werden. Diverse andere Programme haben ebenfalls entsprechende Import-Funktionen

CDF

Dieses Format wird von diversen Datenbank-Paketen benutzt.

Wingz

Die Daten können in die Wingz-Tabellenkalkulation (Format text) übernommen werden.

Text

Dies ist ein einfaches, formatiertes Text-Format.

Bearbeiten/Vereinigen

Sie können zusätzliche Datensätze zum aktiven Datensatz hinzuladen. Dies kann z.B. dazu benutzt werden, um die Werte von mehreren Programm-Durchläufen zu vereinigen, um damit genauere Daten zu erhalten (besonders für Prozeduren, die nur selten aufgerufen werden).

Bearbeiten/Fenster drucken

Dies schickt die gerade angezeigten Daten (Skizze, Diagramm oder Tabelle) zum Drucker. Dies kann besonders bei komplizierten Skizzen sehr hilfreich sein. Sie können die Graphik mittels Bearbeiten/Postscript (eps) in eine Datei speichern.

Einstellungen/Konfiguration

Sie gelangen in den Konfigurationseditor. Beachten Sie vor allem die Werte von tprof, wenn Sie grundsätzliche Einstellungen des Programmes verändern wollen. Wollen Sie statt des (langsamen) internen HTML-Browsers Netscape für die Hilfe-Texte verwenden, dann setzen Sie [About]:UseNetscape sowie [Help]:UseNetscape im Konfigurationsfile.

Copyright

Das Programm tprof gibt es in zwei Versionen:

Copyright für die Public-Domain Version

Diese Version ist voll funktionsfähig und entspricht im wesentlichen der kommerziellen Version in ihrem Leistungsumfang. Es fehlen das Zoom-In Feature und die meisten der Druckmöglichkeiten. Die kommerzielle Version ist wesentlich schneller da viele Routinen statt in Tcl in C geschrieben sind (Entschuldigung, aber tprof hat die entsprechenden Informationen selbst zur Verfügung gestellt...).

Für die Public-Domain-Version gibt es im Gegensatz zur kommerziellen Version keine Garantie, daß diese Software weiterhin verfügbar ist, weiterentwickelt wird oder daß Fehler behoben werden.

Diese Software darf solange frei benutzt, kopiert, modfiziert und weitergegeben werden, wie die Copyright-Angaben erhalten bleiben und der Anwender keinen Gewinn durch diese Tätigkeiten hat.

Copyright für die kommerzielle Version

Diese Version ist voll funktionsfähig und enthält alle in der Einleitung beschriebenen Features. Mit dem Erwerb der Software kann der Anwender die Dienstleistungen von softWorks in Anspruch nehmen (Wartung, Anpassungen, Weiterentwicklungen). Fordern Sie unsere Preisliste an - oder starten Sie den Lizensierungs-Manager und wählen Sie tprof aus.

Diese Software darf vom Anwender, der die Software erworben hat, solange frei benutzt, kopiert und modfiziert werden, wie die Copyright-Angaben erhalten bleiben und kein Dritter diese Software verwendet.

Allgemeine Copyright-Bestimmungen

Das Programm besteht aus diversen Teilen, die selbst gewissen Copyright-Beschränkungen unterliegen. Darunter fallen in erster Linie Tcl und seine Erweiterungen TclX, Tk, Blt und Tix.

Die entsprechenden Copyright-Bestimmungen können entweder bei den genannten Paketen, die alle frei im Internet erhältlich sind, eingesehen oder vom Author bezogen werden.

Der Author dieser Software übernimmt keinerlei Haftung für direkte oder indirekte Schäden, die durch die Benutzung dieser Software oder ihrer Dokumentation entstehen.

Weitere Informationen enthält das Dokument Allgemein Geschäfts- und Lieferbedingungen.

Referenzen

Soweit mir bekannt ist, gibt es derzeit lediglich ein Packet um Zeit-Meßwerte von Tcl-Scripts zu erlangen. Dieses Packet ist in TclX inkludiert und verwendet das Kommando profref um eine Tabelle von Werten zu erzeugen, die mittels profile erhalten wurden (dasselbe Kommando, das auch von tprof benutzt wird).

Änderungen

Version 1.1

Dies ist die erste Version, die im Internet verbreitet wird. Die Unterversion 1.1.1 ist die Public-Domain-Version, 1.1.2 ist die kommerzielle Version.

Version 1.2

Diese Version enthält keine neue Funktionalität, lediglich einige Verbesserungen und die Beseitigung einiger kleiner Schönheitsfehler.

Bekannte Fehler

Derzeit gibt es keine bekannten Fehler. Selbstverständlich gibt es einige kleine Unstimmigkeiten, aber die sind tief im Programm versteckt.



softWorks
Richard Schwaninger
Wed Oct 30 10:53:21 MET 1996