orm@doc-tcpip.org

Erstellt: März 2000 - Letzte Modifikation: August 2003

[ Main | Local ]


Kernel Tracing mit trace und trcrpt

Als Beispiel Tracen der Firewall-Funktion

Um die Trace-Funktionalität zu erhalten, muß man unter AIX das Fileset bos.sysmgt.trace installieren. Auf einer schon laufenden Firewall muß die Firewall-Software zuerst deinstalliert werden, wie auch bei einem Update.

Der Kernel und die meiste kernelnahe Software (FW, HACMP etc.) ist an sinnvollen Stellen mit "Haken" versehen. An diesen Trace Hooks hängt sich der Trace ein und schreibt eine Meldung, wenn das Programm über den Haken läuft.

Das bedeutet, daß man nur das Tracen kann, was dafür vorgesehen ist. Applikationssoftware ist also, wenn die Programmierer keine Haken eingebaut haben, nur auf der Ebene des AIX zu tracen.

Jeder dieser Haken hat eine ID (12 bit Hook ID). Im Trace mitgeschrieben wird zusätzlich der Typ (4 bit Hook Type) und ein 16 bit großes Feld mit Informationen zu diesem Haken. Je nach Typ kann dieses Feld mehrfach wiederholt werden. Ein Zeitstempel wird immer mitprotokolliert.

Die möglichen Hooks findet man im File /usr/include/sys/trchkid.h oder man setzt das Kommando trcrpt -j ab. Für AIX 4.3.3-11 sieht das so aus:

 
330 ientdd
331 ientdd
332 ientdd
333 ientdd
2FA ethchandd
2FB ethchandd
2DE IPSEC_FILTER
2DF IPSEC_FILTER_INFO
2E0 IPSEC_CAPSUL
2E1 IPSEC_CAPSUL_INFO
2E2 IPSEC_CRYPTO
2E3 IPSEC_CRYPTO_INFO
2E4 IPSEC_TUNNEL
2E5 IPSEC_TUNNEL_INFO
2E9 IPSEC_ERROR
106 DISPATCH
251 NETERR 
252 SOCK
253 SOCK
254 MBUF
255 NETIF_EN
256 NETIF_TOK
257 NETIF_802.3
258 NETIF_X25
259 NETIF_SER
25A TCPDBG
Im Beispiel sind alle Hooks ausgewählt, die etwas mit der Firewall (IPSEC_*) und dem Netzwerk (NETIF_*, ientdd etc.) zu tun haben. Es gibt noch erheblich mehr Hooks für andere Komponenten wie JFS, LVM, NFS, Shared Memory, Interrupts, System Calls etc..

Um den Trace lesbar und auf das Problem bezogen aufnehmen zu können ist es einmal wichtig, die richtigen Hooks zu wählen und das Problem in einer möglichst kurzen Zeit zu reproduzieren.

Der Trace wird dann unter Angabe der Hook-ID gestartet (er schreibt natürlich auch nur diese Events mit):
trace -a -j 2df,2e1,2e3,2e5
Danach wird der Fehler in geeigneter Weise reproduziert und der Trace mit
trcstop
wieder gestoppt. Der Mitschnitt der abgelaufenen Events findet sich nun in einem binären File: /var/adm/ras/trcfile. Das kann mit dem Schalter -ofilename geändert werden.

Der Schalter -a schiebt das Trace-Kommando in den Hintergrund, es läuft also im asynchronous mode.

Es gibt eine Reihe weiterer, nützlicher Schalter. So ist es möglich, Events auszuschließen. Der Schalter -j traced alle angegebenen Events, -k schließt die angegebenen Events aus.

Wichtig ist die Größe des Tracefiles. Diese und die Größe des Puffer kann vorgeben werden (Schalter -L und -T). Auch ist es möglich, den Trace rundlaufen zu lassen (Schalter -l). Das ist praktisch bei Problemen, die sich nicht leicht reproduzieren lassen (so würde der Befehl trace -a -l -L 20000000 -T 10000000 -o /tmp/trace.bin im Kreis laufen, einen Buffer von 1 MB anlegen und nach dem Stoppen ein File von 2 MB erzeugen).

Das erhaltene Trace File wird mit dem Kommando trcrpt nach den Angaben in der Datei /etc/trcfmt formatiert (man kann seine eigenen Formatierungen festlegen: Kommando trcupdate).

Das Kommando wird meist in dieser Art aufgerufen:
trcrpt -ofile -Opid=on,exec=on
Mit dem Schalter -O ist es möglich, ein ganze Reihe Optionen zu setzen. Hier wird trcrpt angewiesen, bei jedem Event die PID und den Pfadnamen auszugeben.

Es gibt noch eine Reihe praktischer Befehle, wie z.B. der trcnm-Befehl. Dieser listet alle Symbole mit ihren entsprechenden Speicheradressen. Mit dem Schalter -a werden alle System Calls und Loader Symbole ausgegeben, mit dem Schalter -K symbol erhält man den Wert des Symbols über das klist-Kommando.

Auch Telnet-Sockets können getraced werden. Die Hooks sind 252 und 253. Der Aufruf wäre also:
trace -a -j 252,253
Der Trace wird dann mit dem Befehl
trcrpt -O pid=on,exec=on -o /tmp/filename
formatiert.


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )