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

Optimierungen am Locking-Code können die Performance signifikant verbessern. Ein neues Skript vereinfacht die Fehleranalyse. Fortschritte gibt es bei der Überarbeitung des Cgroups-Codes.

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

Der Linux-Kernel führt mit Version 3.16 wieder 16-Bit-Programme auf x86-64-Systemen aus. Das ist vornehmlich für Wine-Anwender interessant, die 16-Bit-Windows-Programme betreiben. Beim Kernel 3.15 und einigen der älteren Longterm-Kernel gelingt das derzeit nur, wenn man eine dafür benötigte Kernel-Funktion über

echo 1 > /proc/sys/abi/ldt16

aktiviert. Das ist die Folge eines Sicherheitsproblems, das während der Entwicklung von Linux 3.15 bekannt wurde und sich nicht auf die Schnelle korrigieren ließ (1, 2).

Die Reader Writer Semaphores (rwsem), die der Kernel an manchen Stellen zum Locking verwendet, nutzen nun "Optimistic Spinning" und sollen dadurch in bestimmten Situationen deutlich schneller arbeiten. Der Entwickler der Änderung erwähnt im Commit-Kommentar eine Messung mit dem Aim7-Benchmark, der um 20 bis 60 Prozent bessere Werte erzielt habe; der PostgreSQL-Benchmark Pgbench habe in einem Test rund 60 Prozent mehr Durchsatz geliefert.

Kernel-Code kann nun auf einen Qrwlocks genannten Read-Write Lock (rwlock) zurückgreifen, der Warteschlagen verwendet und fair vorgeht (1, 2). Zudem haben die Entwickler das Dokument Documentation/mutex-design.txt erheblich überarbeitet; dadurch soll es nun erheblich besser beschreiben, wie Kernel-Code heutzutage einen Mutex zum Locking nutzen kann.

Den Kernel-Quellen liegt nun das Bash-Skript decode_stacktrace.sh bei. Es kann die bei Kernel-internen Fehlern ausgegebenen Stacks-Dumps aufarbeiten, damit der Aufrufweg der Funktion klarer zu sehen ist, in der der Fehler aufgetreten ist.

Es ist jetzt möglich, Kernel-Images zu kompilieren, die Kernel Address Space Layout Randomization (KASLR) und Suspend-to-Disk (Hibernate) beherrschen. Bei Linux 3.15, wo die Sicherheitsfunktion zum Zerhacken von Speicheradressen des Kernels eingeführt wurde, geht das nicht gleichzeitig; dadurch mussten sich Linux-Distributoren bislang entscheiden, welche dieser Funktionen sie in ihrem Standard-Kernel aktivieren. Beide Techniken arbeiten aber weiterhin nicht parallel, daher legen Boot-Parameter wie kaslr/nokaslr und nohibernate nun fest, welche aktiv ist; standardmäßig ist es die Hibernate-Unterstützung.

Was Linux 3.16 bringt

Das Anfang August erwartete Linux 3.16 befindet sich derzeit in der Stabilisierungsphase. Größere Umbauarbeiten gibt es in dieser Phase nur in seltenen Ausnahmefällen, denn alle wesentlichen Neuerungen haben die Kernel-Hacker bereits in den ersten beiden Entwicklungswochen integriert. Das Kernel-Log kann daher bereits vor der Fertigstellung einen Überblick über die wichtigsten Änderungen dieser Version liefern. Das erfolgt im Rahmen der Artikelserie "Was 3.16 bringt", die aus drei Teilen besteht:

Es gab weitere Fortschritte bei der Renovierung des Codes für Control Groups (Cgroups). Durch sie erhält die Ressourcenverbrauchs-Steuerung des Kernels mittelfristig ein neues Interface, das die Dokumentation jetzt näher erläutert; es lässt sich zu Testzwecken bereits jetzt über einen Mount-Parameter aktivieren. Weitere Details zum neuen Interface und den tiefgreifenden Umbauten am viel kritisierten Cgroups-Code erläutert der kürzlich veröffentlichte LWN.net-Artikel "The unified control group hierarchy in 3.16".

Ganz unabhängig davon warnen die Entwickler vor dem Einsatz von Kernel Memory Control Groups (kmemcg): Dieser Cgroup-Controller sei noch unausgereift sei und habe bekannte Probleme. Kmemcg liegt dem Kernel seit Version 3.8 bei und kann den Speicher begrenzen, den der Kernel intern zur Verwaltung eines Prozesses benötigt.

Der Prozessor-Strommanagement-Treiber intel_pstate arbeitet jetzt mit Broadwell-Prozessoren zusammen, den Intel offenbar erst im Herbst einführen wird. Der ARM-Code unterstützt jetzt nicht nur Suspend-to-Disk, sondern auch das im März vorgestellte Tegra-K1-Entwicklerboard Jetson TK1. Multi-Platform-Kernel, die unter ganz unterschiedlichen ARM-Platformen laufen, können nun Support für Samsungs Exynos enthalten; solche Kernel-Image beherrschen aber noch nicht alle Funktionen, die speziell für diese SoCs kompilierte Kernel bieten. Linux unterstützt nun Multi-cluster power management bei einigen der neueren Exynos-SoCs; dadurch kann Linux alle schnelleren Kerne dieser Big-Little-SoCs herunterfahren, um die Leistungsaufnahme zu reduzieren (u. a. 1, 2, 3).

Mehr Infos

Entwicklungsstand

Auf das derzeit aktuelle Linux 3.16-rc5 dürfte rund um den 20. Juli die sechste Vorabversion folgen. Bislang ist noch nicht abzusehen, ob es schon die letzte sein könnte oder ob noch mindestens ein weiterer RC erscheint, bevor Linux 3.16 veröffentlicht wird.

Es gab noch hunderte andere Änderungen am Code der beschriebenen Kernel-Bereiche. Informationen zu diesen finden Sie über die folgenden Links, die auf Git-Merge-Commits verweisen, die die wesentlichsten Neuerungen der beschriebenen Bereiche enthalten haben; die Kommentare zum Merge enthalten zumeist eine Beschreibung, die die wichtigsten Änderungen des jeweiligen Subsystems nennt.

Architektur-Code

Architektur-Code ARM

Architektur-Code x86

Infrastruktur

Virtualisierung

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 dem Twitter-Konto "@kernellog" annonciert. (thl) (thl)