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.
- Thorsten Leemhuis
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).
Locking-Optimierungen
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.
Fehlerverfolgung
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.
Sicherheit oder Tiefschlaf
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.
Cgroups-Renovierung
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.
Architektur-Code
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).
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.
Merge Commits
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
- Pull ARC updates from Vineet Gupta
- Pull first set of s390 updates from Martin Schwidefsky
- Pull m68knommu updates from Greg Ungerer
- Pull m68k updates from Geert Uytterhoeven
- Pull Microblaze updates from Michal Simek
- Pull MIPS updates from Ralf Baechle
- Pull more powerpc updates from Ben Herrenschmidt
- Pull powerpc updates from Ben Herrenschmidt
- Pull SH driver update from Simon Horman
Architektur-Code ARM
- Pull ARM64 EFI update from Peter Anvin
- Pull arm64 updates from Catalin Marinas
- Pull ARM SoC board support updates from Olof Johansson
- Pull ARM SoC cleanups from Olof Johansson
- Pull ARM SoC defconfig updates from Olof Johansson
- Pull ARM SoC devicetree updates from Olof Johansson
- Pull ARM SoC driver changes from Olof Johansson
- Pull ARM SoC low-priority fixes from Olof Johansson
- Pull ARM updates from Russell King
- Pull part one of ARM SoC updates from Olof Johansson
- Pull part two of ARM SoC updates from Arnd Bergmann
Architektur-Code x86
- Pull x86-64 espfix changes from Peter Anvin
- Pull x86 cdso updates from Peter Anvin
- Pull x86 EFI updates from Peter Anvin
- Pull x86 IOSF platform updates from Ingo Molnar
- Pull x86 microcode changes from Ingo Molnar
- Pull x86 mm update from Ingo Molnar
- Pull x86 RAS changes from Ingo Molnar
- Pull x86/UV changes from Ingo Molnar
- Pull x86 vdso fixes from Peter Anvin
Infrastruktur
- Merge misc updates from Andrew Morton
- Merge more updates from Andrew Morton
- Pull cgroup updates from Tejun Heo
- Pull core locking updates from Ingo Molnar
- Pull crypto updates from Herbert Xu
- Pull kbuild misc updates from Michal Marek
- Pull kbuild updates from Michal Marek
- Pull LLVM patches from Behan Webster
- Pull module updates from Rusty Russell
- Pull more locking changes from Ingo Molnar
- Pull more perf updates from Ingo Molnar
- Pull more scheduler updates from Ingo MolnarARM-Code unterstütztARM-Code unterstützt
- Pull perf updates from Ingo Molnar
- Pull RCU changes from Ingo Molnar
- Pull scheduler updates from Ingo Molnar
- Pull security layer updates from Serge Hallyn
- Pull timer core updates from Thomas Gleixner
- Pull tracing cleanups and bugfixes from Steven Rostedt
- Pull tracing updates from Steven Rostedt
- Pull workqueue updates from Tejun Heo
Virtualisierung
- Pull KVM updates from Paolo Bonzini
- Pull vhost infrastructure updates from Michael S. Tsirkin
- Pull virtio updates from Rusty Russell
- Pull Xen updates from David Vrabel
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)