Virtualisierung

Trends & News | Kernel-Log

Seite 3: Virtualisierung

Entwicklungslinien des Linux-Kernels Die Kernel-Hacker entwickeln den Linux-Kernel im Rahmen der 2.6-Serie stetig weiter. Dabei scheuen sie auch nicht vor umfangreichen Änderungen zurück. Es wird daher auf absehbare Zeit keinen 2.7-Entwicklerzweig geben, aus dem irgendwann eine Linux-Version 2.8.0 oder 3.0.0 hervorgeht, wie Linux 2.6.0 aus dem 2.5-Entwicklerzweig entstand; stattdessen pflegen die Entwickler mehrere Kernel-Serien für verschiedene Anwenderkreise parallel. Die Hauptentwicklungslinie stellen die Versionen mit drei durch Punkte getrennten Nummern (2.6.x, also etwa 2.6.26) dar. [...] Parallel zur Hauptentwicklung pflegen die Verwalter der Stable-Kernel-Serie die beiden jeweils neusten Versionen der Hauptentwicklungslinie weiter und kennzeichnen die Überarbeitungen durch eine zusätzliche Zahl (2.6.x.y, beispielsweise 2.6.24.10 oder 2.6.25.8). (...mehr...)

Erneut erheblich erweitert wurde die Virtualisierungslösung KVM (Kernel-based Virtual Machine), die Linux selbst zum Hypervisor macht. So wird das im Kernel enthaltene KVM mit 2.6.26 erstmals die Architekturen IA64 (1, 2, Dokumentation) und s390 (1, 2, Dokumentation) sowie PowerPC-Prozessoren der 44x-Reihe unterstützen – bislang arbeitet KVM nur auf 32- und 64-Bit-x86-Prozessoren. Für diese gab es ebenfalls zahlreiche Verbesserungen – etwa die für FreeDOS benötigte Emulation von Hardware Task Switching sowie Unterstützung für die in neueren Prozessoren enthaltenen Virtualisierungstechniken Nested Page Tables (1, 2, 3) von AMD sowie die Virtual Processor Identification (VPID) und Extended Page Tables (EPT; 1, 2, 3) von Intel.

Auch an der KVM-Infrastruktur gab es ähnlich wie bei den vorangegangenen Kernel-Versionen wieder zahlreiche Verbesserungen, von denen viele Kompatibilität oder Performance verbessern sollen; dazu zählen etwa grundlegende Paravirt-Unterstützung (etwa 1, 2, 3, 4), Large Page Support, PIT-Emulation im Kernel und das Performance-Tracing-System kvmtrace (1, 2). Zudem gilt KVM nun nicht mehr als experimentell; der KVM-Betreuer musste sich jedoch zum wiederholten Male harsche Worte von Torvalds anhören, da er erneut größere Korrekturen erst spät eingesandt hatte.

Nicht nur KVM wurde verbessert, auch der seit Linux 2.6.23 im Kernel enthaltenen Unterstützung zum Betrieb als Xen-Gast widmeten sich die Entwickler und integrierten unter anderem den Balloon Driver, über den sich die dem Gast-System zugewiesene Speichermenge reduzieren lässt. Auch die paravirtualisierten Framebuffer-, Tastatur- und Maus-Treiber (xen pvfb) pflegten die Kernel-Entwickler ein. Durch eine kurz vor Ende des Entwicklungszyklus integrierte Änderung setzt Xen in Zukunft einen mit PAE-Unterstützung kompilierten Kernel voraus.

Das VFS (Virtual File System) stellt in Zukunft bereits eingebundene Dateisysteme auf Wunsch an anderer Stelle schreibgeschützt bereit (r/o bind mounts; unter anderem 1, 2). Das ist insbesondere für Container-Virtualisierung interessant, damit nicht ein Gastsystem Daten eines gemeinsam genutzten Root-Dateisystem verändert. Wie schon bei den vorangegangenen Linux-Versionen gab es auch für Container eine ganze Reihe von Verbesserungen (darunter etwa eine Whitelist für Devices) in verschiedensten Bereichen des Kernels. Die Unterstützung von Container-Virtualisierung nähert sich somit einem Reifegrad, wo Softare wie Linux-VServer oder OpenVZ bald alle wichtigen Funktionen ohne zusätzliche Kernel-Patches realisieren können.

Auch in den internen Abläufen des Kernel gab es wieder zahlreiche Änderungen – von denen dürften die Anwender zwar vielfach nichts bemerken, aber häufig indirekt profitieren. Neu dabei mit 2.6.26 ist etwa die Unterstützung für PAT (Page Attribute Table) auf x86-Prozessoren (Dokumentation). Dadurch kann der Kernel in Zukunft besser Einfluss auf das von modernen Prozessoren durchgeführte Caching nehmen.

Die Generic semaphore implementation führt ferner den bisher Architektur-spezifischen Code für das Locking mit Semaphoren zusammen und verkleinert ihn dadurch erheblich (1, 2, Dokumentation, Pull Request). Dadurch soll der Code einfacher zu warten und weniger fehleranfällig sein. Das Locking arbeitet mit einem Semaphor aber auch ein wenig langsamer, da der Code nicht so sehr auf die Besonderheiten der verschiedenen Architekturen optimiert ist – dieser Nachteil soll nicht sonderlich schwer wiegen, da aktuelle Kernel-Versionen häufiger ein Mutex statt ein Semaphor nutzen.

Tatsächlich zeigten einige Vorabversionen von 2.6.26 in verschiedenen Tests jedoch größere durch die Generic semaphores ausgelösten Performance-Probleme. Eine der schwerwiegendsten beseitigte Torvalds selbst. Das Big Kernel Lock (BKL) wird dadurch jedoch wie schon in frühen Versionen der 2.6-Serie wieder über ein Spinlock statt ein Semaphor umgesetzt; in folge dessen musste die Konfigurationsoption PREEMPT_BKL ("Preempt The Big Kernel Lock") weichen.

In Rahmen der Diskussionen um die beste Korrektur für das Performance-Probleme setzen sich indes einige Entwickler näher mit dem Performance-kritischem BKL auseinander und haben mit Arbeiten in verschiedenen Bereichen des Kernels begonnen, um das BKL langfristig komplett entfernen zu können; statt dessen sollen das Locking feiner gestaffelt werden, was gerade aus Systemen mit vielen CPUs Performance-Vorteile bieten sollte.

Auch beim Basis-Framework für Treiber ("Driver Core") gab es größere Änderungen, die vor allen den Kernel-Hackern die korrekter Nutzung erleichtern soll. Alan Cox arbeitet derweil weiter an der Grundrenovierung im TTY-Code des Kernels und brachte verschiedene größere Änderungen ein. Durch Programmiertricks konnten die Entwickler zudem die Größe des Tcrypt-Kernel-Moduls immens schrumpfen. Umfangreichere Änderungen gab es auch bei Caching-Techniken für Fuse (Filesystem in Userspace). Restriktionen beim Zugriff auf /dev/mem (1, 2) sollen Einfallstore für Angreifer schließen. Und ob SELinux, SMACK oder ein anderes auf LSM aufsetzendes Sicherheitsframework zum Einsatz kommt, lässt sich zukünftig über einen neuen Kernel-Parameter festlegen. Versehentliches Laden eigentlich nicht zum Kernel passender Module sollen einige Änderungen (1, 2, 3, 4) im Module-Loader unterbinden. Zudem kann der Kernel nun einen einfachen Speichertest selbst durchführen (1, 2, Dokumentation).

Nachdem die Kernel-Hacker mit Linux 2.6.24 die Quellcode-Verzeichnisse für die 32- und 64-Bit-x86-Architekturen größtenteils skriptgesteuert zusammenlegten führten die Programmierer nun bei 2.6.26 ebenso wie schon bei 2.6.25 zuvor viele Dateien händisch zusammen. Dabei erledigten sie zahlreiche Aufräumarbeiten, um den Code zu vereinfachen und robuster zu machen. Auch bei den Stromspartechniken zur Nutzung des Modi Bereitschaft (ACPI S3/Suspend-to-RAM) und Ruhezustand (Hibernate/Suspend-to-Disk) gab es wie mit fast jeder Version einige Verbesserungen und Aufräumarbeiten.

Anzeige