Kernel 5.1 bewältigt endlich gepufferte asynchrone Ein- und Ausgaben, mustert “a.out” aus, verbessert Fanotify, unterstützt kumulative Livepatches und ergänzt einen neuen Energiespar-Governor.
Linus Torvalds hat die neue Version 5.1 des Linux-Kernels freigegeben. Seit der letzten Vorabversion seien zwar nur wenige Änderungen eingeflossen, einige aber erst in letzter Minute, gab der Kernelchef auf der Mailingliste an.
Torvalds selbst ist diesmal an der Ausmusterung des betagten Dateiformats »a.out« beteiligt. Längst haben das flexiblere ELF (Executable and Linking Format) und Coff (Common Object File Format) »a.out« abgelöst. Moderne Compiler würden das Format ohnehin nicht mehr unterstützen, schreibt Torvalds. Er entfernte kurzerhand den entsprechenden Core-Dump-Code, der Speicherabzüge generiert, sobald der Kernel abstürzt. Der Code sei laut Torvalds ohnehin kaum gepflegt und voller Bugs.
Vollends entfernen mochte er »a.out« jedoch nicht. Im eher unwahrscheinlichen Fall, dass Entwickler das Format doch noch benötigen, lässt es sich wieder aktivieren – notfalls auch im Userspace, wie Entwickler Alan Cox anmerkte.
Künftig wird es möglich, nicht-flüchtigen NVDIMM-Speicher als Arbeitsspeicher in das System einzubinden. Zwar laufen die Zugriffe auf solche Laufwerke deutlich langsamer ab, vergleicht man sie mit jenen auf flüchtigen Arbeitsspeicher. Sie sind dennoch schnell genug, um in einigen Szenarien als Speichererweiterung zu dienen, zum Beispiel auf Datenbankservern oder als günstigere Alternative auf virtuellen Servern.
Endlich asynchron
Mit »io_uring« [1] landet eine hochperformante Schnittstelle für asynchronen Datenverkehr im neuen Kernel 5.1. Das bisherige asynchrone Interface »aio« fristete aufgrund zahlreicher Einschränkungen eher ein Nischendasein. Zum einen kam es nur mit direkten Ein- und Ausgaben zurecht (»O_DIRECT«), zum anderen blockierte es gelegentlich doch, weil es auf Metadaten wartete. Nicht zuletzt brachte es ein suboptimales API mit. Die Versuche, »aio« zu verbessern, führten am Ende offenbar nicht zum gewünschten Erfolgserlebnis.
Im Kontrast dazu kommt »io_uring« auch mit gepufferten Ein- und Ausgaben zurecht, was die überwiegende Zahl an Usecases abdeckt. Solche ließen sich mit dem alten System noch nicht asynchron umsetzen.
In der Praxis nutzt das Interface zwei Warteschlangen, eine Submission und eine Completion Queue. In die Submission Queue schickt die Anwendung ihre Anforderungen. Der Kernel arbeitet sie im Laufe der Zeit ab und schiebt das Ergebnis in die Completion Queue. Details warten unter [1]. Dank der Bibliothek Liburing setzen Entwickler zugleich vorgefertigte »io_uring«-Instanzen auf und nutzen sie über ein simples API.
Initram-FS umgehen
Eine weitere Neuerung: Beim Systemstart dürfen Admins über den Device Mapper (DM) angesprochene virtuelle Block- orientierte Geräte auch außerhalb eines Initram-FS-Archivs adressieren. In diesen Archiven liegen gewöhnlich die für den Start benötigten Dateien, zum Beispiel die Basis-Treiber. Über einen nun ergänzten Kernelparameter darf Linux ein DM-Dateisystem auch direkt starten, etwa einen Raid-Verbund.
Mit Fanotify gibt es bereits seit Linux 2.6.36 eine Schnittstelle, um Änderungen an Dateisystemen zu überwachen. Es gilt als Ersatz für Inotify, das veraltet ist und auf großen Dateisystemen nur schlecht funktioniert. Nun haben Entwickler die Arbeit an Fanotify – nach einigen Anpassungen in Linux 4.20 – erneut aufgenommen. Über die Funktion »Super Block Root Watch« [2] haben sie das Kernelmodul fit für die inzwischen immer größer werdenden Datenträger und die darauf eingesetzten Dateisysteme gemacht.
Mit Teo abhängen
Ein eigenes Kernel-Subsystem (»cpuidle«) beschäftigt sich mit der Frage, wie der Kernel seine freie Zeit am besten und – vor allen Dingen – am effizientesten nutzt. Mit Teo, dem Timer Events Oriented Governor, erhält der Kernel 5.1 nun einen weiteren Modus für die Freizeitgestaltung. Teo soll effizienter arbeiten als der Governor Menu, der bislang als erste Wahl für Tickless-Systeme gilt und am meisten Strom spart.
Kernelentwickler Rafael Wysocki hatte zwar einige Probleme mit Menu identifiziert. Diese zu beheben hätte allerdings womöglich legitime Workloads gestört, also ergänzte er mit Teo kurzerhand einen neuen Governor [3].
Dass das von Facebook entwickelte Dateisystem Btr-FS bereits seit einer Weile die Zstd-Kompression nutzt, überrascht wenig. Schließlich wächst auch Zstd unter Facebooks Fittichen heran. Überraschender ist, dass Nutzer von Btr-FS bislang den Kompressionslevel nicht einstellen konnten, was den Einsatz des Dateisystems erschwerte.
Das soll sich nun dank der neuen Mountoption »-o compress=zstd:level« ändern. Die Commitnachricht verrät auch, wie stark und in welcher Geschwindigkeit die verschiedenen Kompressionslevel Dateien komprimieren, zum Testen dient der Silesia Corpus [4].
Livepatching ist eine gute Sache, die Komplexität gerät aber manchmal zur Bürde. Wenn etwa eine Funktion mehrfach gepatcht wird und der Entwickler die Patches in einer bestimmten Reihenfolge stapeln muss. Will er ein älteres Patch aus dem Stapel entfernen, setzt mitunter der Jenga-Effekt (Abbildung 1) ein und das Konstrukt fällt in sich zusammen.
Atomare Ersetzungen sollen das ändern. Sie erlauben es, kumulative Patches anzubringen. Die versammeln alle erwünschten älteren Änderungen in einem Superpatch, das sich leichter verwalten lässt. Steht das »Replace«-Flag in »struct klp_patch« auf »true«, leitet der Kernel alle Prozesse auf das kumulative Patch um, sobald es eingepflegt ist. Die älteren Patches fliegen ebenso raus wie die Ftrace-Handler für die nicht mehr veränderten Funktionen.
Schutz für den Schutz
Gegen Angriffe, die die Schutzmechanismen SMEP (Supervisor Mode Execution Protection), SMAP (Supervisor Mode Access Prevention) sowie UMIP (User-Mode Instruction Prevention) in CPUs ungewollt deaktivieren, gibt es neuerdings ein Patch. Das schaltet einfach die Schreibfunktionen auf die CPU-Schalter CR0 und CR4 ab.
Über den Eintrag »usbcore.authorized_default=2« im Verwaltungsdateisystem Sys-FS schaltet der Admin künftig alle externen USB-Laufwerke ab. Die internen bleiben dabei online. Alternativ findet der Admin eine entsprechende Option in der Anwendung USB-Guard.
Herunterladen lässt sich der Kernel 5.1 wie gewohnt auf http://kernel.org.
Infos
-
»io_uring«: http://kernel.dk/io_uring.pdf
-
Super Block Root Watch: https://github.com/amir73il/fsnotify-utils/wiki/Super-block-root-watch
-
Neuer Menu-Governor: https://lkml.org/lkml/2018/10/26/373
-
Silesia Corpus: http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia







