Kernel-Log – Was 3.6 bringt (3): Architektur

Linux 3.6 kann die Stromzufuhr von PCIe-Chips und ATA-Ports unterbrechen. Ein neues Userspace-Treiber-Framework soll virtualisierten System flotteren Zugriff auf einzelne PCI-/PCIe-Geräte ermöglichen. Änderungen am Prozess-Scheduler versprechen ein besseres Reaktionsverhalten.

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

Der in ein bis drei Wochen erwartete Linux-Kernel 3.6 kann PCIe-Geräte in den Tiefschlafzustand "D3cold" schicken, den manche moderne Rechner unterstützten, um die Stromversorgung einzelner PCIe-Geräte komplett zu unterbrechen (1, 2, 3). Auch das Libata-Subsystem kann einzelne ATA-Ports nun in solch einen Schlafzustand versetzen; darauf soll für spätere Kernel-Versionen vorbereiteter Code aufbauen, um optische Laufwerke in den Tiefschlaf zu schicken, was als ZPODD (Zero-Power Optical Disk Drive) bezeichnet wird.

Der Treiber intel_idle kann nun auch bei Intels aktueller Prozessorgeneration Ivy-Bridge das Ansteuern der Schlafzustände regeln; das kann interessant sein, wenn die Firmware eines Systems das eher schlecht handhabt. Das dem Kernel beiliegende Werkzeug Turbostat, das eine Nutzungsanalyse von Turbo- und Schlafzuständen moderner Prozessoren ermöglicht, wurde mit Linux 3.6 grundlegend überarbeitet; das soll einige Probleme beseitigen und die Unterstützung für aktuelle Prozessoren verbessern.

Turbostat wurde bei Linux 3.6 von Grund auf überarbeitet.

Zum Kernel stießen die IOMMU Groups, die Verbesserungen zur Isolation von PCI- und PCIe-Geräten bringen und dazu auf I/O-Virtualisierungstechniken wie AMD-Vi oder Intels VT-d zurückgreifen. Auf die IOMMU-Gruppierfunktion baut das ebenfalls integrierte Userspace-Treiber-Framework VFIO (Virtual Function I/O) auf (1, 2, 3); es ist vornehmlich für KVM gedacht, um PCI- und PCIe-Geräte an Gäste durchzureichen, damit diese die Geräte mit geringen Latenzen, hohem Datendurchsatz und ohne Gefahr für den Host ansprechen können. Details zu VFIO erläutert die zugehörige Dokumentation und ein Artikel bei LWN.net. Erweiterungen zur Nutzung von VFIO mit Hilfe von Qemu sind noch in Entwicklung.

KVM erhielt einige Änderungen, um den mit der Interrupt-Verarbeitung verbundenen Arbeitsaufwand zu reduzieren und so die Performance zu steigern (1, 2, 3). Xen unterstützt nun das Loggen von Maschinen-Fehlern via Mcelog. Über eine neues Sysfs-Interface können Xen-Gäste einzelne CPU-Kerne schlafen legen und wieder aufwecken, was zum Stromsparen interessant sein kann.

Mike Galbraith hat Änderungen am Prozess-Scheduler vorgenommen, durch die jeder CPU eine andere, idealerweise nahe gelegene CPU als "Kamerad" zugeteilt wird; dieser CPU versucht der Scheduler als erstes neue Tasks zuzuweisen, wenn die Rechenkraft der ersten CPU nicht mehr ausreicht. Diese "CPU Buddies" genannte Funktion soll verhindern, das Prozesse auf immer wieder andere, möglicherweise schlafende CPU-Kerne verteilt werden.

Dieser Ansatz kann in bestimmten Fällen die Performance erheblich verbessern, wie im Commit-Kommentar erwähnte Messwerte von Tbench zeigen, die von einem Rechner mit vier Westmere-Prozessoren stammen. Wie Ingo Molnar in der Mail mit den Haupt-Git-Pull-Request für Scheduler-Änderungen schreibt, sollte die Änderung auch bei Desktop-Systemen mit Mehrkern-Prozessoren das Reaktionsverhalten verbessern.

[Update 20120916-1930] Ungefähr parallel zur Veröffentlichung der oberen Zeilen hat jemand auf der LKML von einem Workload berichtet, der durch die "CPU Buddies" 20 Prozent langsamer wird. Linus hat sich im Verlauf der daraufhin entstandenen Diskussion schnell dafür ausgesprochen, die Funktion wieder zu entfernen – bislang ist das aber noch nicht passiert. [/Update]

[Update 20120917-0740] Kurz vor der Veröffentlichung der sechsten Vorabversion von Linux 3.6 hat Linus Torvalds die "CPU Buddies"-Funktion schließlich doch entfernt. [/Update]

Mehr Infos

Entwicklungsstand

Letzten Sonntag hat Linus Torvalds die fünfte Vorabversion von Linux 3.6 veröffentlicht und sich dabei etwas verwundert gezeigt, wie wenig Änderungen ihm die anderen Kernel-Entwickler zugesandt haben. Er macht in der Freigabemail noch keine Andeutungen, ob er die Entwicklung dieser Version bald abschließen will.

Die Perf-Infrastruktur liefert bei den Intel-Prozessoren Nehalem und Sandy Bridge EP nun Performance-Informationen zum Verhalten des Uncore-Bereichs, zu dem Speichercontroller und L3-Cache gehören (1, 2). Einige weitere Neuerungen an Perf und den zugehörigen Werkzeugen fasst Ingo Molnar in der Mail mit seinem Haupt-Git-Pull-Request für dieses Subsystem zusammen.

Eine Reihe von Crypto-Treibern erhielten Prozessor-spezifische Optimierungen; die Module für die Algorithmen Serpent und Twofish etwa können bei x86-64-Systemen nun auf eine AVX-Assembler-Implementation zurückgreifen, die in bestimmten Fällen deutlich flotter als der bisher genutzte Code arbeitet, wie Messwerte in den Commit-Kommentaren zeigen (1, 2).

Der ARM-Code unterstützt nun die SoCs Armada XP und Armada 370 von Marvell sowie eine Altera-Plattform mit Coretex-A9-Core; auch den OMAP5 von Texas Instruments kann der Kernel nun ansprechen (u. a. 1, 2, 3, 4, 5).

Der MIPS-Code unterstützt nun auch den Loongson 1B (u. a. 1, 2).