aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml')
-rw-r--r--de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml417
1 files changed, 417 insertions, 0 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml b/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
new file mode 100644
index 0000000000..5859cca712
--- /dev/null
+++ b/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
@@ -0,0 +1,417 @@
+<!--
+Recently I suggested to myself that this should become a profiling
+and debugging chapter, which covers things like ktrace(1) and
+using other debugging (like -x in shell scripts). But then I
+realized that, over time and while DTrace becomes better supported,
+that might make this chapter too large.
+-->
+
+<!--
+ The FreeBSD Documentation Project
+ $FreeBSD$
+ $FreeBSDde: de-docproj/books/handbook/dtrace/chapter.sgml,v 1.4 2009/08/22 18:54:15 bcr Exp $
+ basiert auf: 1.8
+-->
+
+<chapter id="dtrace">
+ <chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Written by </contrib>
+ </author>
+ </authorgroup>
+
+ <authorgroup>
+ <author>
+ <firstname>Benedict</firstname>
+ <surname>Reuschling</surname>
+ <contrib>&Uuml;bersetzt von </contrib>
+ </author>
+ <author>
+ <firstname>Christoph</firstname>
+ <surname>Sold</surname>
+ </author>
+ </authorgroup>
+ </chapterinfo>
+
+ <title>&dtrace;</title>
+
+ <sect1 id="dtrace-synopsis">
+ <title>&Uuml;berblick</title>
+
+ <indexterm><primary>&dtrace;</primary></indexterm>
+ <indexterm>
+ <primary>&dtrace; support</primary>
+ <see>&dtrace;</see>
+ </indexterm>
+
+ <para>&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&uuml;r Echtzeit-Systemanalysen.</para>
+
+ <para>&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&ouml;glichkeiten
+ zu ziehen. Nutzer k&ouml;nnen mittels der Programmiersprache D von
+ &dtrace; ihre eigenen Hilfsmittel schreiben, was es erm&ouml;glicht, die
+ eigenen Profile nach Ihren Bed&uuml;rfnissen anzupassen.</para>
+
+ <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Was &dtrace; ist und welche Funktionen es zur Verf&uuml;gung
+ stellt.</para>
+ </listitem>
+
+ <listitem>
+ <para>Unterschiede zwischen der &solaris; &dtrace; Implementierung und
+ derjenigen, die &os; bereitstellt.</para>
+ </listitem>
+
+ <listitem>
+ <para>Wie man &dtrace; auf &os; aktiviert und verwendet.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Bevor Sie dieses Kapitel lesen, sollten Sie:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>&unix; und &os; Grundlagen verstehen (<xref
+ linkend="basics">).</para>
+ </listitem>
+
+ <listitem>
+ <para>Einen Kernel konfigurieren und kompilieren k&ouml;nnen (<xref
+ linkend="kernelconfig">).</para>
+ </listitem>
+
+ <listitem>
+ <para>Vertraut sein mit Sicherheitsaspekten und wie diese
+ &os; betreffen (<xref linkend="security">).</para>
+ </listitem>
+
+ <listitem>
+ <para>Verstehen, wie man den Quellcode von &os; beziehen und das
+ Betriebssystem neu erstellen kann (<xref
+ linkend="updating-upgrading">).</para>
+ </listitem>
+ </itemizedlist>
+
+ <!--
+ Temporary warning to avoid listing experimental versions
+ and production versions of FreeBSD with this technology.
+ -->
+ <warning>
+ <para>Diese Funktion ist als experimentell anzusehen. Manche
+ Einstellungen enthalten m&ouml;glicherweise nicht alle
+ Funktionalit&auml;ten, andere Teile k&ouml;nnten gar nicht laufen. Mit
+ der Zeit, wenn diese Funktion als f&uuml;r den Produktivbetrieb
+ geeignet erscheint, wird auch diese Dokumentation ge&auml;ndert, um
+ diesem Umstand gerecht zu werden.</para>
+ </warning>
+ </sect1>
+
+ <sect1 id="dtrace-implementation">
+ <title>Unterschiede in der Implementierung</title>
+
+ <para>Obwohl &dtrace; in &os; sehr &auml;hnlich zu dem in &solaris; ist,
+ existieren doch Unterschiede, die vorher erkl&auml;rt werden m&uuml;ssen.
+ Der Hauptunterschied f&uuml;r die Anwender besteht darin, dass in &os;
+ &dtrace; explizit aktiviert werden muss. Es existieren Kerneloptionen
+ und Module, die aktiviert sein m&uuml;ssen, damit &dtrace; korrekt
+ arbeitet. Diese werden sp&auml;ter genauer erl&auml;tert.</para>
+
+ <para>Die Kerneloption <literal>DDB_CTF</literal> wird daf&uuml;r
+ verwendet, um die Unterst&uuml;tzung im Kernel f&uuml;r das Laden von
+ <acronym>CTF</acronym>-Daten aus Kernelmodulen und dem Kernel selbst zu
+ erm&ouml;glichen. <acronym>CTF</acronym> ist das Compact C Type Format
+ von &solaris;, welches eine reduzierte Form von Debug-Informationen
+ kapselt, &auml;hnlich zu <acronym>DWARF</acronym> und den antiken Stabs.
+ Diese <acronym>CTF</acronym>-Daten werden dem Bin&auml;rcode von den
+ <command>ctfconvert</command> und <command>ctfmerge</command> Befehlen
+ den Werkzeugen zum Bauen des Systems hinzugef&uuml;gt. Das
+ <command>ctfconvert</command>-Dienstprogramm parst die vom Compiler
+ erstellten <acronym>DWARF</acronym> <acronym>ELF</acronym>
+ Debug-Abschnitte und <command>ctfmerge</command> vereint
+ <acronym>CTF</acronym> <acronym>ELF</acronym>-Abschnitte aus Objekten,
+ entweder in ausf&uuml;hrbare Dateien oder Shared-Libraries. In
+ K&uuml;rze erfahren Sie, wie Sie dies f&uuml;r den Kernel und den Bau von
+ &os; aktivieren.</para>
+
+ <para>Einige Provider in &os; unterscheiden sich von der
+ &solaris;-Implementierung. Am deutlichsten wird das beim
+ <literal>dtmalloc</literal>-Provider, welcher das Aufzeichnen von
+ <function>malloc()</function> nach Typen im &os;-Kernel
+ erm&ouml;glicht.</para>
+
+ <para>In &os; darf &dtrace; wegen unterschiedlicher Sicherheitskonzepte
+ nur von <username>root</username> verwendet werden. &solaris;
+ besitzt ein paar Audit-Funktionen auf den unteren Ebenen, die noch nicht
+ in &os; implementiert sind. Deshalb kann nur <username>root</username>
+ auf <devicename>/dev/dtrace/dtrace</devicename> zugreifen.</para>
+
+ <para>Zum Schluss muss noch erw&auml;hnt werden, dass die &dtrace;-Software
+ unter &sun;s <acronym>CDDL</acronym> Lizenz f&auml;llt. Die
+ <literal>Common Development and Distribution License</literal> wird von
+ &os; mitgeliefert, sehen Sie sich dazu
+ <filename>/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE</filename>
+ an, oder lesen Sie die Online-Version unter <ulink
+ url="http://www.opensolaris.org/os/licensing"></ulink>.</para>
+
+ <para>Diese Lizenz bedeutet, dass ein &os;-Kernel mit den &dtrace;-Optionen
+ immer noch <acronym>BSD</acronym>-lizenziert ist; allerdings tritt die
+ <acronym>CDDL</acronym> in Kraft, wenn Module in Bin&auml;rform
+ vertrieben werden oder die Bin&auml;rdateien geladen werden.</para>
+ </sect1>
+
+ <sect1 id="dtrace-enable">
+ <title>Die &dtrace; Unterst&uuml;tzung aktivieren</title>
+
+ <para>Um Unterst&uuml;tzung f&uuml;r &dtrace; zu aktivieren, f&uuml;gen Sie
+ die folgenden Zeilen zu Ihrer Kernelkonfigurationsdatei hinzu:</para>
+
+ <programlisting>options KDTRACE_HOOKS
+options DDB_CTF</programlisting>
+
+ <note>
+ <para>Besitzer der AMD-Architektur werden wahrscheinlich noch die
+ folgende Zeile zur Kernelkonfigurationsdatei hinzuf&uuml;gen:</para>
+
+ <programlisting>options KDTRACE_FRAME</programlisting>
+
+ <para>Diese Option liefert die Unterst&uuml;tzung f&uuml;r die
+ <acronym>FBT</acronym>-Eigenschaft. &dtrace; wird auch ohne diese
+ Option funktionieren; jedoch wird dann Function Boundary Tracing nur
+ eingeschr&auml;nkt unterst&uuml;tzt.</para>
+ </note>
+
+ <para>Der gesamte Quellcode muss neu gebaut und mit der
+ <acronym>CTF</acronym>-Option installiert werden. Um das zu erreichen,
+ bauen Sie &os; aus dem Quellcode mittels:</para>
+
+ <!-- XXXTR: WITH_CTF has been reported to leave a user with a
+ broken system when used with buildworld. Until this is
+ fixed, comment out those parts. When uncommenting, kill
+ the extra screen.
+ -->
+
+ <screen>&prompt.root; <userinput>cd /usr/src</userinput>
+<!-- &prompt.root; <userinput>make WITH_CTF=1 buildworld</userinput> -->
+&prompt.root; <userinput>make WITH_CTF=1 kernel</userinput></screen>
+<!-- &prompt.root; <userinput>make WITH_CTF=1 installworld</userinput>
+&prompt.root; <userinput>mergemaster -Ui</userinput></screen> -->
+
+ <para>Das System muss im Anschluss daran neu gestartet werden.</para>
+
+ <para>Nachdem das System neu gestartet und der neue Kernel in den
+ Hauptspeicher geladen wurde, sollte die Unterst&uuml;tzung f&uuml;r die
+ Korn-Shell hinzugef&uuml;gt werden. Dies wird ben&ouml;tigt, da die
+ Sammlung von &dtrace;-Werkzeugen mehrere Dienstprogramme enth&auml;lt,
+ die in <command>ksh</command> implementiert sind. Installieren Sie
+ <filename role="package">shells/ksh93</filename>. Es ist auch
+ m&ouml;glich, diese Werkzeuge unter <filename
+ role="package">shells/pdksh</filename> oder <filename
+ role="package">shells/mksh</filename> laufen zu lassen.</para>
+
+ <para>Zum Schluss sollten Sie noch den aktuellen &dtrace;-Werkzeugsatz
+ beschaffen. Die aktuelle Version ist unter <ulink
+ url="http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/"></ulink>
+ verf&uuml;gbar. Ein Mechanismus zur Installation ist enthalten,
+ allerdings ist eine Installation nicht unbedingt n&ouml;tig, um die darin
+ enthaltenen Dienstprogramme einzusetzen.</para>
+ </sect1>
+
+ <sect1 id="dtrace-using">
+ <title>&dtrace; verwenden</title>
+
+ <para>Bevor die &dtrace;-Funktionalt&auml;t benutzt werden kann, muss das
+ &dtrace;-Ger&auml;t existieren. Um das Ger&auml;t zu laden, geben Sie
+ das folgende Kommando ein:</para>
+
+ <screen>&prompt.root; <userinput>kldload dtraceall</userinput></screen>
+
+ <para>Die &dtrace;-Unterst&uuml;tzung sollte jetzt verf&uuml;gbar sein. Um
+ alle Sonden anzuzeigen, kann der Administrator nun den folgenden Befehl
+ eingeben:</para>
+
+ <screen>&prompt.root; <userinput>dtrace -l | more</userinput></screen>
+
+ <para>Alle Ausgaben werden an das <command>more</command>-Programm
+ &uuml;bergeben, da der Bildschirmpuffer sehr schnell &uuml;berlaufen
+ wird. Ab diesem Punkt kann &dtrace; als einsatzbereit angesehen werden.
+ Jetzt ist es an der Zeit, sich n&auml;her mit dem Satz von Werkzeugen zu
+ besch&auml;ftigen.</para>
+
+ <para>Der Werkzeugsatz ist eine Sammlung von vorgefertigten Skripten, die
+ von &dtrace; ausgef&uuml;hrt werden k&ouml;nnen, um Systeminformationen
+ zu sammeln. Es gibt Skripte, die offene Dateien &uuml;berpr&uuml;fen,
+ den Speicher, <acronym>CPU</acronym>-Verbrauch und noch viel mehr.
+ Entpacken Sie die Skripte mit dem folgenden Befehl:</para>
+
+ <screen>&prompt.root; <userinput>gunzip -c DTraceToolkit* | tar xvf -</userinput></screen>
+
+ <para>Wechseln Sie mit dem <command>cd</command>-Kommando in dieses
+ Verzeichnis und &auml;ndern Sie die Berechtigung zum Ausf&uuml;hren von
+ allen Dateien, deren Name klein geschrieben ist, auf
+ <literal>755</literal>.</para>
+
+ <para>All diese Skripte m&uuml;ssen inhaltlich ver&auml;ndert werden.
+ Diejenigen, die auf <filename>/usr/bin/ksh</filename> verweisen,
+ m&uuml;ssen in <filename>/usr/local/bin/ksh</filename> ge&auml;ndert
+ werden und die Anderen, welche <filename>/usr/bin/sh</filename>
+ verwenden, m&uuml;ssen so angepasst werden, dass sie
+ <filename>/bin/sh</filename> verwenden. Schliesslich m&uuml;ssen noch
+ diejenigen, die <filename>/usr/bin/perl</filename> enthalten, auf
+ <filename>/usr/local/bin/perl</filename> umgeschrieben werden.</para>
+
+ <important>
+ <para>Zu diesem Zeitpunkt ist es klug, den Leser noch einmal daran zu
+ erinnern, dass die Unterst&uuml;tzung von &dtrace; in &os; noch
+ <emphasis>unvollst&auml;ndig</emphasis> und
+ <emphasis>experimentell</emphasis> ist. Viele dieser Skripte werden
+ nicht funktionieren, da diese entweder zu sehr &solaris;-spezifisch
+ sind oder Sonden verwenden, die zur Zeit noch nicht unterst&uuml;tzt
+ werden.</para>
+ </important>
+
+ <para>Zum Zeitpunkt, an dem dieses Dokument geschrieben wurde, existieren
+ nur zwei Skripte im &dtrace;-Werkzeugsatz, die von &os; komplett
+ unterst&uuml;tzt werden: die Skripte <filename>hotkernel</filename> und
+ <filename>procsystime</filename>. Diese beiden werden in den folgenden
+ Teilen dieses Abschnitts genauer untersucht.</para>
+
+ <para><filename>hotkernel</filename> wurde entworfen, um zu identifizieren,
+ welche Funktion die meiste Kernelzeit beansprucht. Normal
+ ausgef&uuml;hrt, wird es Ausgaben &auml;hnlich der Folgenden
+ produzieren:</para>
+
+ <screen>&prompt.root; <userinput>./hotkernel</userinput>
+Sampling... Hit Ctrl-C to end.</screen>
+
+ <para>Der Systemadministrator muss die Tastenkombination <keycombo
+ action="simul"><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+ dr&uuml;cken, um den Prozess zu stoppen. Nach dem Abbruch wird das
+ Skript eine Liste von Kernelfunktionen und Zeitmessungen ausgeben,
+ aufsteigend sortiert nach den Zeiten:</para>
+
+ <screen>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%</screen>
+
+ <!-- XXXTR: I attempted to use objdump and nm on /boot/kernel/kernel
+ to find 0xc10981a5, but to no avail. It would be nice to know
+ how we should look that up. -->
+
+ <para>Dieses Skript funktioniert auch mit Kernelmodulen. Um diese
+ Eigenschaft zu verwenden, starten Sie das Skript mit dem Parameter
+ <option>-m</option>:</para>
+
+ <screen>&prompt.root; <userinput>./hotkernel -m</userinput>
+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%</screen>
+
+ <!-- XXXTR: I was unable to match these up with output from
+ kldstat and kldstat -v and grep. Maybe I'm missing something
+ seriously obvious. It is 5AM btw. -->
+
+ <para>Das <filename>procsystime</filename> Skript f&auml;ngt die
+ Systemaufruf-Zeiten ab und zeigt diese f&uuml;r eine gegebene
+ <acronym>PID</acronym> oder einen Prozessnamen an. Im folgenden Beispiel
+ wurde eine neue Instanz von <filename>/bin/csh</filename> erzeugt.
+ <filename>procsystime</filename> wurde ausgef&uuml;hrt und verbleibt so,
+ w&auml;hrend ein paar Befehle in die andere Instanz von
+ <command>csh</command> eingegeben werden. Dies sind die Ergebnisse
+ dieses Versuchs:</para>
+
+ <screen>&prompt.root; <userinput>./procsystime -n csh</userinput>
+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</screen>
+
+ <para>Wie aus der Ausgabe ersichtlich ist, verbraucht der
+ <function>read()</function>-Systemaufruf die meiste Zeit in Nanosekunden,
+ w&auml;hrend der Systemaufruf <function>getpid()</function> hingegen am
+ schnellsten l&auml;ft.</para>
+ </sect1>
+
+ <sect1 id="dtrace-language">
+ <title>Die Sprache D</title>
+
+ <para>Der &dtrace; Werkzeugsatz enth&auml;lt viele Skripte in der
+ speziellen Sprache von &dtrace;. Diese Sprache wird als <quote>die D
+ Sprache</quote> in der Dokumentation von &sun; bezeichnet und ist C++
+ sehr &auml;hnlich. Eine tiefergehende Betrachtung dieser Sprache
+ w&uuml;rde den Rahmen dieses Dokuments sprengen. Ausf&uuml;hrlich wird
+ diese Sprache unter <ulink
+ url="http://wikis.sun.com/display/DTrace/Documentation"></ulink>
+ behandelt.</para>
+ </sect1>
+</chapter>
+
+ <!-- XXXTR: Should probably put links and resources here. I'm
+ nervous about this chapter as it may require a partial
+ re-write and large modification once DTrace is complete, but
+ at least we can get everyone started ... -->