Kernel-Log – Was 2.6.37 bringt (4): Architektur- und Infrastruktur-Code

Zum Kernel stießen erste Teile der Unterstützung zum Betrieb als Xen-Host (Dom0). LZO-Komprimierung soll den Wechsel in den und aus dem Ruhezustand beschleunigen. Nach jahrelanger Arbeit kommen fast alle Bereiche des Kernels nun ohne das Big Kernel Lock (BKL) aus.

In Pocket speichern vorlesen Druckansicht 10 Kommentare lesen
Lesezeit: 30 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Bei der Freigabe von 2.6.37-rc6 hat Linus Torvalds vergangene Woche nochmal betont, den Linux-Kernel 2.6.37 nach den Urlaubstagen rund um den Jahreswechsel freigeben zu wollen. Zudem laufe es derzeit nicht ganz so ruhig, wie er es gerne hätte – das gilt vermutlich auch für den in Kürze erwartete siebte Vorabversion, denn kürzlich wurde eine Neuerung rückgängig gemacht, die die Verteilung der Hardware-Ressourcen hatte verbessern sollen.

Einen Überblick über diese und zahlreiche anderen Änderungen rund um den plattformspezifischen und Infrastruktur-Code des Kernels liefert der folgende vierte Teil der Kernel-Log-Mini-Serie "Was 2.6.37 bringt". Der erste Teil der Serie hatte sich bereits mit den Änderungen rund um Grafik-Hardware beschäftigt, der zweite mit denen rund um Dateisysteme und der dritte mit Anpassungen am Netzwerk- und Storage-Code. Zwischen den Jahren folgt der fünfte und letzte Teil, der sich mit weiteren Treibern und der sie umgebenden Kernel-Subsysteme beschäftigt.

Einer Neuerung von 2.6.37 ließ Linus Torvalds besondere Aufmerksamkeit zukommen, indem er sie bei der Vorstellung der ersten Vorabversion von 2.6.37 explizit erwähnte: Die Kernbereiche des Linux-Kernels sind nun nicht mehr auf das Big Kernel Lock (BKL) angewiesen. Dabei handelt es sich um eine Locking-Technik aus den Anfangszeiten der Multiprozessor-Unterstützung von Linux, die Konflikte beim gleichzeitigen Zugriff auf zentrale Datenstrukturen im Kernel vermeidet. Sie war damals vergleichsweise einfach umsetzbar, sperrt aber subsystemübergreifend – das wirkt sich bei Systemen mit vielen Prozessorkernen negativ auf die Performance aus und kann zu langen Latenzen bei Systemaufrufen führen, die nicht nur im Echtzeit-Umfeld unerwünscht sind.

Über eine neue Option lassen sich jetzt sogar Kernel komplett ohne BKL konfigurieren. Auf eine Handvoll noch auf das BKL angewiesene Treiber und Dateisysteme muss man dann aber verzichten – die meisten sind für aktuelle Systeme eher uninteressant, wenn man vom UDF-Dateisystem absieht. Patches, damit auch das unter anderem für manche DVDs benötigte Dateisystem ohne das BKL arbeitet, kamen aber zu spät zur Aufnahme bei 2.6.37 und dürften in 2.6.38 einziehen.

Der Scheduler versucht nun ein Verschieben von Echtzeit-Tasks auf andere Prozessorkerne zu vermeiden. Bei der Prozessverteilung rechnet der Scheduler die Zeit, die der Prozessor mit der Verarbeitung von IRQs verbraucht, nicht mehr dem gerade aktiven jeweiligen Prozess zu, damit der nicht weniger Zeit als vorgesehen erhält.

Über den Schalter "-V" kann das Probe-Subkommando von Perf nun an Probe-Points alle lokalen Variablen auflisten; mit Hilfe von "--externs" lassen sich alle globalen Variablen auflisten, die zugänglich sind. Neu ist auch die rudimentäre Unterstützung für Module in "perf probe".

Die neuen Jump-Label (u. a. 1, 2, 3, 4, 5) sollen den Overhead rund um die An- und Ausschaltfunktionen für Tracepoints weiter verringern – Details erläutert ein kurzer Artikel bei LWN.net. Im Feldtest zeigte sich allerdings, dass das Ganze doch noch nicht wie gewollt funktioniert, daher wird die Technik vor der Fertigstellung von 2.6.37 möglicherweise noch deaktiviert.

Der Crypto-Daemon des Kernels bietet nun ein Interface für AEAD (Authenticated Encryption with Associated Data). Über einen Sysctl-Aufruf lässt sich nun festlegen, ob normale Anwender oder nur solche mit der Capability CAP_SYS_ADMIN Zugriff auf die Syslog-Informationen haben, die sich mit dmesg auslesen lassen; das soll Angriffe erschweren, die Informationen aus dem Syslog zur Hilfe nehmen.

Ursprünglich sollten Lesebeschränkungen für /proc/kallsyms Angreifern das Leben weiter erschweren – die Änderung wurde aufgrund von Problemen mit Userland-Anwendungen aber zurückgezogen. Hintergründe dazu liefert LWN.net im Artikel "Making attacks a little harder"; einige Tage nach Rücknahme der Änderung wurde eine Umsetzung mit Capabilities vorgeschlagen, doch auch die fand fürs erste keinen Anklang.

Unter den von den Xen-Entwicklern für Linux 2.6.37 beigesteuerten Änderungen war auch der "Initial Domain Support", der den Kernel um Funktionen zum Betrieb als Dom0 erweitert (u. a. 1, 2, 3, 4, 5, 6, 7). Xen-Anwendern ist das aber fürs erste keine große Hilfe, da der Treiber zum Aufsetzen der Xen-Backends fehlt, über die die Gastsysteme auf Datenträger und Netzwerk zugreifen. Die Xen-Entwickler planen, den dafür zuständigen Code zur Aufnahme bei 2.6.38 einzusenden, sodass mit dieser Version der Dom0-Betrieb möglich sein könnte. Beim diesem und dem jetzt in den Kernel integrierten Xen-Code handelt es sich jedoch um eine abgespeckte Variante, die weniger Funktionen bietet als aktuelle Xen-Versionen oder der XenServer von Citrix.

Der Haupt-Git-Pull-Request von Avi Kivity listet einige der wichtigsten Änderungen an KVM – darunter Code zur Paravirtualisierung bei PowerPC und Verbesserungen für die Timer-Infrastruktur. Unterstützung für Nested Paging bei AMD-Prozessoren soll die Performance bei Nested Virtualization verbessern – also beim Betrieb einer VM innerhalb einer VM. Wie geplant hat ein VMware-Entwickler die Unterstützung für die ursprünglich von VMware propagierte Paravirtualisierungschnittstelle VMI (Virtual Machine Interface) aus dem Linux-Kernel entfernt: Der Aufwand lohne nicht nicht mehr, da sich x86-CPUs mit Virtualisierungstechniken durchsetzten und man damit bessere Performance erziele als bei voller Paravirtualisierung. Hintergründe dazu liefert ein Blog-Eintrag auf der VMware-Homepage.

Der neue Autosuspend Support im Power-Management-Code des Kernels erleichtert Treibern die Nutzung der Funktionen von zur Laufzeit nutzbaren Stromsparfunktionen von Geräten. Beim Wechsel in den Software Suspend kann der Kernel das Abbild des Arbeitsspeichers mit LZO komprimieren; das beschleunigt den Wechsel in den und aus dem Ruhezustand, da weniger Daten mit der Festplatte austauscht werden müssen. Wie viel Arbeitsspeicher in das Image geschrieben wird, ist nun nicht mehr fest vorgegeben, sondern von der Menge des Arbeitsspeichers abhängig , was für viele moderne Systeme sinnvoller ist.

Nachdem die ACPI-Entwickler bereits bei 2.6.36 zahlreiche ACPI-Interfaces im Procfs entfernt hatten, musste nun einige als "deprecated" gekennzeichnete Schnittstellen dran glauben, die die Fan-, Thermal-, und Video-Treiber exportierten; als Ersatz dienen Sysfs-Dateien unter /sys/class/thermal/cooling_device*/, /sys/class/thermal/thermal_zone*/ und /sys/class/backlight/. Bei 2.6.38 sollen die Funktionen verschwinden, die /proc/acpi/processor/*/throttle bereitstellt – einen Ersatz gibt es nicht, denn laut Commit-Kommentar gibt es keine Grund, warun User diesen Überhitzungsschutz beeinflussen sollten.

Bjorn Helgaas hatte einige tief greifende Änderung am Code zur Ressourcenverteilung eingebracht, durch die Linux bei der Hardware-Konfiguration in einigen Bereichen etwas mehr in der von Windows genutzten Art vorgegangen wäre – es kam zeigten sich jedoch Probleme, daher wurden die Änderungen zum RC7 zurück genommen.

  • Der Befehl "make xconfig" erzeugt nun ein Konfigurationsprogramm mit Qt4 statt Qt3, sofern dessen Entwicklerdateien vorliegen (1, 2).
  • Durch Eingabe von "/" lässt sich im per "make nconfig" aufgerufenen Text-Konfigurationsprogramm nun ähnlich wie etwa bei Firefox ein interaktiver Suchmodus aufrufen.
  • Das Fanotify-Schnittstelle für On-Access-Virenscanner lässt sich nun nutzen – die Kernel-Hacker hatten sie bereits für 2.6.36 integriert, dann aber kurz vor der Fertigstellung dieser Version deaktiviert, da einige Ungereimtheiten aufgetaucht waren, deren Beseitigung größere Änderungen erforderten.
  • Der Kernel bietet nun eine dritte, TINY_PREEMPT_RCU genannte Implementation zum Read Copy Update (RCU). Sie ist auf Uniprozesser-Systeme abgestimmt und verbraucht weniger Speicher als der normale RCU-Code (TREE_PREEMPT_RCU), ist aber im unterschied zum noch kleineren und sparsameren TINY_RCU unterbrechbar (Preemptible) und dadurch auch für den Echtzeit-Einsatz interessant.
  • Der X86-Code nutzt statt "bootmem" nun den aus LMB hervorgegangenen und bereits bei anderen Architekturen genutzten Memblock-Allocator (Urpsünglich LMB/Logical Memory Block) zum Allozieren von Arbeitsspeicher (u. a. 1 , 2, 3); Hintergründe zu dieser Umstellung und den mit ihr verbundenen Risiken liefert H. Peter Anvin in einem Git-Pull-Request.
  • Hwpoison kann die Nutzung defekter Speicherbereiche nun per Soft Offlining auch unterbinden, wenn der Kernel diese Speicherbereiche mit großen Speicherseiten (Huge Pages) anspricht (u. a. 1, 2, 3, 4); einige Hintergründe dazu liefert Andi Kleen in seinem Haupt-Git-Pull-Request. Zusammen mit diesem Code kam stießen Basis-Funktionen zur Migration von Huge Pages zum Kernel (u. a. 1, 2) – es sind aber weitere Patches nötig, bevor der Kernel große Speicherseiten tatsächlich verschieben kann.

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 etwa 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.

ACPI, PNP

BKL removal

Crypto, Security

Memory Management

PCI, PCMCIA

Power Management

Scheduler

Tracing

Virtualization

Various

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)