Kernel-Log – Was 2.6.33 bringt (4): Architektur und Virtualisierung

Dank einiger Änderungen am x86- und KVM-Code soll der Kernel-eigene Hypervisor schneller arbeiten. Abermals überarbeitet und erheblich erweitert haben die Kernel-Entwickler die recht junge Tracing-Infrastruktur. Der Power- und PowerPC-Code unterstützt nun auch die Spielkonsolen Gamecube und Wii.

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

Bei der Freigabe von Linux 2.6.33-rc7 Ende vergangener Woche zeigt sich Linus Torvalds ein wenig unzufrieden, weil der Hauptentwicklungszweig derzeit mehr Fehler zeige, als ihm lieb ist. Er forderte die Entwickler auf, sich die Liste mit bekannten Fehlern der Vorabversion von 2.6.33 nochmal genauer anzusehen und deutet an, dass er vermutlich noch eine achte Vorabversion freigeben wird, bevor er Linux 2.6.33 veröffentlicht.

Der folgende vierte Teil der Mini-Serie "Was 2.6.33 bringt" widmet sich den Neuheiten rund um den Code für Architektur-Unterstützung, Kernel-Infrastruktur, Tracing und Virtualisierung. Den bedeutsamsten Änderungen rund um die Netzwerkunterstützung, Dateisysteme, das Storage-Subsystem und Grafikhardware hatten sich der erste, zweite und dritte Teil der Serie gewidmet.

Zahlreiche Verbesserungen gab es an der maßgeblich von Red Hat vorangetriebenen Virtualisierungslösung KVM (Kernel-based Virtual Machine). So interagiert der Kernel-eigene Hypervisor jetzt besser mit dem für das Hoch- und Runtertakten moderner Prozessoren zuständigen Cpufreq-Framework. Einige andere Änderungen an KVM sollen zusammen mit Anpassungen im X86-Code den Verwaltungsaufwand beim Context Switch reduzieren und dadurch die Performance verbessern (1, 2).

KVM blockiert die Virtualisierungsfunktionen moderner CPUs jetzt nur noch, wenn sie auch gebraucht werden; dadurch arbeiten andere Virtualisierungslösungen nun auch ohne ein vorheriges Entladen der für KVM zuständigen Kernel-Module, sofern KVM nicht aktiv ist. Speicherbereiche, die das bei Linux 2.6.32 eingeführte und im Umfeld von KVM entstandene KSM (Kernel Shared Memory) zusammengelegt hat, kann der Kernel jetzt in den Swap-Speicher verlagern. Verbesserungen gab es zudem für den Betrieb von paravirtualisierten Xen-Gastsystemen.

Der mit KVM verwandte, maßgeblich von Novell vorangetriebene sowie speziell auf High Performance Computing (HPC) und Echtzeitanwendungen ausgelegte Hypervisor AlacrityVM war zur Aufnahme bei 2.6.33 vorgeschlagen, blieb aber genau wie das verteilte Dateisystem Ceph außen vor. Laut Torvalds waren dafür einerseits Zeitgründe verantwortlich, anderseits hätten sich zu wenig Kernel-Entwickler und Distributoren für die Aufnahme stark gemacht.

Zuvor hatten bereits einige Kernel-Hacker den AlacrityVM-Entwicklern unzureichende Kooperation mit den KVM-Entwicklern vorgeworfen, was zu einer recht langen Diskussion führte; LWN.net hat die Hintergründe in einem Artikel zusammengefasst.

Abermals stark erweitert und überarbeitet haben die Entwickler die Tracing-Infrastruktur rund um Ftrace und die früher Performance Counter genannten Performance Events (1, 2, 3). Über die neuen "kprobe-based event tracer" lassen sich Tracepoints nun zur Laufzeit an nahezu beliebige Stellen des Kernels einfügen (Dokumentation); nutzen können Anwender diese Infrastruktur mit dem Linux beiliegenden Programm "perf" und dessen neuem Unterkommando "probe".

Details zu einer früheren Entwicklerversion des nun aufgenommenen Codes liefert ein im vergangenen Sommer bei LWN.net veröffentlichter Artikel. Dort finden sich auch drei Artikel von Steven Rostedt, in der er die Möglichkeiten der teilweise von ihm mitentwickelten Tracing-Funktionen des Linux-Kernel beschreibt – der neuste stammt aus dem Januar und beschäftigt sich mit einigen fortgeschrittenen Einsatzmöglichkeiten der Tracing-Infrastruktur, verweist aber auf zwei frühere Artikel, die Grundlagen erläutern.

Durch einige andere Änderungen am Kernel lassen sich nun mehrere Prozesse gleichzeitig observieren oder die Nutzung des Big Kernel Lock (BKL) besser diagnostizieren. Die Analysedaten kann man in Zukunft über reguläre Ausdrücke filtern; ausgebaut haben die Kernel-Entwickler auch die Unterstützung für Perl-Skripte beim Perf-Kommando (u. a. 1, 2, 3, Dokumentation). Dessen mit 2.6.33 neue Unterkommando "bench" bietet einige Funktionen zur Geschwindigkeitsmessung (u. a. 1 2, 3, 4, Dokumentation). Neu sind auch die Perf-Unterkommandos "kmem" und "diff" sowie bessere Unterstützung für Kernel-Module in Perf.

Der Architektur-Code für Power- und PowerPC-CPUs bringt nun Unterstützung für die von Nintendo gefertigten Spielkonsolen Gamecube und Wii mit (u. a. 1, 2); weitere Details dazu finden sich auf der Webseite des Projekts GC-Linux und über die Commit-Links am Ende dieses Artikels.

Kernel und Initial-Ramdisk (Initrd) lassen sich bei ARM-, MIPS und x86-Systemen nun mit LZO komprimieren, das laut Commit-Kommentar zwar nicht so effizient packt wie Gzip, aber auf ARM-Systemen deutlich schneller zu entpacken sei (1, 2, 3, 4, 5). Am ARM-Code gab es wieder eine große Zahl an Verbesserungen für dutzende verschiedene Systeme mit ARM-CPU oder -Kern; neu ist etwa die Unterstützung für den von Marvell gefertigten SOC (System-on-a-Chip) Dove (88AP510).

Auch der Code für andere Architekturen wurde um Unterstützung für Prozessoren und Systeme erweitert, von denen selbst viele eingefleischte Linux-Fans noch nie was gehört haben dürften – der MIPS-Code etwa wird ab Linux 2.6.33 Ciscos "Powertv cable settop box" unterstützen, die auf dem MIPS 24Kc basiert. Neu dabei ist auch Code für den Loongson 2F.

Im Umfeld der Realtime-Entwickler entstanden zahlreiche Änderungen, die die Nutzung des Big Kernel Lock (BKL) weiter reduzieren. Eine größere Umbenennung der Kernel-intern zum Locking kritischer Bereiche genutzten Spinlocks führt dazu, dass die mit aktivem Warten arbeitenden Sperrfunktionen, die auch in Zukunft nicht unterbrochen werden dürfen, nun arch_spinlock_t heißen. Diese Umstrukturierung erleichtert den Entwicklern der Echtzeitunterstützung für Linux die Arbeit erheblich und legt die Basis für den Umzug der "Sleeping Spinlocks" aus dem Realtime-/RT-Tree in den offiziellen Linux-Kernel.

Die Sleeping Spinlocks machen auch das Gros der Spinlocks unterbrechbar, die bislang durch aktives Warten versuchen, möglichst schnell exklusiven Zugriff auf gemeinsam genutzte Datenstrukturen zu bekommen – das ist der letzte größere Baustein für ordentliche Echtzeit-Eigenschaften, der dem offiziellen Linux-Kernel noch fehlt. Details zu der Umbenennung finden sich in einer kurzen Notiz bei LWN.net; zwei ältere Artikel liefern weitere Artikel zu den Sleeping Spinlocks und dem Entwicklungsstand des RT-Trees (1, 2).

Über Dateien im Sysfs lässt sich in Zukunft erkennen, falls das BIOS den Wechsel auf die maximale CPU-Frequenz in bestimmten Betriebsarten eines Gerätes via ACPI blockiert.

Rafael J. Wysocki hatte einige Patches zur Aufnahme eingesandt, durch die der Kernel einige Geräte beim Wechsel in oder aus dem Standby parallel statt sequenziell aufweckt oder schlafen legt. Das soll den Wechsel in oder aus dem Bereitschaftsmodus beschleunigen. Linus Torvalds wies die Änderungen aber mit recht deutlichen Worten als "völlig kaputt" zurück; Details dazu und den Patches liefert ein Artikel bei LWN.net.

Wysocki sparte die Änderungen daher fürs erste aus und übermittelte unter anderem einige Patches, die die bei 2.6.32 überarbeitete Infrastruktur zur Nutzung von Stromspartechniken von I/O-Geräten zur Laufzeit verbessern. Den Code zum "Asynchronous suspend and resume" hat er aber zwischenzeitlich überarbeitet und dürfte bei 2.6.34 einen weiteren Anlauf wagen.

Viele weiteren nicht ganz so wichtige, 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 Kernel-Quellen auf Kernel.org. Im Webfrontend liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.

Crypto and Security

Memory Management

ACPI and PCI

Power Management

Scheduler

Tracing

Virtualization

Architecture Support

X86

ARM

Power

Others

Weitere Hintergründe und Informationen zu Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heiseopen. 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". Der Autor des Kernel-Logs zwitschert unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl). (thl)