Index: head/de_DE.ISO8859-1/books/handbook/dtrace/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/dtrace/chapter.xml (revision 46756) +++ head/de_DE.ISO8859-1/books/handbook/dtrace/chapter.xml (revision 46757) @@ -1,397 +1,439 @@ &dtrace; - TomRhodesWritten by + + + Tom + Rhodes + + Written by - BenedictReuschlingÜbersetzt von - ChristophSold + + + Benedict + Reuschling + + Übersetzt von + + + + Christoph + Sold + + Überblick &dtrace; &dtrace; support &dtrace; - &dtrace;, auch bekannt als Dynamic Tracing, wurde von &sun; als ein - Werkzeug zur Analyse von Performance-Problemen in Produktiv- und - Entwicklungssystemen entwickelt. Es ist kein Debugging-Werkzeug, sondern - ein Hilfsmittel für Echtzeit-Systemanalysen. + &dtrace;, auch bekannt als Dynamic Tracing, wurde von &sun; + als ein Werkzeug zur Analyse von Performance-Problemen in + Produktiv- und Entwicklungssystemen entwickelt. Es ist kein + Debugging-Werkzeug, sondern ein Hilfsmittel für + Echtzeit-Systemanalysen. - &dtrace; ist ein bemerkenswertes Werkzeug zur Profilerstellung, mit - einer beeindruckenden Palette von Eigenschaften zur Diagnose von - Systemereignissen. Es kann auch dazu verwendet werden, bestehende - Skripte ablaufen zu lassen, um einen Nutzen aus deren Möglichkeiten - zu ziehen. Nutzer können mittels der Programmiersprache D von - &dtrace; ihre eigenen Hilfsmittel schreiben, was es ermöglicht, die - eigenen Profile nach Ihren Bedürfnissen anzupassen. + &dtrace; ist ein bemerkenswertes Werkzeug zur + Profilerstellung, mit einer beeindruckenden Palette von + Eigenschaften zur Diagnose von Systemereignissen. Es kann auch + dazu verwendet werden, bestehende Skripte ablaufen zu lassen, um + einen Nutzen aus deren Möglichkeiten zu ziehen. Nutzer können + mittels der Programmiersprache D von &dtrace; ihre eigenen + Hilfsmittel schreiben, was es ermöglicht, die eigenen Profile + nach Ihren Bedürfnissen anzupassen. - Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen: + Nachdem Sie dieses Kapitel gelesen haben, werden Sie + Folgendes wissen: Was &dtrace; ist und welche Funktionen es zur Verfügung stellt. - Unterschiede zwischen der &solaris; &dtrace; Implementierung und - derjenigen, die &os; bereitstellt. + Unterschiede zwischen der &solaris; &dtrace; + Implementierung und derjenigen, die &os; + bereitstellt. - Wie man &dtrace; auf &os; aktiviert und verwendet. + Wie man &dtrace; auf &os; aktiviert und + verwendet. Bevor Sie dieses Kapitel lesen, sollten Sie: - &unix; und &os; Grundlagen verstehen (). + &unix; und &os; Grundlagen verstehen (). - Einen Kernel konfigurieren und kompilieren können (). + Einen Kernel konfigurieren und kompilieren können (). Vertraut sein mit Sicherheitsaspekten und wie diese &os; betreffen (). - Verstehen, wie man den Quellcode von &os; beziehen und das - Betriebssystem neu erstellen kann (). + Verstehen, wie man den Quellcode von &os; beziehen und + das Betriebssystem neu erstellen kann (). Diese Funktion ist als experimentell anzusehen. Manche - Einstellungen enthalten möglicherweise nicht alle - Funktionalitäten, andere Teile könnten gar nicht laufen. Mit - der Zeit, wenn diese Funktion als für den Produktivbetrieb - geeignet erscheint, wird auch diese Dokumentation geändert, um - diesem Umstand gerecht zu werden. + Einstellungen enthalten möglicherweise nicht alle + Funktionalitäten, andere Teile könnten gar nicht laufen. Mit + der Zeit, wenn diese Funktion als für den Produktivbetrieb + geeignet erscheint, wird auch diese Dokumentation geändert, um + diesem Umstand gerecht zu werden. Unterschiede in der Implementierung - Obwohl &dtrace; in &os; sehr ähnlich zu dem in &solaris; ist, - existieren doch Unterschiede, die vorher erklärt werden müssen. - Der Hauptunterschied für die Anwender besteht darin, dass in &os; - &dtrace; explizit aktiviert werden muss. Es existieren Kerneloptionen - und Module, die aktiviert sein müssen, damit &dtrace; korrekt - arbeitet. Diese werden später genauer erlätert. + Obwohl &dtrace; in &os; sehr ähnlich zu dem in &solaris; + ist, existieren doch Unterschiede, die vorher erklärt werden + müssen. Der Hauptunterschied für die Anwender besteht darin, + dass in &os; &dtrace; explizit aktiviert werden muss. Es + existieren Kerneloptionen und Module, die aktiviert sein müssen, + damit &dtrace; korrekt arbeitet. Diese werden später genauer + erlätert. Die Kerneloption DDB_CTF wird dafür verwendet, um die Unterstützung im Kernel für das Laden von - CTF-Daten aus Kernelmodulen und dem Kernel selbst zu - ermöglichen. CTF ist das Compact C Type Format - von &solaris;, welches eine reduzierte Form von Debug-Informationen - kapselt, ähnlich zu DWARF und den antiken Stabs. - Diese CTF-Daten werden dem Binärcode von den - ctfconvert und ctfmerge Befehlen - den Werkzeugen zum Bauen des Systems hinzugefügt. Das - ctfconvert-Dienstprogramm parst die vom Compiler - erstellten DWARF ELF - Debug-Abschnitte und ctfmerge vereint - CTF ELF-Abschnitte aus Objekten, - entweder in ausführbare Dateien oder Shared-Libraries. In - Kürze erfahren Sie, wie Sie dies für den Kernel und den Bau von - &os; aktivieren. + CTF-Daten aus Kernelmodulen und dem Kernel + selbst zu ermöglichen. CTF ist das Compact C + Type Format von &solaris;, welches eine reduzierte Form von + Debug-Informationen kapselt, ähnlich zu DWARF + und den antiken Stabs. Diese CTF-Daten + werden dem Binärcode von den ctfconvert und + ctfmerge Befehlen den Werkzeugen zum Bauen + des Systems hinzugefügt. Das + ctfconvert-Dienstprogramm parst die vom + Compiler erstellten DWARF + ELF Debug-Abschnitte und + ctfmerge vereint CTF + ELF-Abschnitte aus Objekten, entweder in + ausführbare Dateien oder Shared-Libraries. In Kürze erfahren + Sie, wie Sie dies für den Kernel und den Bau von &os; + aktivieren. Einige Provider in &os; unterscheiden sich von der &solaris;-Implementierung. Am deutlichsten wird das beim - dtmalloc-Provider, welcher das Aufzeichnen von - malloc() nach Typen im &os;-Kernel + dtmalloc-Provider, welcher das Aufzeichnen + von malloc() nach Typen im &os;-Kernel ermöglicht. - In &os; darf &dtrace; wegen unterschiedlicher Sicherheitskonzepte - nur von root verwendet werden. &solaris; - besitzt ein paar Audit-Funktionen auf den unteren Ebenen, die noch nicht - in &os; implementiert sind. Deshalb kann nur root - auf /dev/dtrace/dtrace zugreifen. + In &os; darf &dtrace; wegen unterschiedlicher + Sicherheitskonzepte nur von root verwendet werden. &solaris; + besitzt ein paar Audit-Funktionen auf den unteren Ebenen, die + noch nicht in &os; implementiert sind. Deshalb kann nur + root auf + /dev/dtrace/dtrace zugreifen. - Zum Schluss muss noch erwähnt werden, dass die &dtrace;-Software - unter &sun;s CDDL Lizenz fällt. Die - Common Development and Distribution License wird von - &os; mitgeliefert, sehen Sie sich dazu + Zum Schluss muss noch erwähnt werden, dass die + &dtrace;-Software unter &sun;s CDDL Lizenz + fällt. Die Common Development and Distribution + License wird von &os; mitgeliefert, sehen Sie sich + dazu /usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE - an, oder lesen Sie die Online-Version unter http://www.opensolaris.org/os/licensing. + an, oder lesen Sie die Online-Version unter http://www.opensolaris.org/os/licensing. - Diese Lizenz bedeutet, dass ein &os;-Kernel mit den &dtrace;-Optionen - immer noch BSD-lizenziert ist; allerdings tritt die - CDDL in Kraft, wenn Module in Binärform - vertrieben werden oder die Binärdateien geladen werden. + Diese Lizenz bedeutet, dass ein &os;-Kernel mit den + &dtrace;-Optionen immer noch BSD-lizenziert + ist; allerdings tritt die CDDL in Kraft, wenn + Module in Binärform vertrieben werden oder die Binärdateien + geladen werden. Die &dtrace; Unterstützung aktivieren - Um Unterstützung für &dtrace; zu aktivieren, fügen Sie - die folgenden Zeilen zu Ihrer Kernelkonfigurationsdatei hinzu: + Um Unterstützung für &dtrace; zu aktivieren, fügen Sie die + folgenden Zeilen zu Ihrer Kernelkonfigurationsdatei + hinzu: options KDTRACE_HOOKS options DDB_CTF - Besitzer der AMD-Architektur werden wahrscheinlich noch die - folgende Zeile zur Kernelkonfigurationsdatei hinzufügen: + Besitzer der AMD-Architektur werden wahrscheinlich noch + die folgende Zeile zur Kernelkonfigurationsdatei + hinzufügen: options KDTRACE_FRAME Diese Option liefert die Unterstützung für die - FBT-Eigenschaft. &dtrace; wird auch ohne diese - Option funktionieren; jedoch wird dann Function Boundary Tracing nur - eingeschränkt unterstützt. + FBT-Eigenschaft. &dtrace; wird auch ohne + diese Option funktionieren; jedoch wird dann Function Boundary + Tracing nur eingeschränkt unterstützt. Der gesamte Quellcode muss neu gebaut und mit der - CTF-Option installiert werden. Um das zu erreichen, - bauen Sie &os; aus dem Quellcode mittels: + CTF-Option installiert werden. Um das zu + erreichen, bauen Sie &os; aus dem Quellcode mittels: &prompt.root; cd /usr/src &prompt.root; make WITH_CTF=1 kernel - Das System muss im Anschluss daran neu gestartet werden. + Das System muss im Anschluss daran neu gestartet + werden. Nachdem das System neu gestartet und der neue Kernel in den - Hauptspeicher geladen wurde, sollte die Unterstützung für die - Korn-Shell hinzugefügt werden. Dies wird benötigt, da die - Sammlung von &dtrace;-Werkzeugen mehrere Dienstprogramme enthält, - die in ksh implementiert sind. Installieren - Sie shells/ksh93. Es ist auch möglich, diese - Werkzeuge unter shells/pdksh oder - shells/mksh laufen zu lassen. + Hauptspeicher geladen wurde, sollte die Unterstützung für die + Korn-Shell hinzugefügt werden. Dies wird benötigt, da die + Sammlung von &dtrace;-Werkzeugen mehrere Dienstprogramme + enthält, die in ksh implementiert sind. + Installieren Sie shells/ksh93. Es ist auch + möglich, diese Werkzeuge unter shells/pdksh + oder shells/mksh laufen zu lassen. Zum Schluss sollten Sie noch den aktuellen &dtrace;-Werkzeugsatz beschaffen. Wenn Sie &os; 10 einsetzen, finden Sie den &dtrace;-Werkzeugsatz in /usr/share/dtrace. Andernfalls können Sie den &dtrace;-Werkzeugsatz über den Port sysutils/DTraceToolkit installieren. &dtrace; verwenden - Bevor die &dtrace;-Funktionaltät benutzt werden kann, muss das - &dtrace;-Gerät existieren. Um das Gerät zu laden, geben Sie + Bevor die &dtrace;-Funktionaltät benutzt werden kann, muss + das &dtrace;-Gerät existieren. Um das Gerät zu laden, geben Sie das folgende Kommando ein: &prompt.root; kldload dtraceall Die &dtrace;-Unterstützung sollte jetzt verfügbar sein. Um - alle Sonden anzuzeigen, kann der Administrator nun den folgenden Befehl - eingeben: + alle Sonden anzuzeigen, kann der Administrator nun den folgenden + Befehl eingeben: &prompt.root; dtrace -l | more Alle Ausgaben werden an das more-Programm - übergeben, da der Bildschirmpuffer sehr schnell überlaufen - wird. Ab diesem Punkt kann &dtrace; als einsatzbereit angesehen werden. - Jetzt ist es an der Zeit, sich näher mit dem Satz von Werkzeugen zu - beschäftigen. + übergeben, da der Bildschirmpuffer sehr schnell überlaufen wird. + Ab diesem Punkt kann &dtrace; als einsatzbereit angesehen + werden. Jetzt ist es an der Zeit, sich näher mit dem Satz von + Werkzeugen zu beschäftigen. - Der Werkzeugsatz ist eine Sammlung von vorgefertigten Skripten, die - von &dtrace; ausgeführt werden können, um Systeminformationen - zu sammeln. Es gibt Skripte, die offene Dateien überprüfen, - den Speicher, CPU-Verbrauch und noch viel mehr. - Entpacken Sie die Skripte mit dem folgenden Befehl: + Der Werkzeugsatz ist eine Sammlung von vorgefertigten + Skripten, die von &dtrace; ausgeführt werden können, um + Systeminformationen zu sammeln. Es gibt Skripte, die offene + Dateien überprüfen, den Speicher, + CPU-Verbrauch und noch viel mehr. Entpacken + Sie die Skripte mit dem folgenden Befehl: &prompt.root; gunzip -c DTraceToolkit* | tar xvf - - Wechseln Sie mit dem cd-Kommando in dieses - Verzeichnis und ändern Sie die Berechtigung zum Ausführen von - allen Dateien, deren Name klein geschrieben ist, auf + Wechseln Sie mit dem cd-Kommando in + dieses Verzeichnis und ändern Sie die Berechtigung zum Ausführen + von allen Dateien, deren Name klein geschrieben ist, auf 755. All diese Skripte müssen inhaltlich verändert werden. Diejenigen, die auf /usr/bin/ksh verweisen, müssen in /usr/local/bin/ksh geändert werden und die Anderen, welche /usr/bin/sh verwenden, müssen so angepasst werden, dass sie - /bin/sh verwenden. Schliesslich müssen noch - diejenigen, die /usr/bin/perl enthalten, auf - /usr/local/bin/perl umgeschrieben werden. + /bin/sh verwenden. Schliesslich müssen + noch diejenigen, die /usr/bin/perl + enthalten, auf /usr/local/bin/perl + umgeschrieben werden. - Zu diesem Zeitpunkt ist es klug, den Leser noch einmal daran zu - erinnern, dass die Unterstützung von &dtrace; in &os; noch - unvollständig und - experimentell ist. Viele dieser Skripte werden - nicht funktionieren, da diese entweder zu sehr &solaris;-spezifisch - sind oder Sonden verwenden, die zur Zeit noch nicht unterstützt - werden. + Zu diesem Zeitpunkt ist es klug, den Leser noch einmal + daran zu erinnern, dass die Unterstützung von &dtrace; in &os; + noch unvollständig und + experimentell ist. Viele dieser Skripte + werden nicht funktionieren, da diese entweder zu sehr + &solaris;-spezifisch sind oder Sonden verwenden, die zur Zeit + noch nicht unterstützt werden. - Zum Zeitpunkt, an dem dieses Dokument geschrieben wurde, existieren - nur zwei Skripte im &dtrace;-Werkzeugsatz, die von &os; komplett - unterstützt werden: die Skripte hotkernel und - procsystime. Diese beiden werden in den folgenden - Teilen dieses Abschnitts genauer untersucht. + Zum Zeitpunkt, an dem dieses Dokument geschrieben wurde, + existieren nur zwei Skripte im &dtrace;-Werkzeugsatz, die von + &os; komplett unterstützt werden: die Skripte + hotkernel und + procsystime. Diese beiden werden in den + folgenden Teilen dieses Abschnitts genauer untersucht. - hotkernel wurde entworfen, um zu identifizieren, - welche Funktion die meiste Kernelzeit beansprucht. Normal - ausgeführt, wird es Ausgaben ähnlich der Folgenden - produzieren: + hotkernel wurde entworfen, um zu + identifizieren, welche Funktion die meiste Kernelzeit + beansprucht. Normal ausgeführt, wird es Ausgaben ähnlich der + Folgenden produzieren: &prompt.root; cd /usr/share/dtrace/toolkit &prompt.root; ./hotkernel Sampling... Hit Ctrl-C to end. - Der Systemadministrator muss die Tastenkombination CtrlC + Der Systemadministrator muss die Tastenkombination CtrlC drücken, um den Prozess zu stoppen. Nach dem Abbruch wird das - Skript eine Liste von Kernelfunktionen und Zeitmessungen ausgeben, - aufsteigend sortiert nach den Zeiten: + Skript eine Liste von Kernelfunktionen und Zeitmessungen + ausgeben, aufsteigend sortiert nach den Zeiten: kernel`_thread_lock_flags 2 0.0% 0xc1097063 2 0.0% kernel`sched_userret 2 0.0% kernel`kern_select 2 0.0% kernel`generic_copyin 3 0.0% kernel`_mtx_assert 3 0.0% kernel`vm_fault 3 0.0% kernel`sopoll_generic 3 0.0% kernel`fixup_filename 4 0.0% kernel`_isitmyx 4 0.0% kernel`find_instance 4 0.0% kernel`_mtx_unlock_flags 5 0.0% kernel`syscall 5 0.0% kernel`DELAY 5 0.0% 0xc108a253 6 0.0% kernel`witness_lock 7 0.0% kernel`read_aux_data_no_wait 7 0.0% kernel`Xint0x80_syscall 7 0.0% kernel`witness_checkorder 7 0.0% kernel`sse2_pagezero 8 0.0% kernel`strncmp 9 0.0% kernel`spinlock_exit 10 0.0% kernel`_mtx_lock_flags 11 0.0% kernel`witness_unlock 15 0.0% kernel`sched_idletd 137 0.3% 0xc10981a5 42139 99.3% Dieses Skript funktioniert auch mit Kernelmodulen. Um diese - Eigenschaft zu verwenden, starten Sie das Skript mit dem Parameter - : + Eigenschaft zu verwenden, starten Sie das Skript mit dem + Parameter : &prompt.root; ./hotkernel -m Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT 0xc107882e 1 0.0% 0xc10e6aa4 1 0.0% 0xc1076983 1 0.0% 0xc109708a 1 0.0% 0xc1075a5d 1 0.0% 0xc1077325 1 0.0% 0xc108a245 1 0.0% 0xc107730d 1 0.0% 0xc1097063 2 0.0% 0xc108a253 73 0.0% kernel 874 0.4% 0xc10981a5 213781 99.6% Das procsystime Skript fängt die Systemaufruf-Zeiten ab und zeigt diese für eine gegebene - PID oder einen Prozessnamen an. Im folgenden Beispiel - wurde eine neue Instanz von /bin/csh erzeugt. - procsystime wurde ausgeführt und verbleibt so, - während ein paar Befehle in die andere Instanz von - csh eingegeben werden. Dies sind die Ergebnisse - dieses Versuchs: + PID oder einen Prozessnamen an. Im folgenden + Beispiel wurde eine neue Instanz von + /bin/csh erzeugt. + procsystime wurde ausgeführt und verbleibt + so, während ein paar Befehle in die andere Instanz von + csh eingegeben werden. Dies sind die + Ergebnisse dieses Versuchs: &prompt.root; ./procsystime -n csh Tracing... Hit Ctrl-C to end... ^C Elapsed Times for processes csh, SYSCALL TIME (ns) getpid 6131 sigreturn 8121 close 19127 fcntl 19959 dup 26955 setpgid 28070 stat 31899 setitimer 40938 wait4 62717 sigaction 67372 sigprocmask 119091 gettimeofday 183710 write 263242 execve 492547 ioctl 770073 vfork 3258923 sigsuspend 6985124 read 3988049784 Wie aus der Ausgabe ersichtlich ist, verbraucht der - read()-Systemaufruf die meiste Zeit in Nanosekunden, - während der Systemaufruf getpid() hingegen am - schnellsten läft. + read()-Systemaufruf die meiste Zeit in + Nanosekunden, während der Systemaufruf + getpid() hingegen am schnellsten + läuft. Die Sprache D Der &dtrace; Werkzeugsatz enthält viele Skripte in der - speziellen Sprache von &dtrace;. Diese Sprache wird als die D - Sprache in der Dokumentation von &sun; bezeichnet und ist C++ - sehr ähnlich. Eine tiefergehende Betrachtung dieser Sprache - würde den Rahmen dieses Dokuments sprengen. Ausführlich wird - diese Sprache unter http://wikis.sun.com/display/DTrace/Documentation + speziellen Sprache von &dtrace;. Diese Sprache wird als + die D Sprache in der Dokumentation von &sun; + bezeichnet und ist C++ sehr ähnlich. Eine tiefergehende + Betrachtung dieser Sprache würde den Rahmen dieses Dokuments + sprengen. Ausführlich wird diese Sprache unter http://wikis.sun.com/display/DTrace/Documentation behandelt.