Linux 6.7 bringt bcachefs

Der neue Linux-Kernel 6.7 bringt das lang erwartete Dateisystem bcachefs und wahlweise 32-Bit-Emulation. Itanium muss gehen.

In Pocket speichern vorlesen Druckansicht 256 Kommentare lesen

(Bild: heise online)

Lesezeit: 11 Min.
Von
  • Oliver Müller
Inhaltsverzeichnis

In der Nacht von Sonntag auf Montag erschien der neue Linux-Kernel 6.7. Er erblickte als erster Kernel des jungen Jahres das Licht der Welt und nicht – wie zuvor spekuliert – als letzter Kernel des alten Jahres. Das neue Kernel-Release bringt ein neues Dateisystem, wahlweise 32-Bit-Emulation und Verbesserungen bei der Speicherverwaltung und beim Netzwerkdurchsatz.

Am 21. Dezember hatte das Rätselraten ein Ende: Linus Torvalds entschied sich doch dafür, den neuen Kernel nicht in der Silvesternacht zu veröffentlichen. Stattdessen folgte noch ein achter Release-Candidate (6.7-rc8), der dem neuen Kernel eine Extrawoche für Tests verschaffte. Vor allem startete aber das Merge-Window für den nächsten Kernel 6.8 erst am 8. Januar. Dieses zweiwöchige Zeitfenster zum Einreichen und Festlegen der Patches für das nächste Kernel-Release hätte sonst ausgerechnet am Neujahrstag begonnen. Womöglich wären viele Entwickler doch noch abwesend gewesen.

Das schon mehrfach für die Integration vorgesehene Dateisystem bcachefs schaffte es nun endlich ins Kernel-Release. Das auf Robustheit und Zuverlässigkeit ausgelegte bcachefs tritt als "vollständiges" (feature-complete) Dateisystem an. Es beinhaltet bereits von Haus aus einige Extras wie Checksumming und das Unterstützen mehrerer Datenträger für ein Dateisystem, wofür andere Dateisysteme auf andere Systemdienste angewiesen sind.

Das moderne Dateisystem basiert auf Copy-on-Write (COW). Statt Daten beim Aktualisieren zu überschreiben, schreibt es diese an neue Positionen auf dem Datenträger und passt die Metadaten und Blöcke der jeweiligen Prozesse an. Auf dieser Basis bietet bcachefs einige moderne Features "out of the box" wie Snapshots, Caching oder geteilte Dateisysteme für virtuelle Maschinen.

Für die Datenintegrität bietet das neue Dateisystem Checksummen über Daten und Metadaten an. Zudem ist die Kompression und die Verschlüsselung von Daten bereits in bcachefs integriert. Zu den von bcachefs unterstützten Dateisystemen, die über mehrere Datenträger verteilt sind, zählen Replikation im Stile von RAID1 und RAID10 und ein eingebautes Erasure Coding nach Reed-Solomon zur Fehlerkorrektur, wie es auch die meisten RAID5- und RAID6-Implementierungen verwenden. Für alle diese Funktionen benötigt bcachefs keinen Volume-Manager wie etwa ext4 oder XFS.

Das ambitionierte Projekt konkurriert damit direkt mit anderen COW-Dateisystemen wie btrfs und ZFS. Ebenso schickt es sich an, in puncto Geschwindigkeit und Leistung die klassischen Dateisysteme ext4 und XFS auszustechen. Aktuell ist das Dateisystem noch als "experimentell" im Kernel eingestuft. Es ist allerdings vollständig implementiert und lädt zum Ausprobieren ein.

Seit Linux 2.6.32 verfügt der Kernel über das "Kernel Samepage Merging" (KSM). KSM sucht im Speicher nach Seiten (Pages) mit identischem Inhalt. Findet er solche, führt er sie zu einer Page zusammen und setzt die Referenzen auf diese Speicherbereiche auf diese eine Kopie. Zudem markiert er sie für COW (copy on write). Sobald eine Referenz die Seite ändert, bekommt diese eine eigene Kopie.

Ursprünglich war dieses Feature für die "Kernel-based Virtual Machine" (KVM) angedacht. So konnten mehr virtuelle Maschinen in den vorhandenen physischen Speicher gepackt werden. Viele Teile von aus gleichen Images gestarteten virtuellen Maschinen sind gleich und bleiben das für lange Zeit auch. Heute setzt dieses Feature auch bei anderen Einsatzszenarien an. Man denke hier etwa an Applikationen, die mehrere Instanzen mit den gleichen Daten starten, oder auch leichtgewichtige Container.

KSM fördert im Idealfall freien Speicher zutage. Allerdings verschleudert er CPU-Zeit, wenn kein Zusammenlegen von Pages möglich ist. Das geschieht zudem wiederholt, wenn er zu einem neuen Durchlauf ansetzt, aber sich die Situation kaum geändert hat. Linux 6.7 erweitert KSM nun um einen Smart-Scan-Modus, der nachverfolgt, welche Pages nicht zusammengelegt werden konnten. Diese Pages nimmt er in folgenden Durchläufen weniger häufiger unter die Lupe. Das soll KSM effizienter machen.

In der Grundkonfiguration ist Smart-Scan automatisch aktiviert. Über den sys-Dateisystem unter /sys/kernel/mm/ksm/smart_scan lässt sich prüfen, ob Smart-Scan aktiv ist oder nicht sowie ein- und ausschalten.

Linux 6.7 erlaubt es erstmals, die 32-Bit-Emulation auf x86_64-Systemen zu deaktivieren. Hierzu dient der neue Kernel-Kommandozeilenparameter ia32_emulation. Das Ausschalten der 32-Bit-Emulation geschieht somit zur Bootzeit und kann während des Betriebs ohne Reboot nicht mehr zugeschaltet werden. Im ausgeschalteten Zustand können 64-Bit-Programme für x86_64 ohne Einschränkungen ausgeführt werden, aber 32-Bit-Code für x86 nicht.

Bislang war das Deaktivieren der 32-Bit-Emulation nur mit entsprechender Konfiguration eines Kernels vor dem Kompilieren möglich. Ein Kernel verfügte somit entweder über 32-Bit-Emulation oder nicht. Jetzt lässt sich die Emulation gezielt beim Booten zu- oder abschalten.

Theoretisch soll das die Angriffsfläche eines reinen 64-Bit-Systems reduzieren. Die Kompatibilitätsschnittstellen für 32 Bit sind in der Regel weniger intensiv getestet als die restlichen Schnittstellen. Das mag sich in geringerer Sicherheit niederschlagen. Zudem reduziert sich die Angriffsfläche auf ein System, wenn schlicht weniger Schnittstellen vorhanden sind, die ausgenutzt werden könnten.

Im Übrigen lässt sich über die Option IA32_EMULATION_DEFAULT_DISABLED beim Konfigurieren eines Kernels angeben, ob die 32-Bit-Emulation per Standard deaktiviert oder aktiviert sein soll. Somit lässt sich damit auch steuern, welchen Fall ia32_emulation faktisch bedient – einschalten oder ausschalten.

Vor rund drei Jahren ging es der Intel-Architektur IA64 schon einmal fast an den Kragen. Damals spielte Linus Torvalds bereits mit dem Gedanken, den Support für die IA64-Prozessoren aus dem Kernel zu streichen. Schließlich verursacht der Code immer häufiger Probleme und hat offiziell keinen Maintainer mehr, der sich darum kümmern könnte. Statt des radikalen Rauswurfs ließ Torvalds nochmals "Gnade vor Recht ergehen" und markierte IA64 in Linux 5.11 lediglich als "orphaned", also verwaist. Seither erinnerte bei jedem Build für IA64 eine Warnmeldung daran, dass für IA64 der letzte Akt begonnen hat und der endgültige Abgang näher rückt.

Mit Linux 6.7 ist Itanium (vorerst) Geschichte im Linux-Kernel. Der neue Kernel lässt sich nicht mehr für IA64 bauen. Das stößt bei einigen Kernel-Entwicklern auf Kritik. Keiner wolle sich um den Itanium-Code kümmern, stellt Torvalds dazu nüchtern fest. Er zieht den Vergleich zum alten 80386 (i386). Dessen Unterstützung erschwerte Umbauten im Kernel und wurde schließlich 2012 aus dem Kernel entfernt. Wer diese alten Systeme noch verwendet, könne auf alte Kernel-Versionen zurückgreifen. Technisch relevant sind diese Urahnen heutiger Systeme nicht mehr. Bei IA64 sehe es nicht anders aus, und zudem habe sich die Situation im Itanium-Lager in den vergangenen Jahren nicht verbessert, so Torvalds weiter.

Einen klitzekleinen Schimmer der Hoffnung ließ Torvalds aber auch diesmal offen. Er gibt den IA64-Befürwortern ein Jahr lang Zeit. In dieser Zeit sollen sie den Itanium-Code außerhalb der offiziellen Kernel-Quellen warten und integrieren; also in Form eines externen Patch-Sets. Sollte dies zeigen, dass keine Auswirkungen auf den Rest des Kernels mehr vorliegen, könnte IA64 doch wieder aufgenommen werden. Torvalds zieht hier den Vergleich zum m68k-Port des Kernels. Die Motorola MC68x00-Prozessoren waren ursprünglich unter anderem im klassischen Macintosh, NeXT, Atari ST/STE/TT/Falcon und Amiga verbaut. Obwohl diese Plattformen technisch "tot" und "irrelevant" seien, unterstützt sie der Linux-Kernel noch immer. Grund sei schlicht: Es kümmere sich jemand darum und es verursache keine Schmerzen. Kommt IA64 ebenfalls an diesen Punkt, könnte Itanium im Kernel "wiederauferstehen".

Der Support für Intels Meteor Lake ist jetzt stabil. An den Treibern für die kommenden Generationen Lunar Lake und Arrow Lake wurde weiter gefeilt. Der Nouveau-Treiber erfährt erste Unterstützung für die von Nvidia bereitgestellte GSP-Firmware für den "GPU System Processor" (GSP). Die GSP-Firmware übernimmt das Initialisieren der GPU und das Power-Management. Fortan sollte es einfacher sein, neue GPU-Generationen in Linux zu integrieren. Bislang war das Nutzen der GSP-Firmware auf die proprietären Treiber von Nvidia beschränkt.

Lange Zeit verwaltete die videobuf-Schicht die Framebuffer im Media-Subsystem. videobuf war allerdings in die Jahre gekommen. Die betroffenen Treiber sollten schon seit einigen Jahren in der neuen Schicht videobuf2 beheimatet sein. Konsequenterweise fällt das alte videobuf nun dem Rotstift zum Opfer. Es ist im neuen Kernel nicht mehr enthalten.

Zum zehnjährigen Jubiläum erhält der "Fair Queuing Packet Scheduler" einige Performance-Verbesserungen. Der eher teure Scheduler-Algorithmus soll bei TCP (genauer tcp_rr-Workloads) seinen Durchsatz um fünf Prozent steigern. Bei UDP-Paketen soll die Steigerung sogar bei 13 Prozent liegen.

Die TCP-Authentication-Option (TCP-AO) gemäß RFC 5925 ist in Linux 6.7 integriert. Sie ist ein moderner Ersatz für die alten, in die Jahre gekommenen MD5-basierten Authentisierungsmechanismen.

Auch BPF (Berkeley Packet Filter) legt kontinuierlich zu. So unterstützt BPF jetzt unter anderem Exceptions, CPU-lokale Kernel-Zeiger und das Vererben von Systemeinstellungen für CPU-Security-Mitigations. Zudem führt Linux 6.7 neue virtuelle Netzwerkgeräte ein, deren Transmit-Logik vollständig in BPF programmiert werden kann. Außerdem können nun auch die IBM-Großrechner der Architektur S390x und 32-Bit-ARM-Systeme den aktuellen Satz von BPF-Instruktionen (cpuv4) voll nutzen.

Für die Rust-Integration ist erneut ein Versionswechsel notwendig. Ab jetzt ist Rust 1.73.0 der Compiler der Wahl. Zudem wird erster, für Nutzer sichtbarer Rust-Code in einer der folgenden Kernel-Versionen erwartet. Solcher Code, der offiziell im Kernel zum Einsatz kommt, wäre das nach außen sichtbare Signal für den Erfolg des Rust-Experiments.

Linux 6.7 beschäftigt sich mit Tuning, Nachziehen von Features wie dem wahlweisen Ausschalten der 32-Bit-Emulation auf x86_64 und dem Abbau von Altlasten. bcachefs ist ein lange erwarteter Neuankömmling, der jetzt als experimentelles Feature zum Testen einlädt. Alles in allem ist Linux 6.7 keine große Revolution, sondern ein weiteres Wartungsrelease.

Der Kernel steht auf kernel.org zum Download bereit. Alle Änderungen finden sich detailliert im Kernel-Changelog.

Der neue Kernel folgt auf Linux 6.6, das zum November vergangenen Jahres erschien. Der Kernel brachte unter anderem einen neuen Scheduler, den "Earliest Eligible Virtual Deadline First"-Scheduler (EEVDF).

(dmk)