zurück zum Artikel

Die Neuerungen von Linux 2.6.38

| Thorsten Leemhuis

Durch eine kleine Änderung am Prozess-Scheduler fühlen sich Systeme mit 2.6.38 manchmal erheblich flotter an; real schneller laufen manche Aufgaben durch tief greifende Änderung am VFS (Virtual File System). Aus den vielen Änderungen am Treiber-Code stechen bessere WLAN-Treiber und ausgebaute Unterstützung für aktuelle Grafikchips von AMD und Nvidia hervor.

Zehn Wochen – mehr haben Linus Torvalds und seine Zuarbeiter diesmal nicht gebraucht, um die letzte Nacht freigegebene [1] Version 2.6.38 des Linux-Kernel fertig zu stellen. Beinahe [2] wäre der Kernel sogar noch einige Tage früher erschienen; damit zeichnet sich mehr und mehr ab, dass die Kernel-Entwickler neuerdings nur noch 65 bis 80 Tage zur Fertigstellung einer neuen Version brauchen; vor ein oder zwei Jahren waren es typischerweise zwei Wochen mehr.

Neuerungen gab es dennoch wieder zuhauf – etwa die in der Online-Welt schon viel besprochene Auto-Gruppierung von Prozessen einer Session, welche die Reaktionsfreude der Desktop-Umgebung unter bestimmten Bedingungen erheblich steigert. Die zweite herausragende Neuerung sind einige Umbauten am Virtual File System (VFS), dem Vermittler zwischen Dateisystem-Code und Userspace; Torvalds hatte schon lange auf die Integration dieser Patches gehofft und zeigte sich in zwei Mails sehr angetan von den Performance-Verbesserungen, die er bei einer einfachen Dateisystemsuche mit "find" feststellten konnte.

Einige der anderen Änderungen dürften für manche Anwender aber ebenso wichtig sein – etwa die Grafiktreiber für neue Grafikchips von AMD und Nvidia sowie die neuen oder verbesserten WLAN-Treiber für Chips von Atheros, Broadcom, Intel, Ralink und Realtek. Server-Admins hingegen dürften Techniken wie das neue SCSI-Target LIO oder Transmit Packet Steering (XPS) gefallen.

Das folgende Kernel-Log [3] bietet einen Überblick über diese und zahlreiche weitere Neuerungen von Linux 2.6.38. Sie sind kurz- oder langfristig häufig auch für Linux-Anwender von Bedeutung, die ihre Kernel nicht selbst übersetzen: Zukünftige Linux-Distributionen werden auf Kernel 2.6.38 oder dessen Nachfolger aufsetzen und so dessen Verbesserungen zu den Anwendern tragen – das Ende April erwartete Ubuntu 11.04 und das für Mitte Mai avisierte Fedora 15 werden beide 2.6.38 einsetzen. Wie bei Kernel-Logs zu einer neuen Linux-Version üblich, wagen wir auch hier am Ende einen kurzen Ausblick auf einige der Neuerungen, die zur Aufnahme in 2.6.39 anstehen.

Mehr Infos

Im Detail

Bereits in den vergangenen Wochen hat die Kernel-Log [4]-Mini-Serie "Was Linux 2.6.38 bringt" einen detaillierten Überblick über die Änderungen der Linux-Version 2.6.38 gegeben:

1. Grafik-Hardware [5]

2. Dateisysteme [6]

3. Netzwerk [7]

4. Storage [8]

5. Architektur und Infrastruktur [9]

6. Weitere Treiber [10]

Dieser Artikel zu den Neuerungen von Linux 2.6.38 fasst die wichtigsten der dort genannten Verbesserungen zusammen und gibt zusätzlich noch einen Ausblick auf 2.6.39.

Einige der Änderungen haben wir im Rahmen der Mini-Serie allerdings erheblich ausführlicher beschrieben und dort auch auf weitere Informationsquellen verwiesen; die Artikel der Mini-Serie listen außerdem noch zahlreiche nicht so bedeutende, aber keineswegs unwichtige Änderungen auf.

Am Ende jedes Artikels der Mini-Serie findet sich unter der Überschrift "Die kleinen Perlen" zudem Listen mit etlichen kleineren Neuerungen. Einige von ihnen jedoch sind für Anwender von großer Bedeutung, die bestimmte Hardware besitzen. Der Artikel zu Treibern etwa verweist auf zahlreiche Patches, die die Unterstützung der Audio-Hardware verschiedener PC-, Notebook- und Mainboard-Modelle verbessern; in den Listen zu den Änderungen im V4L/DVB-Subsystem finden sich zudem einige Produktnamen von TV-Hardware, welche die neue Version des Linux-Kernels nun ansteuern kann.

Für verhältnismäßig viel Aufsehen sorgte um den Jahreswechsel eine als "Wunderpatch" oder "Autogroup scheduling feature" bekannt gewordene und in 2.6.38 integrierte Änderung [12], welche die Interaktivität von Desktop-Umgebungen und -Anwendungen in bestimmten Situationen verbessert. Das gelingt allerdings nicht durch magisch erzeugte CPU-Ressourcen, sondern durch die automatische Gruppierung aller Prozesse einer Session zu einer Cgroup (Control Group) – das sorgt bei Vollauslastung der CPU für eine andere Verteilung der Prozessorzeit, was zu einem reaktionsschnelleren Desktop führen kann, sofern die CPU-lastigen Prozesse in einer anderen Gruppe stecken als die Desktop-Umgebung.

Details zur Funktionsweise liefert ein älteres Kernel-Log [13] und ein Artikel bei LWN.net [14]. Scheduler-Maintainer Ingo Molnar und Linus Torvalds zeigten sich von dem Patch angetan und lobten ihn im Haupt-Git-Pull-Request [15] für den Scheduler-Code und der Ankündigung [16] von 2.6.38-rc1. Die größte Wirkung zeigt sich allerdings bei Bedingungen, wie sie bei Kernel-Hackern häufig auftreten: Das Benutzen der Desktop-Oberfläche, während im Terminal eine CPU-lastige Aufgabe läuft – etwa das Kompilieren eines Kernels. Keine nennenswerten Einfluss hat die Gruppierung in Situationen, wo zwei Desktop-Anwendungen um die Prozessorzeit wetteifern.

Mehr Infos

Informationsquelle Quellcodeverwaltung

Viele der Links im Artikel verweisen auf den für die Neuerung jeweils relevanten Commit [17] im Web-Frontend [18] des von Linus Torvalds mit Git [19] verwalteten Linux-Quellcodezweigs auf kernel.org [20]. Dort finden sich viele weitere Informationen zur jeweiligen Änderungen – speziell der Kommentar im oberen Bereich der vom Git-Web-Frontend angezeigten Webseite zu einzelnen Commits ist häufig eine überaus ergiebige Quelle für weitere Informationen, denn dort erklärt der Autor des Patches [21] normalerweise die Hintergründe der Änderungen und deren (erhoffte) Auswirkung. Gelegentlich finden sich dort auch Benchmark-Ergebnisse oder Verweise auf weitere Informationsquellen.

Auf den Commit-Kommentar folgt eine Auflistung der durch den Patch veränderten Dateien. Über den hinter dem Dateinamen zu findenden Link "patch" kann man sich anzeigen lassen, wie der Commit die jeweilige Datei verändert; "history" zeigt frühere Änderungen der Datei an. Weiter unten finden sich alle im Rahmen des Commits durchgeführten Änderungen im Unified-Diff-Format. Dabei handelt es sich größtenteils um Modifikationen am Quellcode des Linux-Kernels – es sind aber nicht selten auch Anpassungen an der Dokumentation oder an Kommentaren im Code darunter, daher finden dort auch Anwender ohne Programmierkenntnisse viele hilfreiche Informationen.

Die Radeon-DRM/KMS-Treiber des Kernels unterstützen nun auch den Grafikkern der von AMD unter dem Oberbegriff Fusion vermarkteten und Anfang Januar [23] eingeführten Ontario-Prozessoren (u. a. 1 [24], 2 [25], 3 [26], 4 [27], 5 [28], 6 [29]). Im Schnellverfahren stießen Patches zur Unterstützung der die Radeon-HD-Modelle 62xx bis 68xx zum Kernel (u. a. 1 [30], 2 [31], 3 [32], 4 [33]), denn die war erst zwei Tage nach Beginn des Merge Window von 2.6.38 veröffentlicht worden [34]. Die Chips auf diesen seit Oktober [35] verkauften Grafikkarten gehören zur "Northern Islands" (NI) genannten Familie, zu der auch die GPUs (Graphics Processing Units) der im Dezember [36] vorgestellten Radeon-HD-Modelle 6950 und 6970 zählen. Ein DRM/KMS-Treiber für Letztere [37] sollte in 2.6.39 einziehen; der wird aber vermutlich noch keine 3D-Beschleunigung bieten, wie sie Linux 2.6.38 bei den anderen NI-Grafikchips und den GPUs der Ontario-Prozessoren beherrscht.

Der DRM/KMS-Treiber für Grafikchips von Intel aktiviert bei den Grafikkernen [38] der Anfang Januar [39] vorgestellten Sandy-Bridge-Prozessoren (Core-Serien i3-2000, i5-2000 und i7-2000) nun wenn möglich den Self-Refresh, um die Leistungsaufnahme zu reduzieren. Durch den Dynamic Render P-state Support [40] und die Overclocking-Unterstützung [41] kann der Grafikkern von Sandy-Bridge-CPUs jetzt die Taktfrequenz ändern, was je nach Umgebungsbedingungen die Performance steigert oder den Stromverbrauch reduziert.

Der Nouveau-DRM/KMS-Treiber von 2.6.38 wird alles Nötige zum Nutzen der 2D- und 3D-Beschleunigung der auch als NVC0 [42] bezeichneten Fermi-Chips mitbringen, die auf den GeForce-Modellen der 400er- und 500er-Serie sitzen (u. a. 1 [43], 2 [44], 3 [45], 4 [46]). Um diese Funktionen zu nutzen, bedarf es derzeit einer proprietären Firmware [47]. Wie üblich sind natürlich auch Unterstützung in Libdrm, Mesa 3D und dem Nouveau-Treiber für X.org erforderlich. Die Nachfolger der derzeit aktuellen Mesa-3d-Version 7.10 dürften diese mitbringen, da der Entwicklerzweig bereits alles Nötige [48] enthält.

Die DRM-Infrastruktur haben die Kernel-Hacker um Unterstützung für die im Commit-Kommentar detailliert erläuterten und für die Einhaltung der OpenML [49] (Open Media Library) wichtigen "Precision Vblank Timestamps [50]" erweitert. Die ebenfalls neue und via DRI2 nutzbare Pageflipping-Unterstützung kann diese Zeitstempel ebenfalls zu Hilfe nehmen. Durch sie ist der Kernel besser und effizienter als zuvor in der Lage, die Freigabe eines aktualisierten Bildes mit dem Moment zu synchronisieren, in dem die Grafik-Hardware mit der Ausgabe eines neuen Bilds beginnt (Vsync). Das beseitigt Bildstörungen wie Flackern, Tearing oder unvollständiges Rendering und kann zudem die 3D-Performance verbessern. Die für beide Funktionen nötige Unterstützung in den Grafiktreibern bieten ab dem 38er-Kernel die Treiber für AMD (1 [51], 2 [52]) und Intel (1 [53], 2 [54]); der Nouveau-Treiber für Nvidia-GPUs kann bislang nur Page-Flip-Unterstützung (1 [55], 2 [56]).

Die für 2.6.38 integrierten Optimierungen am VFS (Virtual File System), über das Userspace-Anwendungen auf die verschiedenen Dateisysteme zugreifen, erwähnte Torvalds mit einer gewissen Begeisterung und recht ausführlich in der Mail [58] zur ersten Vorabversion von 2.6.38 (u. a. 1 [59], 2 [60], 3 [61], 4 [62], 5 [63], 6 [64], 7 [65]). Durch diese unter Namen wie "RCU-based name lookup" entwickelten Änderungen nutzt das VFS, das allen Dateisystemen zugrunde liegt, feineres Locking mit RCU (Read Copy Update), was unter anderem einige Verzeichnisoperationen erheblich beschleunigen soll. Davon sollen nicht nur größere Server mit vielen Prozessorkernen, sondern auch Allerweltssysteme profitieren; Torvalds gibt in der Freigabemail an, bei einigen Tests Performance-Verbesserungen von 30 bis 50 Prozent zu sehen. Bereits in einer früheren Mail [66] zur Aufnahme der tief greifenden Optimierungen am VFS, das für die zuverlässige Funktion des Kernels sehr wichtig ist, hatte er geschrieben, dass ein mit gefüllten Caches in seinem Home-Verzeichnis ausgeführtes Find-Kommando rund 35 Prozent schneller arbeite – und das, obwohl Find nur mit einem Thread arbeite.

Ext3 und XFS werden mit 2.6.38 das beim 37er-Kernel eingeführte [67] Batched Discard unterstützen, das insbesondere für SSDs mit langsamer Trim-Funktion interessant ist (1 [68], 2 [69], 3 [70]). Im Merge Window von 2.6.37 hatten die Kernel-Hacker einige Patches zum Steigern der Ext4-Performance integriert. Das weiterhin experimentelle COW-Dateisystem Btrfs kann zur transparenten Kompression neben Zlib nun auch LZO nutzen, das typischerweise erheblich schneller, aber nicht ganz so effizient packt; einige Messwerte, die das untermauern, und einen Vergleich zu einem unkomprimierten Dateisystem liefert der Commit-Kommentar (1 [71], 2 [72]). Btrfs beherrscht nun auch schreibgeschützte Snapshots [73]; zudem wurde zum RC7 ein zuvor auf der LKML diskutierten Fehler [74] im Btrfs-Code beseitigt [75], durch den eine kopierte Datei unter Umständen leer war, wenn man sie erst kurz zuvor angelegt hat und mit aktuellen Versionen des zu den Coreutils gehörenden Programms "cp" kopiert.

Das von vielen Linux-Distributionen für Live- und Installationsmedien verwendete Dateisystem SquashFS unterstützt ab 2.6.38 die Komprimierung der Dateisystem-Images mit dem aus LZMA hervorgegangenen Kompressionsformat XZ, das für sehr hohe Packdichten bekannt ist (1 [76], 2 [77]) – damit dürften einige Live-Medien in Zukunft Platz für ein paar Programme mehr bieten. Das bei optischen Medien wie DVD genutzte UDF-Dateisystem kommt ab 2.6.38 nun ohne [78] das Big Kernel Lock (BKL) aus. Damit haben die Entwickler nach der BKL-Entfernungs-Aktion [79] bei 2.6.37 nun den letzten auf typischen Systemen eingesetzten Kernel-Bestandteil vom BKL befreit. Es gibt zudem einen Schlachtplan, um bald auch die verbliebenen Nutzer des BKLs aus der Welt zu schaffen (1 [80], 2 [81]).

Mehr Infos

Linux-Kernel herunterladen

Neue Linux-Versionen sind über Kernel.org [83] erhältlich; dessen Inhalte spiegeln auch zahlreiche Mirror-Server [84] in Deutschland [85], Österreich [86] und der Schweiz [87]. Linux-Anwender, die sich nicht intensiv mit dem Kernel und dessen Umfeld beschäftigen, sollten neue Linux-Treiber und -Kernel aber nicht auf eigene Faust einspielen, sondern auf die Kernel der Linux-Distributoren zurückgreifen. (...mehr... [88])

Zum SCSI-Subsystem stieß [89] das im Rahmen von linux-iscsi.org [90] entwickelte Multiprotocol Storage Target, kurz LIO (für linux-i scsi.org). Mit ihm lassen sich Datenträger als SCSI-Targets aufsetzen, auf das andere Systeme per iSCSI, Fibre Channel oder FCoE (Fibre Channel over Ethernet) zugreifen. Diese Lösung zum Einrichten eines SAN (Storage Area Network) ersetzt bald das schon länger im Kernel enthaltene STGT (SCSI Target Framework; Kernel-Konfigurations-Option CONFIG_SCSI_TGT). Auch die Entwickler des SCST [91] (SCSI Target Subsystem for Linux) hatten ihre Lösung als Ersatz propagiert, zogen aber den Kürzeren. Einen Kurzüberblick über die Funktionen von LIO liefert der Commit-Kommentar [92]. Einige Hintergründe zu den technischen Unterschieden zwischen den verschiedenen SCSI-Target-Implementationen und den Gründen für die Festlegung auf LIO liefert der LWN.net-Artikel "A tale of two SCSI targets [93]".

Durch den Einsatz von mehreren Workqueues [94] in Dmcrypt nutzt der Device Mapper (DM) nun Multi-Core-Prozessoren besser und sollte so flotter ver- und entschlüsseln. Über neue Schnittstellen [95] kann der Device Mapper auf Funktionen des Subsystems MD (Multiple Devices) zur Verwaltung von Software-RAIDs zugreifen, die für die RAID-Level 4, 5 und 6 zuständig sind. Zusammen mit einer frischen Version von Dmraid sollte das langfristig für eine bessere Unterstützung der von vielen Mainboard-Chipsätzen gebotenen Host-RAID-5-Funktionen sorgen, für die bislang spezielle Kernel-Patches erforderlich waren, die manchen Distributionen nicht beiliegen.

Nach den bei 2.6.35 [97] integrierten Techniken Receive Flow Steering (RFS) und Receive Packet Steering (RPS) hat Google-Entwickler Tom Herbert nun das Transmit Packet Steering (XPS) eingebracht (1 [98], 2 [99], 3 [100]). Darüber lässt sich bei Multiqueue-Netzwerkkarten eine Zuordnung zwischen Netzwerk-Queue und Prozessorkern festlegen, was die Effizienz der Prozessor-Caches in bestimmten Situationen verbessert und so den Datendurchsatz bei schnellen Netzwerkkarten steigert – die Idee dahinter ist somit die selbe wie bei RPS, nur dass es nicht um das Empfangen, sondern das Senden von Netzwerkpaketen geht. Auf einem Testsystem mit 16 Prozessorkernen und einer Netzwerkkarte mit ebenso vielen Queues stieg die Sendeleistung durch XPS um 20 Prozent, wie Herbert im Commit-Kommentar erläutert – das Messverfahren war allerdings auch darauf ausgelegt, die Vorteile der primär für Server interessanten Technik zu zeigen.

Der für Virtualisierung interessante Treiber macvlan bietet nun einen "Passthru"-Modus [101], in dem der Treiber viele Fähigkeiten des verwendenden Netzwerk-Chips weiterreicht, wodurch sich in Gastsystemen VLANs konfigurieren oder die MAC-Adresse verändern lassen. Die im Rahmen von open-mesh.org [102] entwickelte und bislang im Staging-Bereich angesiedelte Mesh-Implementierung batman-adv (Better Approach To Mobile Ad-Hoc Networking Advanced) wurde so weit verbessert, dass sie mit 2.6.38 das Siegel "unreif" ablegt und vom Staging-Bereich in das Netzwerk-Subsystem umzieht (1 [103], 2 [104]).

Zum WLAN-Subsystem stieß der als experimentell gekennzeichnete Treiber rtl8192ce [105] für Realteks 802.11n-PCIe-Chips RTL8188CE und RTL8192CE. Der Intel-Treiber iwlwifi unterstützt nun einige neue, in der aktualisierten Kconfig-Datei [106] erwähnte WLAN-Chips von Intel – darunter die zweite Generation der 6000er-Chips. Die schon bei 2.6.37 im Treiber b43 ausgebaute [107], aber bei dieser Version noch unvollständige Unterstützung für einige 802.11n-WLAN-Chips von Broadcom wurde weiter überarbeitet und soll jetzt funktionieren (u. a. 1 [108], 2 [109], 3 [110], 4 [111]); in dem Zuge [112] wurde die b43-spezifische Konfigurations-Option zur Unterstützung von 802.11n-Chips umbenannt und verliert die Auszeichnung "Broken". Ähnlich verhält es sich bei den Rt2x00-Treibern für Ralink-Chips der RT30xx-Serie: Die anfangs rudimentäre und über Option zuschaltbare Unterstützung für die PCI-/PCIe-Chips RT3090, RT3091 und RT3092 sowie die USB-Chips RT3070, RT3071 und RT3072 ist nun [113] regulärer Bestandteil der Treiber rt2800pci und rt2800usb.

Durch die neuen Transparent Huge Pages (THP) handhabt der Kernel große Speicherseiten deutlich flexibler und kann sie in bestimmten Situationen sogar automatisch verwenden (u. a. 1 [115], 2 [116], 3 [117]); das sollte langfristig die umständliche und nicht sonderlich flexible Einbindung via HugeTblFs unnötig machen. Speziell bei großen Datenbanken oder Virtualisierung verbessern große Speicherseiten die Performance, weil sie Kernel und Prozessor die Speicherverwaltung erleichtern und einige Funktionseinheiten moderner CPUs zum Zug kommen, die sonst ungenutzt blieben.

Zu den wichtigsten Neuerung an KVM [118] zählt die Unterstützung [119] für die Transparent Huge Pages und für die Flush-By-Asid [120] genannten Virtualisierungserweiterungen von AMDs Prozessoren der Bulldozer-Familie, die Mitte des Jahres [121] erwartet werden. Nach dem bei 2.6.37 integrierten Xen-Dom0-Support zogen [122] einige Grundlagen [123] für Xen-Backend-Treiber in den Kernel ein – die zum sinnvollen Betrieb einer Linux-Dom0 benötigten Backend-Treiber wurden aber nicht rechtzeitig fertig und folgen vermutlich bei 2.6.39.

Der 38er-Kernel bringt eine Library [124] zum Dekomprimieren des aus LZMA hervorgegangenen und für hohe Packdichten bekannten XZ mit. Darauf setzt nicht nur das SquashFS auf, das jetzt auch XZ-Unterstützung bietet, sondern auch Code, durch den der Kernel beim Booten Teile seiner selbst und Initial Ramdisks (Initrds) entpacken kann, die mit Hilfe von XZ komprimiert wurden (1 [125], 2 [126]).

Die Kernel-Hacker nahmen einige weitere Userland-Tools in das Unterverzeichnis tools/ der Linux-Quellen auf; darunter das ursprünglich autotest genannte Skript ktest.pl [127], das beim Verteilen und Testen [128] von Kerneln auf verschiedenen Systemen assistiert (u. a. 1 [129], 2 [130], 3 [131]). Neu ist auch Turbostat [132], das Informationen zur den von X86-Prozessoren genutzten Frequenzen und Schlafmodi liefert; dabei zeigt es auch an, ob die CPU per Turbo Boost auf die höchsten Taktfrequenzen wechselt.

Der Audio-Code des Kernels kann ab 2.6.38 [133] ohne periodischen Interrupt arbeiten, sofern auch der eingesetzte Alsa-Sound-Treiber das beherrscht – für erste [134] ist das nur der Treiber "hda_intel", der trotz seines Namens auch HDA-Hardware von AMD und Nvidia anspricht. Zusammen mit aktuellen, auf "timer-based scheduling [135]" setzenden Versionen von Pulseaudio reduziert das die Zahl der vom System ausgelösten Interrupts, wodurch die CPU im Idealfall länger in stromsparenden Schlafzuständen verweilt. Pulseaudio-Entwickler Lennart Poettering wird im Commit-Kommentar mit den Worten zitiert, der Patch sei sehr interessant und wünschenswert; er habe lange auf so etwas gewartet.

Der Treiber Synaptic erkennt [136] auf neueren Synaptic-Touchpads nun mehrere Finger und beherrscht "Semi Multitouch" (semi-mt). Der Code für Human Input Devices (HID) enthält ab 2.6.38 einen generischen, aber noch unfertigen Treiber für Multitouch Panels verschiedener Hersteller (u. a. 1 [137], 2 [138], 3 [139], 4 [140]). Der schon länger Autosuspend unterstützende USB-Code nutzt nun auch die noch junge Infrastruktur zur Nutzung und Einstellung der zur Laufzeit verwendbaren Schlafmodi. Dadurch taucht für die Geräte im Sysfs die Datei power/autosuspend_delay_ms auf; die bisher zur Konfiguration genutzte Datei power/autosuspend gilt als deprecated und dürfte langfristig verschwinden. Details liefern der Kommentar [141] zum Commit und die dort enthaltenen Änderungen an der Dokumentation.

Mehr Infos

Was sich an den Treibern für Ihr System geändert hat

Über das Git-Web-Frontend auf Kernel.org [142] lassen sich Informationen zu Änderungen an einzelnen Dateien des Linux-Kernels aufrufen – darüber können Sie herausfinden, ob es Neuerungen an den auf Ihrem System eingesetzten Treibern gab. Dazu muss man allerdings wissen, wo sich die Treiberdateien im Quellcodebaum des Linux-Kernels finden. Bei den modularisierten Kerneln der Linux-Distributionen helfen häufig die Ausgaben bei der Suche, welche das Programm modinfo zusammen mit den von lsmod ausgegebenen Modulnamen aufruft:

$ /sbin/modinfo e100 e1000 | grep filename:
filename: /lib/modules/[...]/kernel/drivers/net/e100.ko
filename: /lib/modules/[...]/kernel/drivers/net/e1000/e1000.ko

Liegt ein kompiliertes Modul etwa in [...]/kernel/drivers/net/e100.ko, dann findet sich dessen Quellcode im Linux-Quellcodearchiv normalerweise im Verzeichnis drivers/net/ in Dateien mit ähnlichem Namen – etwa e100.c im Falle des Treibers e100 für 100-MBit-Netzwerkhardware von Intel. Andere Module wie der für Intels PCI-Gigabit-LAN-Chips zuständige Treiber e1000 haben hingegen ein eigenes Verzeichnis unterhalb von drivers/net/.

Kennt man die ungefähre Position des Treiber-Quellcodes, navigiert man im Git-Webinterface der Linux-Quellen [143] über die Tree-Ansicht zu den jeweiligen Quellcode-Dateien und ruft über den Link "History" eine Übersicht über die jüngsten Änderungen an den zugehörigen Dateien oder dem ganzen Verzeichnis auf. Im Verzeichnis für die Netzwerktreiber [144] lassen sich so beispielsweise die Änderungen am Treibercode von e100 [145] (drivers/net/e100.c) und e1000 [146] (drivers/net/e1000/) anzeigen und begutachten.

Mit den Optimierungen am VFS und der automatischen Gruppierung von Prozessen hat Linux 2.6.38 zwei Aufsehen erregende Neuerungen, durch die typische Linux-Notebooks und -PCs schneller werden oder sich flotter anfühlen (können). Damit sticht der unter anderem für Ubuntu 11.04 und Fedora 15 vorgesehen Linux-Kernel 2.6.38 ein wenig hervor, denn bei den Vorgängern gab es nur wenige Neuerungen, die vergleichbar viel Aufmerksamkeit auf sich zogen.

Für den Alltag sind manche der anderen Änderungen ähnlich wichtig, auch wenn sie nicht so viel Beachtung fanden. Der Multicore-Support in dmcrypt etwa dürfte so manches Notebook ein klein wenig flotter machen, denn dort sind verschlüsselte Datenträger häufig anzutreffen. Und für viele Anwender ist die bessere Hardware-Unterstützung des neuen Kernels ebenso wichtig oder wichtiger als die Performance, erspart sie einem doch die sonst häufig mühsame Treiber-Installation; bei 2.6.38 stechen aus den vielen neuen und überarbeiteten Treibern etwa die für die aktuellen Grafikchips von AMD und Nvidia sowie jene für WLAN-Hardware von Broadcom, Intel, Ralink oder Realtek hervor.

Linux- Version Anzahl Dateien¹ Zeilen
Quelltext²
(Ohne Dokum.)
Entwicklungs-
zeitraum
Anzahl Commits³ Diffstat⁴
2.6.32 [148] 30485 12610030
(11242136)
84 Tage 10998 10315 files changed,
 1092987 insertions(+),
 530428 deletions(-)
2.6.33 [149] 31565 12990041
(11564768)
83 Tage 10871 9673 files changed,
 859458 insertions(+),
 479452 deletions(-)
2.6.34 [150] 32297 13320934
(11861616)
82 Tage 9443 11154 files changed,
 609854 insertions(+),
 278958 deletions(-)
2.6.35 [151] 33316 13545604
(12250679)
77 Tage 9801 8889 files changed,
 691927 insertions(+),
 467252 deletions(-)
2.6.36 [152] 34301 13499457
(12539782)
80 Tage 9501 9202 files changed,
 582139 insertions(+),
 628362 deletions(-)
2.6.37 [153] 35191 13996612
(13006967)
76 Tage 11446 11104 files changed,
 1093202 insertions(+),
 598350 deletions(-)
2.6.38 [154] 35877 14294439
(13294464)
69 Tage 9542 9133 files changed,
 747809 insertions(+),
 455603 deletions(-)
¹ find . -type f -not -regex '\./\.git/.*' | wc -l
² find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l (find . -name *.[hcS] -not -regex '\./\.git.*' | xargs cat | wc -l)
³ git-log --no-merges --pretty=oneline v2.6.(x-1)..v2.6.(x) | wc -l
⁴ git diff --shortstat v2.6.(x-1)..v2.6.(x)

Direkt nach der Freigabe von 2.6.38 beginnt nun das ungefähr zwei Wochen lange Merge Window [155], in dem die Kernel-Entwickler den Großteil der Änderungen für die nächste Kernel-Version in den Hauptentwicklungszweig von Linux [156] integrieren. Für diese erste Phase im Entwicklungszyklus [157] von 2.6.39 haben die Kernel-Hacker bereits zahlreiche Änderungen vorbereitet.

Darunter sind die bereits erwähnten Patches, die das Big Kernel Lock bei den letzten verbliebenen Nutzern entfernen, sofern diese nicht auf dem Abstellgleis "Staging-Zweig" landen – dort dürften sie in einigen Monaten rausfliegen, wenn sich nicht noch jemand des Codes annimmt. Es werden wohl auch die "Forced threaded interrupt handlers [158]" in 2.6.39 einziehen, durch die nahezu alle Interrupts durch Threads abgearbeitet werden, wenn man den Kernel mit einem bestimmten Parameter startet – damit käme eine der letzten wichtigen Funktionen im Hauptentwicklungszweig von Linux an, die der RT-Tree [159] nutzt, um Linux Echtzeit-Fähigkeiten zu verleihen.

Im Kernel Linux-Next, der derzeit die Verbesserungen für 2.6.39 vorbereitetet, findet sich außerdem Unterstützung für die sechste Generation des Programms ipset [160], mit dem sich bestimmte Netfiler-Regel optimieren lassen. Zur Aufnahme sind zudem zahlreiche Treiber vorgesehen – darunter der rudimentäre [161] Grafiktreiber für den GMA500-Grafikchips in Intels Poulsbo/US15W, der den Staging-Bereich ansteuert, und der Treiber rtl8192cu [162] für die Realtek-WLAN-USB-Chips RTL8192CU und RTL8188CU. Möglicherweise schaffen es ja auch die Xen-Entwickler endlich, die Dom0-Unterstützung zu komplettieren.

Mehr Infos

Entwicklungszyklus des Linux-Kernels

Durch den öffentlichen Entwicklungsprozess (und einen tiefen Blick in den Kaffeesatz) können das Kernel-Log und der von der Linux-Foundation gewartete Radarschirm des Linux Weather Forecast [163] bereits bei der Vorstellung einer neuen Kernel-Version einige Neuerungen benennen, die die folgende Versionen mitbringen dürfte. [...] (...mehr... [164])

Die nächsten zwei Wochen werden zeigen, welche Verbesserungen Torvalds tatsächlich in den Hauptentwicklungszweig integriert. Wie üblich wird das Kernel-Log [165] in c't [166] und auf heise open [167] über diese und andere wichtige Neuerungen am Linux-Kernel und in dessen Umfeld berichten – dazu zählen auch neue Versionen der Stable-Kernel-Series [168] (2.6.38.y), die in den kommenden Wochen den einen oder anderen Fehler korrigieren dürften, der bei der Arbeit an 2.6.38 übersehen wurde oder nicht rechtzeitig korrigiert werden konnte.

Zudem werden wir auf heise open wie üblich im Rahmen einer Artikel-Serie mit dem Titel "Was 2.6.39 bringt" umfassend die Neuerungen der nächsten Kernel-Version beschreiben. Sofern Torvalds und seine Mitstreiter im üblichen Tempo arbeiten, dürfte Linux 2.6.39 Ende Mai oder Anfang Juni erscheinen; die wichtigsten Änderungen dieser Version wird dann wieder ein Kernel-Log auf heise open [169] zusammenfassen.

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs [170] auf heise open [171]. Neue Ausgaben des Kernel-Logs [172] werden auf den Identi.ca [173]- und Twitter [174]-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H Open [175]" erscheinenden Übersetzungen auf den Identi.ca [176]- und Twitter [177]-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige später meist auch im Kernel-Log erwähnte Themen als "@kernellogauthor" bei Identi.ca [178] und Twitter [179]. (thl [180]) (thl [181])


URL dieses Artikels:
https://www.heise.de/-1203073

Links in diesem Artikel:
[1] http://thread.gmane.org/gmane.linux.kernel/1113127
[2] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-6-Treiber-1202105.html
[3] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[4] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[5] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-1-Grafik-1175970.html
[6] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-2-Dateisysteme-1192231.html
[7] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-3-Netzwerk-1195394.html
[8] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-4-Storage-1199339.html
[9] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-5-Architektur-Infrastruktur-und-Virtualisierung-1200909.html
[10] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-6-Treiber-1202105.html
[11] 
[12] http://git.kernel.org/linus/5091faa449ee0b7d73bc296a93bca9540fc51d0a
[13] https://www.heise.de/hintergrund/Kernel-Log-Flinker-mit-Prozessgruppen-1140656.html
[14] http://lwn.net/Articles/418884/
[15] http://thread.gmane.org/gmane.linux.kernel/1084129
[16] http://thread.gmane.org/gmane.linux.kernel/1088915
[17] http://www.heise.de/glossar/entry/Commit-397925.html
[18] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[19] http://git.or.cz/
[20] http://kernel.org/
[21] http://www.heise.de/glossar/entry/Patch-395546.html
[22] 
[23] https://www.heise.de/news/AMD-laeutet-Fusion-Zeitalter-ein-1163138.html
[24] http://git.kernel.org/linus/b0e664140a170382531a8c8b5396bf7e6903d5e3
[25] http://git.kernel.org/linus/d5e455e48b095df7f5381dff028f8523aaf565a9
[26] http://git.kernel.org/linus/958261d1e8755d1423beb0951ed0b9552c96f638
[27] http://git.kernel.org/linus/2f062fda4f83932b87b3b6c903eeade43422245a
[28] http://git.kernel.org/linus/11fa1618e327af7f08085e134b3325de9caf7a94
[29] http://git.kernel.org/linus/439bd6cde45d0bff4f97513b01b976b9f72ae1f0
[30] http://git.kernel.org/linus/1fe183050f71ba183fe2d693bbef5fa605723043
[31] http://git.kernel.org/linus/58c2e9f02ad09b4375eb11c1f65565a83310deca
[32] http://git.kernel.org/linus/0af62b0168043896a042b005ff88caa77dd94d04
[33] http://git.kernel.org/linus/2b2fd604bda01bfea9f1657ca468c134448e03a5
[34] http://thread.gmane.org/gmane.comp.video.dri.devel/53090
[35] https://www.heise.de/news/Radeon-HD-6850-und-6870-AMD-laeutet-HD-6000-Serie-ein-1123042.html
[36] https://www.heise.de/news/AMD-praesentiert-Radeon-HD-6950-und-HD-6970-1153065.html
[37] http://thread.gmane.org/gmane.comp.video.dri.devel/55212
[38] http://git.kernel.org/linus/1398261a2e84c537c409259cfe9db3d0abcd9f99
[39] https://www.heise.de/news/Startschuss-fuer-Intels-Sandy-Bridge-Prozessoren-1162250.html
[40] http://git.kernel.org/linus/3b8d8d91d51c7d15cda51052624169edf7b6dbc6
[41] http://git.kernel.org/linus/a6044e23b784544fe567db75dbf9c4f684bd6d5b
[42] http://nouveau.freedesktop.org/wiki/CodeNames
[43] http://git.kernel.org/linus/966a5b7daa15e152bc2e1f0407939cc721fb5995
[44] http://git.kernel.org/linus/ddbaf79a8b047dcccf766d0518626cdc0f43d58e
[45] http://git.kernel.org/linus/4c74eb7ff276813ee73943a3756b295675fb2865
[46] http://git.kernel.org/linus/6d86951a45013ac5b060c5e6307b11b7c685c76f
[47] http://nouveau.freedesktop.org/wiki/NVC0_Firmware
[48] http://cgit.freedesktop.org/mesa/mesa/commit/?id=cd1cf788280a1eb10d54e1a2b8b069ed7b89c724
[49] http://www.khronos.org/openml/spec/
[50] http://git.kernel.org/linus/27641c3f003e7f3b6585c01d8a788883603eb262
[51] http://git.kernel.org/linus/6f34be50bd1bdd2ff3c955940e033a80d05f248a
[52] http://git.kernel.org/linus/f5a8020903932624cf020dc72455a10a3e005087
[53] http://git.kernel.org/linus/0af7e4dff50454905092d468e91c1ef92e10e6b4
[54] http://git.kernel.org/linus/49b14a5ca26fc18bafe33bd9704a1a1cea681fbf
[55] http://git.kernel.org/linus/332b242f47786d1a43bd7a19a0513dd5d493db8e
[56] http://git.kernel.org/linus/042206c0cd4924879c4292c5ffa2bf1e8023ae5a
[57] 
[58] http://thread.gmane.org/gmane.linux.kernel/1088915
[59] http://git.kernel.org/linus/31e6b01f4183ff419a6d1f86177cbf4662347cec
[60] http://git.kernel.org/linus/b5c84bf6f6fa3a7dfdcb556023a62953574b60ee
[61] http://git.kernel.org/linus/b74c79e99389cd79b31fcc08f82c24e492e63c7e
[62] http://git.kernel.org/linus/fb045adb99d9b7c562dc7fef834857f78249daa1
[63] http://git.kernel.org/linus/fa0d7e3de6d6fc5004ad9dea0dd6b286af8f03e9
[64] http://git.kernel.org/linus/2fd6b7f50797f2e993eea59e0a0b8c6399c811dc
[65] http://git.kernel.org/linus/44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9
[66] http://thread.gmane.org/gmane.linux.kernel/1085167
[67] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-37-bringt-2-Dateisysteme-1144739.html
[68] http://git.kernel.org/linus/b853b96b1dbdc05fc8eae141a595366d8172962b
[69] http://git.kernel.org/linus/9c52749232b5cef506877ac633ea14083bd17e02
[70] http://git.kernel.org/linus/a46db60834883c1c8c665d7fcc7b4ab66f5966fc
[71] http://git.kernel.org/linus/261507a02ccba9afda919852263b6bc1581ce1ef
[72] http://git.kernel.org/linus/a6fa6fae40ec336c7df6155255ae64ebef43a8bc
[73] http://git.kernel.org/linus/b83cc9693f39689490970c19f6c5b866f6719a70
[74] http://thread.gmane.org/gmane.comp.file-systems.btrfs/9171
[75] http://git.kernel.org/linus/ec29ed5b407d618a8128f5942aade9e1758aa14b
[76] http://git.kernel.org/linus/7a43ae523744c01b6187013e781f44c2281c579c
[77] http://git.kernel.org/linus/81bb8debd0d570dc67dc1e9d8b612632cb941893
[78] http://git.kernel.org/linus/7c955fca3e1d8132982148267d9efcafae849bb6
[79] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-37-bringt-4-Architektur-und-Infrastruktur-Code-1156711.html
[80] http://thread.gmane.org/gmane.comp.video.dri.devel/53755
[81] http://thread.gmane.org/gmane.linux.network/187827
[82] 
[83] http://www.kernel.org/
[84] http://kernel.org/mirrors/
[85] http://www.de.kernel.org/
[86] http://www.at.kernel.org/
[87] http://www.ch.kernel.org/
[88] http://www.heise.de/glossar/entry/Linux-Kernel-und-Treiber-herunterladen-und-installieren-397911.html
[89] http://git.kernel.org/linus/c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5
[90] http://linux-iscsi.org/
[91] http://scst.sourceforge.net/
[92] http://git.kernel.org/linus/c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5
[93] http://lwn.net/Articles/424004/
[94] http://git.kernel.org/linus/c029772125594e31eb1a5ad9e0913724ed9891f2
[95] http://git.kernel.org/linus/9d09e663d5502c46f2d9481c04c1087e1c2da698
[96] 
[97] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-35-bringt-3-Netzwerkunterstuetzung-1034565.html
[98] http://git.kernel.org/linus/1d24eb4815d1e0e8b451ecc546645f8ef1176d4f
[99] http://git.kernel.org/linus/bf26414510103448ad3dc069c7422462f03ea3d7
[100] http://git.kernel.org/linus/3853b5841c01a3f492fe137afaad9c209e5162c6
[101] http://git.kernel.org/linus/eb06acdc85585f28864261f28659157848762ee4
[102] http://www.open-mesh.org/
[103] http://git.kernel.org/linus/c6c8fea29769d998d94fcec9b9f14d4b52b349d3
[104] http://git.kernel.org/linus/63d5e5a727240b317b0c2fa2abeb32b367aea196
[105] http://git.kernel.org/linus/0c8173385e549f95cd80c3fff5aab87b4f881d8d
[106] http://git.kernel.org/linus/69d826b6c54de113f02a73990b6f6809289b48cc
[107] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-37-bringt-3-Netzwerk-und-Storage-Hardware-1152083.html
[108] http://git.kernel.org/linus/8933f90c777c5728822206a2313c9c1361f5274f
[109] http://git.kernel.org/linus/94a5b0452410f8bdff27aa13592bec046fb6095d
[110] http://git.kernel.org/linus/ab72efdf107e5b0e0a05efb8f24cc6c598ae31ea
[111] http://git.kernel.org/linus/82a52043c7801f83c7387deb45bf9323af04644b
[112] http://git.kernel.org/linus/692d2c0fb36c02ad07d54641c26f48e644b27fbd
[113] http://git.kernel.org/linus/a6a8d66ebaea1e78d779af221bd6f01c5cbe71f5
[114] 
[115] http://git.kernel.org/linus/71e3aac0724ffe8918992d76acfe3aad7d8724a5
[116] http://git.kernel.org/linus/ba76149f47d8c939efa0acc07a191237af900471
[117] http://git.kernel.org/linus/4c76d9d1fb9b21fa10c9e4c1fab2875018a88aa1
[118] http://thread.gmane.org/gmane.linux.kernel/1086623
[119] http://git.kernel.org/linus/936a5fe6e6148c0b3ea0d792b903847d9b9931a1
[120] http://git.kernel.org/linus/38e5e92fe8c02a8766459d505423b855caf9af1f
[121] https://www.heise.de/news/AMD-Athlon-und-Phenom-ade-1200314.html
[122] http://thread.gmane.org/gmane.linux.kernel/1085817
[123] http://git.kernel.org/linus/df660251eb534649f90f9dcfe1da1cef4ea48a3e
[124] http://git.kernel.org/linus/24fa0402a9b6a537e87e38341e78b7da86486846
[125] http://git.kernel.org/linus/303148045aac34b70db722a54e5ad94a3a6625c6
[126] http://git.kernel.org/linus/3ebe12439ba7fc62e1d6ecb569b7287771716ca1
[127] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=tools/testing/ktest;hb=HEAD
[128] http://thread.gmane.org/gmane.linux.kernel/1055512
[129] http://git.kernel.org/linus/2545eb6198e7e1ec50daa0cfc64a4cdfecf24ec9
[130] http://git.kernel.org/linus/5f9b6ced04a4e9c3ee6b4d4042ac5935ef5a8dbd
[131] http://git.kernel.org/linus/dc89568884ae1b8b96ca6fffe83b404ae472750e
[132] http://git.kernel.org/linus/103a8fea9b420d5faef43bb87332a28e2129816a
[133] http://git.kernel.org/linus/ab69a4904b5dd4d7cd6996587ba066bca8d13838
[134] http://git.kernel.org/linus/7bb8fb70c491bd6f5ec99728db8d1b5f43b95471
[135] http://0pointer.de/blog/projects/pulse-glitch-free.html
[136] http://git.kernel.org/linus/fec6e5252b542e748871c88f8455e69ae73ea156
[137] http://git.kernel.org/linus/5519cab477b61326963c8d523520db0342862b63
[138] http://git.kernel.org/linus/2d93666e70662cfcf1927e1a858685f5b38d5d65
[139] http://git.kernel.org/linus/5572da08a784621f2ab4fdc8dc65471261871795
[140] http://git.kernel.org/linus/a3b5e577d96bfccbc41ebf4df784e3a153072273
[141] http://git.kernel.org/linus/fcc4a01eb8661226e80632327673f67bf6a5840b
[142] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[143] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[144] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=drivers/net;hb=HEAD
[145] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=drivers/net/e100.c;hb=HEAD
[146] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=drivers/net/e1000;hb=HEAD
[147] 
[148] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-32-870416.html
[149] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-33-936991.html
[150] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-34-999161.html
[151] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-35-1045229.html
[152] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-36-1102066.html
[153] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-37-1162390.html
[154] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-38-1203073.html
[155] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[156] http://www.heise.de/glossar/entry/Hauptentwicklungslinie-397933.html
[157] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[158] http://thread.gmane.org/gmane.linux.kernel/1104882
[159] https://rt.wiki.kernel.org/
[160] http://ipset.netfilter.org/
[161] https://www.heise.de/news/Rudimentaerer-Open-Source-Treiber-fuer-Intels-GMA500-Poulsbo-1195048.html
[162] http://thread.gmane.org/gmane.linux.kernel.wireless.general/63851
[163] http://www.linux-foundation.org/en/Linux_Weather_Forecast
[164] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[165] http://www.heise.de/open/kernel-log-3007.html
[166] http://www.heise.de/ct/
[167] http://www.heise.de/open/
[168] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[169] http://www.heise.de/open/
[170] http://www.heise.de/open/kernel-log-3007.html
[171] http://www.heise.de/open/
[172] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[173] http://identi.ca/kernellog
[174] http://twitter.com/kernellog
[175] http://www.h-online.com
[176] http://identi.ca/kernellog2
[177] http://twitter.com/kernellog2
[178] http://identi.ca/kernellogauthor
[179] http://twitter.com/kernellogauthor
[180] mailto:thl%40ct.de
[181] mailto:thl@ct.de