german/tprof.tex
Version 1.2
Dokument 1.2
30/10/1996
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:
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:
Diese Ansicht ist lediglich eine formatierte Liste aller aufgezeichneten Daten. Sie dient der genaueren Überprüfung der Ergebnisse in den anderen Ansichten.
Das Balkendiagramm gibt einen schnellen Überblick über diejenigen Routinen, die viel Zeit benötigen.
Die Aufrufhierarchie der einzelnen Prozeduren wird in diesem Fenster dargestellt. Man erhält so einen Überblick über die Beziehungen zwischen den einzelnenn Routinen.
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:
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.
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).
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.
Wie bereits weiter vorne angeführt verwendet der Tcl-Profiler TclX um Meßdaten aufzuzeichnen. Hier ist ein Auszug aus dem Manual von TclX:
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}.
Dateien, die mittels des tprof-Kommandos geschrieben werden sind einfache Textfiles mit folgender Struktur:
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 #.
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).
Dies ist lediglich eine Zeile mit dem Text # eof.
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.
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.
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.
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.
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.
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...
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.
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.
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.
Die meisten Menü-Einträge sind (hoffentlich) leicht zu bedienen. Hier ist die Beschreibung der eher exotischen Features:
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.
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
Die exportierten Daten können direkt von sc und xspread gelesen werden. Diverse andere Programme haben ebenfalls entsprechende Import-Funktionen
Dieses Format wird von diversen Datenbank-Paketen benutzt.
Die Daten können in die Wingz-Tabellenkalkulation (Format text) übernommen werden.
Dies ist ein einfaches, formatiertes Text-Format.
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).
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.
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.
Das Programm tprof gibt es in zwei Versionen:
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.
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.
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.
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).
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.
Diese Version enthält keine neue Funktionalität, lediglich einige Verbesserungen und die Beseitigung einiger kleiner Schönheitsfehler.
Derzeit gibt es keine bekannten Fehler. Selbstverständlich gibt es einige kleine Unstimmigkeiten, aber die sind tief im Programm versteckt.