Kernel-Log – Was 3.11 bringt (2): Infrastruktur

Linux kann jetzt Teile des Arbeitsspeichers komprimieren, wenn es im RAM eng wird. Neu sind auch Unterstützung für den Kompressionsalgorithmus LZ4, Locking per "wound/wait" und eine Anpassung, durch die Wine für Windows RT übersetzte ARM-Software ausführen kann.

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

Das Memory-Management-Subsystem von Linux enthält mit 3.11 erstmals Zswap, das Arbeitsspeicherinhalte zu komprimieren versucht, die der Kernel sonst in den Swap-Bereich auslagern würde (Dokumentation, LWN.net-Artikel); dazu greift Zswap auf die Hilfe des ebenfalls neuen Memory Allocator Zbud zurück. Das Ganze kann die Performance steigen, da das Dekomprimieren bei modernen CPUs häufig schneller erfolgt als ein Einlesen ausgelagerter Speicherbereiche. Die Technik war schon länger im Staging-Bereich des Kernels, wo Code liegt, der den Qualitätsansprüchen der Kernel-Entwickler nicht genügt; Zswap gilt aber auch nach dem Verlassen dieses Bereichs noch als experimentell.

Einige andere Änderungen am Memory-Management-Code soll Aussetzer vermeiden helfen, die gelegentlich beim Swappen entstehen, wenn der Kernel parallel große Datenmengen wegschreibt.

Kernel-Programmierern stehen jetzt "wound/wait style locks" zur Verfügung. Dabei handelt es sich um einen Mutex für den koordinierten Zugriff auf Datenstrukturen, bei der mehrere Threads exklusiven Zugriff auf mehr als eine Datenstruktur benötigen, die Sperren aber in unterschiedlicher Reihenfolge anfordern – das kann zu Deadlocks führen, wenn Task 1 nach dem Sperren von Buffer 1 auch einen Lock auf Buffer 2 anfordert, während Task B Letzteren bereit gesperrt hat und exklusiven Zugriff auf Buffer 1 anmeldet.

Durch den neuen, aus dem Datenbankbereich entliehen Ansatz wird die jüngere der beiden Task gezwungen, ihre Sperre aufzugeben, sodass die ältere Task beide Buffer sperren und weiterarbeiten kann. Hintergründe zur Funktionsweise erläutern ein LWN.net-Artikel und die Dokumentation. Dort wird auch die Motivation erläutert: Diese Locking-Technik wurde vornehmlich für Grafikhardware entwickelt, denn auf deren Buffer können durch Techniken wie DMA_buf mehrere Treibern zugreifen; einige solcher Treiber nutzen den neuen Mutex bereits.

Mehr Infos

Entwicklungsstand

Am Sonntag hat Linus Torvalds die sechste Vorabversion von Linux 3.11 freigegeben. Dabei erwähnte er mittlerweile fast vierhunderttausend Commits vorgenommen haben, seit er zur Quellcodeverwaltung von BitKeeper auf Git umgestiegen ist. Er deutet ferner an, Linux 3.11-rc7 vermutlich genau 22 Jahre nach der ersten Ankündigung von Linux freigeben zu wollen – also am 25. August.

Linux 3.11 kann LZ4 zum Komprimieren und Dekomprimieren von Daten nutzen. Laut Messwerten der Entwickler soll dieser Kompressionsalgorithmus fast so dicht packen wie LZO, aber deutlich flotter entpacken. Das macht LZ4 unter anderem zum Komprimieren von Kernel-Binary und Initramfs interessant, was Linux 3.11 ebenso unterstützt wie die Verwendung von LZ4 über das Crypto API.

Durch eine recht kleine Änderung bringt Linux 3.11 alles mit, damit aktuelle Wine-Versionen auf ARM-Systemen Windows-RT-Programme ausführen können, die für die ARM-Variante von Windows RT übersetzt wurden. Der ARM- und ARM64-Code wird erstmals Unterstützung für Hugetblfs und Transparent Huge Pages (THP) bieten, mit deren Hilfe sich große Speicherseiten bei ARM-Kernen nutzen lassen (1, 2,3, 4). Neu ist auch die Unterstützung für die von ARM selbst entwickelte IOMMU (I/O Memory Management Unit).Der im Kernel integrierte Hypervisor KVM wird nun auf ARM64-Prozessoren virtualisieren können (u. a. 1, 2); das gelingt jetzt auch mit Xen, wenn man Linux 3.11 mit dem Xen-Hypervisor 4.3 paart.

Unter den Änderungen am Tracing- und Perf-Code war Basis-Unterstützung für die Performance-Monitoring-Features, die Intels Haswell-Prozessoren (u. a. 1, 2, 3, 4, 5) und die IOMMU in neueren AMD-Prozessoren bieten.

Das neue Make-Target "kvmconfig" ändert eine vorliegende Kernel-Konfiguration ab, damit ein damit gebauter Kernel sich für den Betrieb unter KVM eignet. Zu den wichtigsten Modifikationen am Prozess-Scheduler (1, 2) gehört eine Optimierung für Voluntary Preemption; laut Messungen des Entwicklers steigt dadurch die Geschwindigkeit beim Datenaustausch zwischen Host und VM über virtuelle Netzwerkschnittstellen um rund ein Gigabit/s.

Zahlreiche Anpassungen gab es auch am ACPI- und Cpufreq-Code. Darunter eine, durch die der Kernel nicht mehr ins Straucheln geraten soll, wenn er Hardware nicht im Betrieb deaktivieren kann (Hot-Unplug), obwohl er dazu angewiesen wurde (1, 2) – etwa weil der Kernel selbst noch Bereiche von Arbeitspeichermodulen nutzt, die entfernt werden sollen. Die Kernel-Entwickler haben zudem versucht, ein ACPI-Problem bei der Displayhelligkeits-Regelung mancher Windows-8-Notebooks zu beseitigen; das hat aber auf einigen Systemen zu Schwierigkeiten geführt, daher wurden die Anpassungen fürs Erste wieder ausgebaut (1, 2, 3).