Aus Linux-Magazin 06/2020

Kernel 5.6: Wireguard, Zone-FS, USB4-Code

© melpomen, 123RF

“Social-Distancing-Champion” Linus Torvalds hat das neue Linux 5.6 freigegeben. Mit von der Partie: die VPN-Alternative Wireguard mit ein paar Last-Minute-Fixes, erster USB4-Code und das neue Zone-FS-Dateisystem.

Für die Corona-Krise scheint Linus Torvalds bestens gerüstet: Seine Tochter bezeichne ihn jedenfalls als Social-Distancing-Champion, schreibt er in der Ankündigung [1]. Er erwarte einen ziemlich durchschnittlichen Entwicklungszyklus für Kernel 5.7, weil die meisten Kernel-Entwickler ohnehin traditionell zu Hause arbeiten. Er verstehe aber auch, wenn Entwickler momentan andere Sorgen haben als das nächste Merge Window. Schließlich sei ihre Gesundheit und die ihres Umfelds wichtiger.

Eine lange erwartete Neuerung von Kernel 5.6 ist der finale Einzug von Wireguard in den Mainline-Kernel. Der machte offenbar auch den Wireguard-Hauptentwickler Jason Donenfeld nervös: Er lieferte noch ein paar Last-Minute-Fixes, die etwa den Umgang mit unzureichenden öffentlichen Schlüsseln verbessern und generell die Tiefenverteidigung stärken.

Außerdem löst der Linux-Kernel für 32-Bit-Systeme das Jahr-2038-Problem. Das besteht darin, dass der für das Datum gewählte 32-Bit-Datentyp nicht ausreicht. Die Folge: Ohne Änderungen würde das Datum im Jahr 2038 auf vielen Systemen auf das Jahr 1901 umspringen. Die Typen »time_t/timeval/timespec« wurden daher aus dem Kernel entfernt, einige Treiber und verbliebene Dateisysteme gepatcht. Laut Entwickler Arnd Bergmann [2] gibt es im neuen Kernel 5.6 keine Referenzen mehr auf »time_t«, sodass sich der Kernel prinzipiell erstmals für 32-Bit-Systeme eignet, die länger als 2038 laufen sollen.

Linus Torvalds selbst hob in der Ankündigung zum ersten Release Candidate [3] den neuen System Call »openat2()« hervor, an dem die Kernel-Entwickler seit geraumer Zeit schrauben. Das Problem: Der Vorgänger »openat()« akzeptiert ungeprüft Flags aus dem Userspace, was Sicherheits- und Stabilitätsprobleme nach sich ziehen kann. »openat2()« setzt hingegen auf eine sichere Path Resolution. Laut Torvalds ist es also möglich, nach Dateinamen zu suchen, ohne den Symlinks und Mountpoints zu folgen. Entwickler können ihren Code anweisen, Pfade nur dann zu öffnen, wenn sich diese nicht außerhalb eines bestimmten Sandboxing-Bereichs befinden.

Schnellere BPF-Programme

BPF-Programme laufen unter Umständen schneller, weil für aufwendige Adresssprungprozesse nun ein neues Maschinencode-Trampoline in die Bresche springt, wie LWN.net berichtete [4]. Das hilft insbesondere BPF-Programmen, die viele dieser Sprünge benötigen, weil sie etwa Netzwerkpakete filtern. Sie brauchen nun die drei Mal langsameren Retpoline-Sprünge nicht mehr. Letztere wiederum sind eine noch recht junge Erfindung, die den Kernel gegen Spectre-Angriffe schützen, was mit Performance-Einbußen einhergeht.

Weitere Änderungen ermöglichen es einem Userspace-Prozess, Array Maps direkt in seinen eigenen Adressraum zu mappen. Ein Zugriff auf diese Userspace-Daten benötigt dann den System-Call »bpf()« nicht mehr, der ebenfalls auf die Bremse drückt. Ein alternativer Ansatz über sogenannte Batched Map Operations erlaubt es, mehrere Elemente mit nur einem Systemaufruf abzuholen.

In der Zone

Auch Drittanbieter steuern einmal mehr nützlichen Code bei, wenn auch nicht uneigennützig. Von Western Digital kommt ein neues Dateisystem namens Zone-FS, das sich für spezielle Geräte namens Zoned Storage Devices (ZSD) eignet. Dank dieser Technologie möchte Western Digital künftig in großen Infrastrukturen, die heute bereits viele HDDs und SSDs einsetzen, noch mehr Daten speichern. Dafür hat das Unternehmen sogar eine eigene Zoned Storage Initiative [5] gegründet. Linus Torvalds hat den ZSD-Code für Kernel 5.6 akzeptiert. Abbildung 1 zeigt, wie der Zugriff auf Zoned Block Devices (ZBDs) im Kernel abläuft.

<a href="#artRef-f1">Abbildung 1</a>: Der Umgang mit Zoned Block Devices im Linux-Kernel. Quelle: blog.westerndigital.com

Abbildung 1: Der Umgang mit Zoned Block Devices im Linux-Kernel. Quelle: blog.westerndigital.com

Einen Blick in die Zukunft gewährt Greg Kroah-Hartman mit dem ersten Code für USB4. Die Spezifikation orientiert sich am Thunderbolt-3-Protokoll und bleibt zudem rückwärtskompatibel zu Thunderbolt 3 und USB 3.x. Der im Kernel gelandete Code unterstützt unter anderem PCIe- und DisplayPort-Tunneling, P2P-Networking sowie Host- und Device-seitige NVM-Firmware-Upgrades. Zugleich gibt es im Ökosystem rund um USB4 einige Änderungen. Die kommen unter anderem von Intel, helfen beim Initialisieren von USB4-Geräten und liefern Support für die Time Management Unit in USB4-Routern. Andere betreffen die Dokumentation.

Keine Blockadehaltung

Daneben schreitet die Arbeit an asynchronen, nicht blockierenden Systemaufrufen über »io_uring« weiter voran. Das ist für Kernel-Entwickler eine größere Sache, nachdem frühere Versuche gescheitert waren, den Kernel asynchron zu machen. Von Jens Axboe kommt Support für verschiedene neue Opcodes, darunter »fallocate«, »openat«, »close«, »statx« und »epoll_ctl« [6]. Entwickler dürfen nun zudem prüfen, welche Opcodes verfügbar sind und welche der Kernel unterstützt.

Thomas Gleixner bringt derweil Time-Namespace-Support in den Kernel [7], der ein typisches Problem von Containern löst. Wechselt ein Container den Host, kann das zu Irritationen führen, wenn die neue Zeit von der alten abweicht. Das betrifft die auf Linux-Systemen verwendeten »CLOCK_MONOTONIC« und »CLOCK_BOOTTIME«. Erstere misst die Zeit im Suspend-Modus nicht, letztere schon. Dennoch kommt es bei monotoner Zeitmessung zu Verstößen gegen die POSIX-Anforderungen.

Time Namespaces erlauben es laut Gleixner, für die beiden Uhrzeiten Versatzzeiten (Offsets) zu setzen. Das passiert nach dem Erzeugen des Namespace und vor dessen Inanspruchnahme. Diese Offsets beachten die Timer im späteren Verlauf. Für »REALTIME/TAI« lassen sich die Offsets jedoch bewusst nicht erzeugen.

Neuerungen gibt es nicht zuletzt in der Grafikabteilung. Der Nouveau-Treiber bringt einige Fixes für die “Turing”-Reihe von Nvidia mit (die bei Nouveau unter »tu10x und «tu11x läuft), zu der etwa Karten der RTX16-Serie gehören (Abbildung 2). Unter anderem gibt es Reparaturen am Modesetting und Fortschritte beim Secure-Boot-Support [8]. Auch die AMD-Entwickler waren nicht untätig. So bringt AMDGPU ersten Support für HDCP 2.x und für AMDs “Pollock”-Chip mit.

<a href="#artRef-f2">Abbildung 2</a>: Eine Feature-Matrix&nbsp;<a href="#artRef-i8">[8]</a> zeigt den Support der verschiedenen Nouveau-Treiber f&uuml;r 2D- und 3D-Funktionen von Nvidia-Karten.

Abbildung 2: Eine Feature-Matrix [8] zeigt den Support der verschiedenen Nouveau-Treiber für 2D- und 3D-Funktionen von Nvidia-Karten.

Das sind noch nicht die kompletten Änderungen für den Kernel 5.6. Weitere Details liefern unter anderem die Commit-Vermerke aus Linus Torvalds Git-Tree auf Github [9]. Der fertige Kernel wartet auch auf Kernel.org.

Infos

  1. Ankündigung von Linux 5.6: https://lkml.org/lkml/2020/3/29/379

  2. Arnd Bergmann zum Jahr-2038-Problem: https://lkml.org/lkml/2020/1/29/355

  3. RC1-Announcement: https://lkml.org/lkml/2020/2/9/221

  4. BPF-Performance: https://lwn.net/Articles/808503/

  5. Zoned-Storage-Initiative: https://blog.westerndigital.com/what-is-zoned-storage-initiative/

  6. Neue Opcodes: https://lkml.org/lkml/2020/1/27/636

  7. Time Namespace Support: https://lkml.org/lkml/2020/1/27/753

  8. Feature-Matrix für Nouveau-Treiber: https://nouveau.freedesktop.org/wiki/FeatureMatrix/

  9. Kernel auf Github: https://github.com/torvalds/linux

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 2 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben