Linux 6.5 mit zahlreichen Optimierungen erschienen

Seite 2: Dauerbaustelle Rust

Inhaltsverzeichnis

Typisch für die Kernel-Entwicklung legte sich das Entwicklerteam beim Einführen von Rust mit Linux 6.1 eine unterstützte Rust-Version fest. Die Wahl fiel auf die damals bereits ältere Version 1.62.0. Linux 6.5 bringt das erste Update von Rust im Mainline-Kernel mit sich. Zukünftig ist 1.68.2 das Rust der Wahl, welches am 28. März dieses Jahres erschien.

Die Entscheidung ist wieder konservativ. Aktuell ist Rust 1.72.0, welches am vergangenen Donnerstag erschien. Notwendig machten diesen Versionswechsel benötigte Rust-Features, die die alte Version bisher nicht bot.

Die Änderungen an der Rust-Integration beschränken sich hauptsächlich auf Anpassungen durch den Wechsel der Toolchain von Rust 1.62.0 auf 1.68.2. Der aktuelle Kernel stellt damit vorerst die Weichen für den weiteren Ausbau der Rust-Integration. Das eigentliche Programmieren von Kernel-Modulen in Rust bringt er zunächst nicht voran. Er stellt den Unterbau neu auf.

Ein leidiges Thema in Bezug auf die Programmiersprache C sind Memory-Leaks. Zuvor allozierte Speicherbereiche bleiben als unnutzbares "schwarzes Loch" zurück, wenn keine extra programmierte Freigabe dieser Bereiche erfolgt. Um dem Problem abseits des C-Sprachstandards zu begegnen, bieten die dominierenden Open-Source-Compiler gcc und Clang schon länger passende Erweiterungen an.

Diese Erweiterungen erlauben es, einer Variablen mittels der Schlüsselwörter __attribute__ und __cleanup__ eine "Aufräumfunktion" mit auf den Weg zugeben. Sobald eine Variable ihren Gültigkeitsbereich (Scope) verlässt, sorgt ein Aufruf dieser Funktion für die ordentliche Freigabe der Variablen. Dieses "scope-based" Ressourcen-Management befreit davon, selbst an jeder möglichen Stelle auf die Freigabe zuvor allozierter Spreicherbereiche zu achten.

Das Kernel-Team hat ein Patch-Set von Peter Zijlstra pragmatisch aufgegriffen, der diese Compiler-Erweiterung im Kernel nutzbar macht. Linus Torvalds schaltete sich in das Thema ein und ermutigte Zijlstra, seine Lösung allgemein nutzbar für den Kernel zu machen. Zijlstras ursprünglicher Ansatz zielte zunächst nur auf Locks ab.

Dieser Rückgriff auf die Compiler-Erweiterungen wird den Kernel über kurz oder lang sicherer gegen die "Löcher" im Speicher machen. Diese Leaks sind schließlich im Kernel schwerwiegender als in einer Anwendung. Der Kernel läuft dauerhaft. Eine Anwendung lässt sich beenden, um Leaks freizugeben. Beim Kernel funktioniert das nur durch einen Reboot.

Es ist davon auszugehen, dass die Kernel-Entwicklerinnen und Entwickler dieses neue Feature dankend aufgreifen werden. Schließlich befreit es elegant, eigenen Code für die Freigabe an jeder möglichen Stelle zu bedenken und zu programmieren.

Auf x86-Systemen kann der Linux-Kernel die CPUs in weiten Teilen parallel online bringen. Bislang war das nur CPU für CPU in Sequenz nacheinander möglich. Der neue parallele Ansatz reduziert die Zeit, die benötigt wird, alle Prozessoren im System zu aktivieren. Der Prozess lässt sich damit maximal auf ein Zehntel verkürzen. Das kommt insbesondere beim Booten von Systemen mit vielen Prozessoren zum Tragen. Auch beim Reaktivieren von CPUs fällt der neue Ansatz positiv auf.

Optimierter Code für den PCIe-Bus sorgt dafür, dass der Kernel weniger Zeit beim Warten auf PCIe-Geräte vertrödelt. Gemäß der PCIe-Spezifikation müssen lediglich Geräte mit Transferrate von über 5 GT/s aktiv ihre Verbindung ins System signalisieren. Im Umkehrschluss sind die langsameren Geräte bis zu 5 GT/s nicht verpflichtet, aktiv ihre Präsenz und Einsatzbereitschaft bekannt zu geben. Der Kernel behandelte bislang beide Fälle identisch. Er wartete bei den langsamen Geräten auf aktive Rückmeldung, die jedoch nicht zwingend kam. Beim System-Resume bedeutete das teils eine Verzögerung um rund eine Minute, bis das System wieder wach und einsatzbereit war. Gemäß PCIe-Spezifikation genügt es jedoch, eine Sekunde zu warten, um ein Gerät als präsent zu erkennen. Das setzt Linux 6.5 für die langsamen Geräte nun um, was die Wartezeit vor allem beim Resume deutlich verkürzen kann.

Mit Kernel 6.5 macht sich Linux fit für die neueste Generation von Hardware. So bringt es sich für USB4 v2 in Stellung. USB4 v2 erlaubt Transferraten von bis zu 80 Gbps via USB C. Zudem gestattet es auch 120 Gbps in eine Richtung, wobei in Gegenrichtung dann nur 40 Gbps möglich sind.

Als weitere Neuerung schreitet der Ausbau von WiFi 7 in Linux voran. WiFi 7 erlaubt mit der "Multi-Link Operation" (MLO) simultanes Senden und Empfangen von Daten über mehrere Frequenzbänder und Kanäle hinweg. Entsprechende Hardware vorausgesetzt, lassen sich mit MLO Bänder mit 2,4 GHz, 5 GHz und 6 GHz simultan verwenden. Ziel ist es, die Bandbreite durch diese Bündelung zu erhöhen.

Ebenso ist mit MIDI 2.0 die neueste Generation des "Music Instruments Digital Interface" mit an Bord. Selbst der PS/2-Treibercode für Mäuse und Tastaturen erfuhr eine Runderneuerung.

Linux 6.5 baut die Hardware-Unterstützung aus. Zudem zieht es einige Register zur Optimierung und Verbesserung der Stabilität. Das Entscheidende findet unter der Oberfläche statt. Es mag wie ein Wartungs-Release erscheinen, stellt aber intern viele Weichen für die Zukunft.

Ein erster prominenter Nutzer des neuen Kernels steht bereits fest. Canonical hat bekannt gegeben, seiner kommenden Distribution Ubuntu 23.10 "Mantic Minotaur" den neuen Linux-Kernel 6.5 mit auf den Weg zu geben.

Der neue Kernel steht wie gewohnt unter www.kernel.org zum Download bereit. Alle Änderungen sind im ChangeLog nachzulesen.

Zuletzt erschien Linux-Kernel 6.4 zum Ende Juni. Er brachte erste Unterstützung für Apples M2-Prozessoren sowie bessere Leistung und optimierte Energieaufnahme bei AMD-CPUs mit.

(dmk)