Open Source im professionellen Einsatz
Linux-Magazin 04/2014
© psdesign1, Fotolia

© psdesign1, Fotolia

Kernel- und Treiberprogrammierung mit dem Linux-Kernel – Folge 73

Kern-Technik

,

Das Tracing-Werkzeug Ktap hilft Admins und Kernelentwicklern bei Tuning und Fehlersuche. Diese Kern-Technik zeigt die ersten Schritte mit dem Interpreter im Kernel.

747

Linux bietet schon seit Kernel 2.6.9 vom Oktober 2004 Kernel-Tracing, also die Möglichkeit, Informationen über Kernel-interne Abläufe nachzuverfolgen. Bereits 2005 stellte die "Kern-Technik" die damals aktuellen Kernel-Interfaces Kprobe und Jprobe vor [1]. Da diese in der Handhabung jedoch kompliziert sind, haben sie nur eine sehr kleine Anwenderbasis für sich gewonnen.

Mit Systemtap und Dtrace ist in den letzten Jahren ein Werkzeugkasten entstanden, mit dem sich das Tracing-Interface programmgesteuert nutzen lässt. Damit können Admins und Entwickler komplexe Fehlersuchen realisieren oder Performance-Bottlenecks aufspüren.

Allerdings stehen diese Werkzeugkästen nicht allen offen. Das hängt zum einen mit lizenzrechtlichen Problemen, zum anderen mit den technischen Lösungen als solchen zusammen. Die Dtrace-Lizenz beispielsweise verhindert eine Aufnahme des Codes in den Standard-Linux-Kernel, auch erlauben die Komplexität und die Fixierung der Lösung auf eine einzelne Plattform keinen Einsatz in den kleineren eingebetteten Systemen. Außerdem kann Dtrace das System "einfrieren" lassen – bei produktiven Systemen lässt der Systemadministrator also lieber die Finger davon.

Mit entsprechender Euphorie haben im Mai 2013 Admins und Kernelentwickler den neuen Ansatz Ktap [2] aufgenommen. Als schlanke Lösung erlaubt Ktap das Tracing auf Embedded-Systemen genauso wie auf Servern. Eine eingebaute Skriptsprache zur Definition der zu messenden Abläufe (Tracing), die in Bytecode übersetzt auf einer virtuellen Maschine (VM) im Kernel läuft, bietet nicht nur Flexibilität, sondern auch weitgehende Unabhängigkeit von der zugrunde liegenden Hardware.

Ob auf einer x86-Plattform oder einem System mit ARM-Prozessor (Tablet, Smartphone): Der Code läuft gleichermaßen und vor allem auch in gemischten, verteilten Umgebungen.

Vorbild Minecraft

Beim Skripting hat sich der Ktap-Entwickler Jovi Zhangwei für Lua entschieden, eine Sprache, die speziell zur einfachen Funktionserweiterung von Programmen geschrieben wurde. Als eingebettete Skriptsprache findet Lua sich beispielsweise im Spiel Minecraft, im Netzwerkanalysator Wireshark, in Nmap und im Mediaplayer VLC. Der Interpreter beziehungsweise die zur Abarbeitung notwendige virtuelle Maschine umfasst nur wenige Hundert KByte, der Bytecode selbst besteht aus gerade mal 38 Befehlen. Die Sprache ist ein Mischmasch aus C und Pascal und nicht typisiert. Der Typ einer Variablen, ob Integer oder String, ergibt sich aus dem Kontext.

Ende 2013 hat Linus Torvalds auf Vorschlag von Greg Kroah-Hartman den Ktap-Kerneltreiber in sein Standard-Linux übernommen. Allerdings hagelte es stante pede kräftig Kritik, die Torvalds zwang den Commit wieder rückgängig zu machen. Die Kernelentwickler kritisierten allerdings nicht Ktap selbst, sondern die Geschwindigkeit, mit der ein so umfangreiches und auch sicherheitskritisches Subsystem ohne ausgiebige kritische Kontrolle übernommen werden sollte. Jetzt ist die Aufnahme des Subsystems für einen der nächsten Kernel, vielleicht 3.15, vorgesehen. Dennoch lässt sich Ktap bereits heute sinnvoll einsetzen.

Interpreter im Kernel

Ktap besteht aus zwei Teilen: zum einen aus der zumeist als Modul realisierten Kernelerweiterung »ktapvm.ko« und zum anderen aus der Applikation »ktap« . Bei der Kernelerweiterung handelt es sich um den Interpreter, die VM und die Anbindung an die Kernelfunktionen, die so genannte Runtime-Library. Die Ktap-Applikation lädt Lua-Programme, übersetzt sie in Bytecode und übergibt diesen dem Kernel. Sie initiiert die Abarbeitung, holt die Ergebnisse ab und stellt sie auf dem Bildschirm dar (Abbildung 1).

Abbildung 1: Ktap besteht aus einem Kernelmodul und einer Applikation.

Die Installation von Ktap gestaltet sich unter Ubuntu 12.04 LTS erfreulich problemlos. Der mitgelieferte Betriebssystemkern ist bereits mit den benötigten Optionen »CONFIG_EVENT_TRACING« , »CONFIG_PERF_EVENTS« , »CONFIG_DEBUG_FS« und »CONFIG_FTRACE_SYSCALLS« kompiliert. Damit braucht man nur noch den Ktap-Quellcode per Git auf den Rechner zu holen und per »make« zu übersetzen. Es empfiehlt sich, zuvor noch die Pakete »elfutils« und »libelf-dev« zu installieren. Mit Hilfe dieser Werkzeuge beziehungsweise Bibliotheken verarbeitet Ktap ELF-Dateien (Executable and Linkable Format) sowie die in Programmdateien hinterlegten Meta-Informationen und löst Adressen auf. Damit ist es Ktap auch möglich, Applikationen zu überwachen. Listing 1 zeigt die Kommandos zum Installieren im Detail [3].

Listing 1

Ktap installieren

01 $ sudo apt-get install elfutils libelf-dev
02 $ git clone http://github.com/ktap/ktap.git
03 $ cd ktap
04 $ make
05 $ sudo make load

Nach dem erfolgreichen »make load« aus dem Quellcode-Verzeichnis heraus ist Ktap einsatzbereit. Optional kann der Admin noch »sudo make install« sowie danach »depmod« aufrufen. Damit installiert er Kernelmodul und Applikation für den systemweiten Zugriff. Allerdings wird das Kernelmodul beim nächsten Update des Linux-Kernels nicht automatisch neu generiert. Für alle Freunde des Editors Vim installiert »make install« gleich Syntaxdateien mit, die die Schlüsselwörter im Editor farblich hervorheben.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kern-Technik

    Die Ktap-Runtime-Library ermöglicht detaillierte Einsichten in den Linux-Kernel und eigene Treiber. Das Programmieren von Skripten im Ktap-eigenen Lua-Dialekt ist zum Glück leicht zu erlernen.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.