Eine Ankündigung von Nvidia zog in Linux 5.18 die meiste Aufmerksamkeit auf sich. Unter dem Radar aber landeten weitere interessante Neuerungen im Kernel: Er unterstützt jetzt eine jüngere C-Variante, eBPF wird zum Paketgenerator und XDP mit Multibuffer-Support beschleunigt Netzwerke.
Völlig überraschend kündigte Nvidia Mitte Mai an, bestimmte Grafikkartentreiber fortan quelloffen entwickeln zu wollen [1]. Passend dazu veröffentlichte das Unternehmen ein Github-Repository [2] mit Code für den R515-Treiber. Wer die lange und leidvolle Geschichte mit Nvidia-Treibern unter Linux [3] kennt, konnte nur staunen.
Zwar wirkte sich die Nachricht nicht direkt auf den aktuellen Kernel 5.18 aus, und für Nvidia-Gamer scheint die Sache auch noch ein paar Haken zu haben [4]. Dennoch sprach Red-Hat-Mitarbeiter und Gnome-Entwickler Christian Schaller von einem großen Gefallen für die Open-Source-Grafik-Community [5]. In der Folge dürfte in den kommenden Monaten und Jahren einiger Nvidia-Code in den Linux-Kernel fließen. Wann Nvidia (Abbildung 1) allerdings auch Consumer-Grafikkarten adäquat unterstützt, steht noch in den Sternen.
Kaum da, schon wieder weg?
Ein anderes Unternehmen, Paragon Software, hatte erst im Oktober 2021 NTFS3-Code an den Linux-Kernel gespendet. Nur wenige Monate später betrachtete Entwickler Kari Argillander den Treiber allerdings bereits als verwaist [6]: Die Maintainer seien nach dem Merge untergetaucht. Linus Torvalds schlug vor, den Treiber notfalls wieder zu entfernen – man brauche keine zwei unbetreuten NTFS-Treiber im Kernel.
Ein paar Tage später kam dann eine Entwarnung: Der Treiber werde sehr wohl betreut, schrieb ein Paragon-Entwickler. Man sei aber noch beschäftigt, einen Kernel.org-Account zu besorgen und den Key zu signieren. Das aber setzt ein persönliches Treffen mit anderen Kernel-Entwicklern voraus – selbst in gefühlten Nach-Corona-Zeiten noch immer ein Problem. Am Ende waren es also bloß die Tücken der Bürokratie, und NTFS3 bleibt offenbar (vorerst) im Kernel.
Deutlich mehr Action bekamen im aktuellen Entwicklungszyklus andere Dateisysteme, der Device-Mapper und die Storage-Treiber ab. Die Entwickler arbeiteten etwa an den blockbasierten Ein- und Ausgabe-Statistiken für den Device Mapper, wobei besonderes Augenmerk darauf lag, künftig akkurate Zahlen für »dm-crypt« zu liefern [7]. Verwenden die Device-Mapper-Targets das neue Interface »dm_submit_bio_remap()«, gelingt nun auch ein sauberes I/O-Accounting.
NVMe verliert indes ein Feature: Write Streams haben es laut Jens Axboe nie auf einen grünen Zweig gebracht, kein Anbieter habe das Feature (später Write Hints genannt) unterstützt [8]. Write Hints versetzen Userspace-Anwendungen in die Lage, Daten gezielter auf Flash-Laufwerken zu platzieren, um die Zugriffsgeschwindigkeit zu optimieren.
Beim Dateisystem Ext4 fielen vor allem Feintuning-Arbeiten an, um kürzlich eingeführte Features zu stabilisieren, darunter das neue Mount-API und das Fast-Commit-Feature. Für Darrick Wong lag das größte XFS-Feature in diesem Zyklus darin, den Code für Inode-Attributierungen in Einklang mit dem Virtual File System (VFS) zu bringen und ihn damit an das Verhalten von Ext4 und Btrfs anzunähern [9]. Wong kündigte auch an, dass Dave Chinner für einen Release-Zyklus als XFS-Maintainer einspringen werde. Der Grund: Er selbst wolle in dieser Zeit eine umfangreiche Design-Review für die Online-Repair-Funktion starten, die nun nach fünf Jahren Feature-komplett sei. Aber nicht nur das: Dave Chinner und er wollen für solche Phasen künftig ein Co-Maintainer-Modell einführen, das regelmäßige Wechsel erlaubt. Er hofft, dass sich das auch für andere Tools im XFS-Ökosystem durchsetzt.
Für Android-Geräte bringt das Flash-Dateisystem F2FS einige Performance-Optimierungen mit, schreibt Jaegeuk Kim [10]. So soll es sich nach plötzlichen Stromausfällen schneller erholen. Außerdem unterstützt F2FS nun ID-mapped Mounts, die seit Kernel 5.12 an Bord sind. Sie erlauben es mehreren Nutzern, Dateien und Verzeichnisse mit unterschiedlichen Besitzrechten zu mounten, was etwa bei den Portable Homes von Systemd eine Rolle spielt.
Btrfs kennt ID-mapped Mounts bereits seit Kernel 5.15. Hier standen daher andere Features im Fokus. User-Space-Anwendungen schreiben zum Beispiel neuerdings rohe Daten direkt in Extents und lesen sie daraus. Die Daten lassen sich aktuell komprimieren und in Zukunft wohl auch verschlüsseln. Die überarbeiteten Funktionen »send«- und »receive« sollen diese Option verwenden [11].
Vernetzt
NFSv3 ist eine Erfindung der 90er-Jahre. Gut drei Jahrzehnte später unterstützen nun auch sämtliche Nfsd-Builds diese Technologie [12]. In Bezug auf das etwas aktuellere NFSv4 kennt Nfsd nun das Birth-Time-Attribut »btime«. Daneben warten Performance-Optimierungen und Fixes.
Was NFS-Clients angeht, sieht Trond Myklebust ein Highlight in dem Wechsel von »nfs_readpages()« auf »nfs_readahead()«. Readahead ist der Versuch, Inhalte in den Page Cache zu laden, bevor eine Anwendung sie explizit anfordert. Ebenfalls im Gepäck stecken Verbesserungen an »nfs_readdir()«, um es schneller und robuster zu machen, sowie Swap-Optimierungen [13].
Im Netzwerkbereich erkennt Linux viel neue Hardware. Dazu gehören der Multiport-100Base-T1-Switch LAN937x, Davicoms SPI-Fast-Ethernet-Controller DM9051, die Ethernet-Switches RTL8367S und RTL8367RB-VB (mit MDIO-Interface) von Realtek sowie der MT8195-SoC von Mediatek.
Fast noch spannender liest sich eine Verbesserung im Netzwerk-Core-Bereich, die XDP (Express Data Path) betrifft. Die Technologie verarbeitet große Datenpaketmengen deutlich schneller [14]. XDP [15] unterstützt nun Multibuffer-Pakete und lässt sich damit in neuen Bereichen einsetzen. In LSO-Szenarien (Large Segment Offload) sammelt ein Controller erst einmal die UDP- oder TCP-Pakete einer Verbindung ein, bevor er sie in einem Schwung an die CPU weiterreicht. Das entlastet den Prozessor, da er den TCP-Stack auch für viele Ethernet-Pakete nur einmal ausführen muss. Zugleich erlaubt der Multibuffer-Support den Einsatz übergroßer Ethernet-Frames (Jumbo Frames) und Packet-Header-Splits, bei denen Netzwerkkarten die Daten und Header von Paketen aus Performance-Gründen separieren.
Beim schnellen Weiterleiten von Datenpaketen spielt auch BPF eine tragende Rolle: »bpf_prog_run()« bringt nun einen neuen Live-Packet-Modus mit, der die Return Codes von XDP-Programmen handhabt und die Pakete an den Stack oder andere Geräte schickt. Der Modus lässt sich auch prima als programmierbarer XDP-Paketgenerator verwenden [16].
Security First
In Sachen Sicherheit berücksichtigt die Krypto-API nun auch schlechtere Hardware-basierte Random-Number-Generatoren. Die Inline-Verschlüsselung von Dateien mithilfe von »blk-crypto« klappt nun bei Fscrypt auch über Direct I/O. Die Daten landen also direkt auf der Festplatte, ohne Umwege über Caches zu nehmen.
Auch beim Thema Kernel-Programmierung gibt es immer wieder Neues. Nicht nur macht das Rust-for-Linux-Projekt Fortschritte [17]. Die Entwickler haben auch beschlossen, künftig eine neuere C-Version zu unterstützen: Neben C99 kommt nun auch C11 zum Zug [18].
Plattformkonform
Zu den Highlights im x86-Plattform-Bereich gehören die Unterstützung für AMDs Host System Management Port (HSMP) und Intels Software Defined Silicon.
Beim ersten handelt es sich um ein Userspace-Interface für Server-Prozessoren aus der EPYC-Reihe von AMD. Ein passendes Kernel-Modul erzeugt dazu ein »/dev/hsmp«-Interface und erlaubt es Nutzern, über sogenannte Mailbox-Register bestimmte Funktionen für das Systemmanagement zu adressieren.
Die zweite Änderung betrifft bestimmte Intel-Xeon-Prozessoren, die Software Defined Silicon (SDSi) unterstützen. Laut Intel handelt es sich dabei um eine Möglichkeit, mithilfe eines Lizenzprozesses zusätzliche CPU-Features zu aktivieren. Das bedeutet aber auch: Die gekauften Xeon-Prozessoren (Abbildung 2) entfalten ihr volles Potenzial erst nach weiteren Münzeinwürfen [19] – das könnte auch nach hinten losgehen.
Die ARM-Entwickler entfernen die Unterstützung für NOMMU-ARMv4- oder ARMv5-Plattformen. Wer diese weiterhin mit Linux verwenden möchte, muss nun Prozessoren der Cortex-M-Familie verwenden. Russell King bringt derweilen Unterstützung für per IRQ und virtuell gemappte Stacks in allen 32-Bit-ARM-Systemen unter. Um die recht winzigen Stacks für Kernel-Aufgaben vor dem Überlaufen zu schützen [20], ist in Zukunft ein fliegender Wechsel auf einen anderen Stack möglich.
Auch die RISC-V-Entwickler schlafen nicht und spendieren der Architektur Sv57-basierten virtuellen Speicher, verbessern die »memmove()«-Implementierung und erlauben es Upstream-Kerneln, künftig ohne Verrenkungen auf Microchips PolarFire SOC und auf dem Icicle Development Board zu booten.
In Sachen Virtualisierung profitieren AMD-User mit speziellen Bedürfnissen vom neuen Kernel, der nun Nested-nested-Optimierungen verspricht. Xen schützt den USB-Treiber besser gegen potenzielle Angreifer. Während »virtio-net« RSS-Support erhält (Receive Side Scaling), umschiffen die überarbeiteten Virtio-Treiber defekte Hardware eleganter.
Im Input-Bereich haben Entwickler generische Eingaben optimiert, und vereinfachen für Linux so den Umgang mit Tablet-Events. Zugleich klappt künftig die Kooperation zwischen Linux-Kernel und Apples Magic Keyboards sowie den T2-Macs besser.
Im Grafikbereich hebt Dave Airlie die Arbeit an DG2 hervor. Erster Code war bereits in der Kernel-Version 5.16 gelandet, noch ist der Treiber für die neue Intel-Xe-GPU aber nicht fertig. Neben einigen Programmier-Workarounds steuert der Kernel 5.18 beschleunigten Migrations-Support bei und ergänzt die Subplattform DG2-D12. Für den Vorgänger DG1 gibt es OPROM-über-SPI-Unterstützung. Daneben aktivieren die Entwickler die “Alderlake-N”-Plattform und spendieren ihr PCH-Support. Für den Panfrost-Treiber gibt es ersten Dual-Core-GPU-Support.
Der AMD Kernel Fusion Driver (»amdkfd«) beherrscht nun CRIU. Das erlaubt es, Compute-Workloads an einem bestimmten Punkt einzufrieren und später wiederherzustellen. Der AMDGPU-Treiber aktiviert den Freesync-Videomodus nun standardmäßig und baut zugleich weitere Aktualisierungen für die neue AMD-GPU “Cyan Skillfish” ein. Freesync passt die Refresh Rate des Monitors an die variable Frame-Rate der Grafikkarte an, um Stuttering und Tearing zu verhindern und ein flüssigeres Spielen zu erlauben.
Zu haben ist der neue Kernel wie immer auf Kernel.org [21]. Wer ihn nicht selbst übersetzen möchte, wartet am besten, bis die Distributionen eine aktualisierte Version anbieten. (uba)
Infos
- Nvidia-Ankündigung: https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/
- Nvidias Github-Repository: https://github.com/NVIDIA/open-gpu-kernel-modules
- Editorial: Jan Kleinert, “Allein die Geste zählt”, LM 08/2012, S. 3, https://www.lm-online.de/26271
- Golem-Kommentar zur Nvidia-Ankündigung: https://www.golem.de/news/linux-nvidias-grosse-schoene-open-source-schummelei-2205-165301.html
- Gnome-Entwickler Christian Schaller zu Nvidias Ankündigung: https://blogs.gnome.org/uraeus/2022/05/
- Zukunft des NTFS3-Treibers: https://lkml.org/lkml/2022/5/2/869
- Device-Mapper-Updates: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b1f8ccdaae0310332d16f65bf0f622f9d4ae2391
- NVMe entfernt Write Streams: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=561593a048d7d6915889706f4b503a65435c033a
- XFS-Updates: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b1b07ba356f04268230e16a8e1813fe1b19dac54
- Jaegeuk Kim über F2FS: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ef510682af3dbe2f9cdae7126a1461c94e010967
- Schnelleres Btrfs: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5191290407668028179f2544a11ae9b57f0bcf07
- NFSv3-Support in Nfsd: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=14705fda8f6273501930dfe1d679ad4bec209f52
- NFS-Clients: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=965181d7ef7e1a863477536dc328c23a7ebc8a1d
- Netzwerk-Updates: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=169e77764adc041b1dacba84ea90516a895d43b2
- XDP-Projekt: https://github.com/xdp-project
- XDP und eBPF: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=de55c9a1967c798fba6d8afe19826f8f03049db3
- Rust im Kernel: https://lkml.org/lkml/2022/5/7/13
- Von C99 zu C11: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=50560ce6a0bdab2fc37384c52aa02c7043909d2c
- Intel Software Defined Silicon: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1464677662943738741500a6f16b85d36bbde2be
- ARM-Stack schützen: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9c0e6a89b592f4c4e4d769dbc22d399ab0685159
- Kernel.org: https://www.kernel.org








