Kernel-Log – Was 2.6.36 bringt (3): Infrastruktur | heise online

Kernel-Log – Was 2.6.36 bringt (3): Infrastruktur

AppArmor, Einstiegspunkte für On-Access-Virenscanner, ein neu geschriebener Out of Memory Killer sowie Grundlagen für Xen-Dom0-Code sind einige der wichtigsten Neuerungen des Linux-Kernel 2.6.36. Dank einiger Umstrukturierungen wird diese Version trotz mehrerer hunderttausend Zeilen neuen Codes etwas kleiner als ihr Vorgänger.

vorlesen Druckansicht 12 Kommentare lesen
Lesezeit: 40 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Am Mittwoch früh hat Linus Torvalds die sechste Vorabversion von Linux 2.6.36 freigegeben. Dabei deutete er an, bald 2.6.36 freigeben zu wollen, vielleicht aber doch noch eine weitere Vorabversion einzuschieben.

Das Kernel-Log nimmt das zum Anlass, die Mini-Serie "Was 2.6.36 bringt" mit der Beschreibung der Neuerungen rund um Dinge wie Speicherverwaltung, Build-System und die Unterstützung für verschiedene CPU- und System-Architekturen fortzusetzen. Der erste Teil der Serie hatte sich mit den Änderungen rund um Grafik-Hardware beschäftigt, der zweite mit Dateisystemen, Storage- und Netzwerk-Hardware; ein vierter Teil zu den Änderungen rund um ACPI, PCI, Power-Management und den Treibern für USB, FireWire, V4L/DVB und Co. wird die Mini-Serie in einigen Tagen abschließen.

Nachdem sich die Entwickler der 2006 von Novell offengelegten AppArmor mehrere Jahre erfolglos um die Aufnahme des Kernel-Codes der Sicherheitserweiterung bemüht hatten, stieß dieser nun in der Version 2.6.36 endlich zum Kernel (u. a. 1, 2, 3, Dokumentation). Ähnlich wie SELinux kann AppArmor Anwendungen auf festgelegte Aktionen beschränken; Angreifer, die über eine Sicherheitslücke etwa in einer Server-Software Zugang zum System erhalten, können daher nur begrenzt Schaden anrichten.

AppArmor steht in dem Ruf, leichter administrierbar zu sein als SELinux. Letzteres wird von Red Hat favorisiert und kommt unter anderem bei Red Hat Enterprise Linux (RHEL) und Fedora zum Einsatz. Novell hatte sich lange auf AppArmor konzentriert, 2007 aber von der eigenen AppArmor-Entwicklungsabteilung getrennt und seit 2008 auch SELinux eingesetzt. Dadurch verlangsamte sich die AppArmor-Entwicklung erheblich, bis John Johansen ihr Anfang des Jahres neuen Schwung verlieh und schließlich auch die Aufnahme in den offiziellen Kernel vorantrieb. Johansen arbeitete früher bei Novell und kümmert sich derzeit bei Canonical maßgeblich um die Integration von AppArmor in Ubuntu.

Zahlreiche Anläufe und mehrere Jahre hatte auch das aus TALPA hervorgegangene Fanotify gebraucht, bevor Torvalds es nun integrierte (u. a. 1, 2, 3). Es baut auf dem bei 2.6.31 integrierten Fsnotify auf und bietet Einstiegspunkte, über die sich beispielsweise Virenscanner einklinken können, um Dateien beim Zugriff auf Schadsoftware zu überprüfen, bevor deren Inhalt ausgeliefert wird ("On-Access-Scan"). Einige Hintergründe zur Funktionsweise von Fanotify sowie den Problemen früherer Fanotify-Ausführungen liefern mehrere LWN.net-Artikel (u. a. 1, 2, 3).

[Update 14.10.2010, 09:30] Nur einige Tage vor der Fertigstellung von Linux 2.6.36 haben die Entwickler die Userspace-Schnittstellen von Fanotify kurzfristig deaktiviert, um noch einige Unzulänglichkeiten beseitigen zu können, die teilweise auch das ABI betreffen (1, 2, 3) – dadurch ist Fanotify vorerst nicht nutzbar. Fehlerbeseitigung und Re-Aktivierung der Userspace-Schnittstellen sind für Kernel 2.6.37 vorgesehen; unklar ist noch, ob diese Patches möglicherweise auch in einen der Stable-Kernel der 2.6.36-Serie einziehen werden. [/Update]

Erheblich verändert und in weiten Teilen neu geschrieben haben die Kernel-Entwickler den Out of Memory (OOM) Killer, der bei Speichermangel Prozesse abschießt, damit das System weiterarbeiten kann (1, 2, 3). Durch diese Änderungen gilt die OOM-Feinjustage via /proc/<pid>/oom_adj nun als "deprecated" und soll im August 2012 verschwinden. Weitere Hintergründe zu den Änderungen am OOM liefert LWN.net in dem Artikel "Another OOM killer rewrite".

Integriert haben die Kernel-Hacker auch die "Concurrencey Managed Workqueues", welche die Handhabung von Kernel-Threads optimieren (u.a. 1, Dokumentation). Dadurch soll der Kernel die Ressourcen effizienter nutzen, besser skalieren und auf vielen Systemen mit weniger Threads auskommen – letzteres werden auch Anwender bemerken, denn dadurch verkürzt sich die Liste der bei ps -A ausgegeben Kernel-Threads. Weitere Vorteile sowie Gründe für die Änderungen liefert der Entwickler in einer detaillierten Mail zu seinen Patches und im Rahmen des Git-Pull-Request; LWN.net hat im Herbst letzten Jahres einen Artikel zu den Concurrencey Managed Workqueues verfasst.

Die Liste der vom Kernel unterstützen Prozessor-Architekturen wächst mit 2.6.36 abermals und umfasst nun auch die von Tilera entwickelten 32-Bit-Prozessoren TILEPro and TILE64 (u. a. 1, 2, 3). Bei ihnen handelt es sich um MIPS-ähnliche VLIW-Prozessoren mit vielen Kernen, die über ein iMesh-Netzwerk miteinander kommunizieren. Da sie recht sparsam arbeiten, lassen sich so über 10.000 Prozessorkerne in einem Server-Rack unterbringen. Aus dem Android-Umfeld stießt Unterstützung für Nvidias Tegra-Prozessoren zum Kernel, die auf der ARM-Architektur aufbauen (u. a. 1, 2, 3). Ferner enthält der Kernel nun zirka 90 Prozent der Treiber für das Ben NanoNote (u. a. 1, 2, 3, 4, 5, 6, 7, 8) – ein Pocket-Computer mit offener Hardware-Plattform, der seit dem Frühjahr auch in Europa erhältlich ist.

KVM-Maintainer Avi Kivity schreibt in seinem Git-Pull-Request, es gäbe für 2.6.36 keine größeren neue Features bei KVM. Er deutet aber einige Performance-Optimierungen an und erwähnt die Unterstützung für die Prozessor-Befehle Xsave (1, 2) und AVX (Intel Advanced Vector Extension) in Gastsystemen.

Einen Überblick über Änderungen am Xen-Code geben die Git-Pull-Requests von Jeremy Fitzhardinge und Konrad Rzeszutek Wilk. Durch die von Ersterem gesammelten Patches lassen sich Paravirt-Treiber nun auch in vollvirtualisierten Domains ("pv-on-hvm") nutzen; durch die anderen Änderungen kann Linux als paravirtualisiertes Gastsystem über eine Art virtuelle IOMMU auf PCI-Geräte zugreifen, die der der Wirt (Dom0) bereitstellt (u. a. 1). Einige der Änderungen legen ferner Grundlagen, auf dem Code zum Betrieb des Linux-Kernels als "initial domain" aufbauen soll – eine Art abgespeckter Dom0-Unterstützung. Dieser Code wird derzeit auf der LKML diskutiert und könnte bei einer der nächsten Versionen in den Hauptentwicklungszweig von Linux einziehen.

Der Kbuild-Code bietet nun vier neue Targets:

  • "oldnoconfig" ersetzt "loose_nonint_oldconfig" und setzt alle Konfigurationsoptionen in der Kernel-Konfigurationsdatei ".config" auf "no", die zuvor nicht gesetzt waren.
  • "listnewconfig" ersetzt "nonint_oldconfig" und listet alle in der ".config" bislang nicht gesetzten Optionen.
  • "alldefconfig " erstellt eine ".config", in der alle Optionen die Einstellungen erhalten, wie sie die Kconfig-Dateien als Standard vorgeben.
  • "savedefconfig" schreibt eine "defconfig" genannte Konfigurationsdatei, in der nur die Optionen verzeichnet sind, die sich von den Standardvorgaben der Kconfig-Dateien unterscheiden.

Mit Hilfe von letzterem Make-Target haben die Entwickler dutzende Standard-Konfigurationsdateien für die verschiedenen vom Linux-Kernel unterstützten System- bzw. Prozessor-Architekturen erzeugt, welche die bisherigen Standard-Konfigurationsdateien ersetzen. Da Letztere zuvor auch Einträge für alle Optionen enthielten, die die Kconfig-Dateien des Kernels als Standard vorgaben, ist der entsprechende Commit knapp 6 MByte riesig und entfernt über zweihundertausend Zeilen in den Kernel-Quellen.

Bereits zuvor hatten die Verwalter der Unterstützung für Itanium (IA64) und Power ihre Konfigurationsdateien auf diese Weise verschlankt (1, 2). All diese Änderungen sind der Hauptgrund, warum der Quellcode von 2.6.36 ein wenig kleiner sein dürfte als sein direkter Vorgänger – das ist überaus ungewöhnlich, denn in den letzten Jahren wuchs der Kernel mit jeder neuen Version um mehrere hunderttausend Zeilen.

Begonnen hatte die Diät für die Standard-Konfigurationsdateien bereits bei 2.6.35, wo die Kernel-Entwickler die Dateien für ARM-Systeme verschlankten. Für den Anwender ändert sich durch das Ganze nichts, denn wie bisher erzeugt ein "make defconfig" eine Basis-Konfigurationsdatei für das eigene System.

  • Die Kernel-Hacker haben die Nutzung des Big Kernel Lock (BKL) im Infrastruktur-Code und zahlreichen Treibern weiter reduziert – unter anderem auch im TTY-Subsystem, was selbst einige der erfahrensten Kernel-Hacker vor Schwierigkeiten gestellt hat. Damit nähern sich die Entwickler weiter dem Ziel, dass der Kernel auf Standard-Systemen ohne diesen sperrigen Locking-Mechanismus arbeitet, der die Skalierbarkeit und die System-Performance verschlechtert.
  • Der x86-Code unterstützt nun die Power Limit Notifications von Intels Sandy-Bridge-Prozessoren, die Anfang nächsten Jahres erwartet werden (1, 2, 3). Der neue Hwmonitor-Treiber pkgtemp baut darauf auf kann unter anderem die Temperatur des Prozessors auslesen (1, Dokumentation)
  • Der Prozess-Scheduler reduziert in bestimmten Situation nun den Wettbewerb zwischen Kernel-Threads, die eine exklusive Kontrolle über eine belegte Ressource erlangen wollen. Dadurch kann der aktive Prozess ungestörter arbeiten, was den Datendurchsatz teilweise erheblich steigert (Commit, LWN.net-Artikel).
  • Wie bei seine Vorgänger bringt auch 2.6.36 zahlreiche Änderungen am Debugging-, Performance-Monitoring- und Tracing-Code. Das Ftrace-Plugin kmemtrace etwa haben die Kernel-Hacker entfernt, da sich die Funktionen nun über die Trace-Events von Typ "kmem" sowie "perf kmem" erledigen lassen. Wie bereits im ersten Teil der "Was 2.6.36 bringt"-Serie näher beschrieben, bietet der Kernel auf Systemen mit Intel-KMS-Untersütztung nun eine KDB-Debugger-Shell, um dort etwa die Ursache für einen Absturz des X-Servers analysieren zu können, wenn der Wechsel auf eine Textkonsole nicht mehr möglich ist und keine serielle Konsole konfiguriert ist.
  • Fast einen Monat nach dem Ende des Merge Window haben die Kernel-Hacker eine Änderung am Prozess-Scheduler vorgenommen, durch den der Scheduler die maximalen Wartezeiten insbesondere auf Desktop-Systemen reduzieren soll, wenn parallel andere Prozesse CPU-Zeit fordern – das verspricht eine bessere Reaktionsgeschwindigkeit, wodurch sich das System flotter anfühlen soll. Die der Änderung vorausgegangene Diskussion und der Commit-Kommentar erläutern Hintergründe und liefern Messwerte, laut denen sich die maximale Latenz im Test-Szenario beinahe halbiert hat.
  • Die Kernel-Hacker wollen mit 2.6.36 das Problem beseitigt haben, durch das sich Systeme mit 2.6.35 und einigen früheren Kernelversionen unter bestimmten Bedingungen extrem langsam anfühlten oder zeitweise gar nicht mehr reagierten, während der Kernel größere Datenmengen auf ein langsames Medium (etwa einen USB-Stick) schrieb (u. a. 1).
  • Die Sicherheitserweiterung Tomoyo bietet nun einen "Interactive Enforcing Mode", mit dessen Hilfe Administratoren im Betrieb entscheiden können, ob sie eine Verletzung der Policy ignorieren wollen. Ein Youtube-Video illustriert die Funktionsweise.
  • Stefani Seibold hat das bei 2.6.32 bereits erheblich überarbeite Kfifo-API ein weiteres mal verändert, um Performance zu verbessern und ein besseres API zur Verfügung zu stellen (u. a. 1, 2). Die alten API-Calls werden aber weiter unterstützt, die neuen Möglichkeiten erläutern einige Beispiele.
  • Über das Make-Target "coccicheck" lässt sich nun Coccinelle aufrufen – ein Programm zur semantischen Code-Analyse, das Programmierern beim Refaktorieren von Code Arbeit abnehmen kann. Details zu den Möglichkeiten liefern die Kernel-Dokumentation und ein im Frühjahr letzten Jahres erschienener Artikel bei LWN.net.

Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs mit den "offiziellen" Kernel-Quellen auf Kernel.org. Der über diese Links angezeigten Commit-Kommentar und der darunter ausgegebene Patch liefern zahlreiche weitere Informationen zur jeweiligen Änderungen.

Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien, welche die Hilfetexte und Konfigurationsoptionen enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" steht für Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.

Crypto & Security

Debugging-, Performance-Monitoring- und Tracing-Code

Memory Management

Various Infrastructure

Virtualisierung

x86

ARM

Power

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl). (thl)