Aus Linux-Magazin 03/2023

Kernel 6.1: Rust-Support, schnelleres Btrfs, Update für Intel-GPUs

© foottoo / 123RF.com

Kernel-Chef Linus Torvalds und seine Mitstreiter haben den neuen Kernel 6.1 über die Ziellinie gebracht. Rust ist nun eine offiziell unterstützte Kernel-Programmiersprache, aber es gibt noch weitere Neuerungen.

Dass die Entstehung des neuen Linux-Kernels 6.1 etwas holprig verlief, lag nicht nur am Entwicklungsprozess selbst, sondern auch an Linus Torvalds’ persönlicher Hardware: Mitten im Merge Window stürzte sein Laptop häufiger ab [1]. Was sich gewöhnlich auf Kernel-Bugs schieben lässt, entpuppte sich diesmal tatsächlich als Hardwareproblem mit dem ECC-Speicher-DIMM. Da die Entwickler im Merge Window den Code für den nächsten Kernel senden, konnte Torvalds bestimmte Pull Requests nicht bearbeiten, was die Entwicklung um einige Tage verzögerte.

Der Kernel-Chef holte die verlorene Zeit zwar auf, doch dann lieferten einige Entwickler ihren Code zu spät ab [2]. Ungeprüfte Pull Requests in den letzten Tagen eines Merge Window mag der Kernel-Chef nicht so gern und machte seinem Unmut darüber Luft. Für das Merge Window von Linux 6.2 kündigte er an, sich wieder strikter an die Merge-Regeln zu halten [3]. In der Folge drehte der Kernel 6.1 eine Extrarunde mit Release Candidate 8.

Gekommen um zu bleiben

Das eigentliche Highlight für Linux 6.1 hatte sich bereits länger angekündigt: Kernel-Entwickler dürfen ihre Treiber und Kernel-Module nun auch in der Programmiersprache Rust veröffentlichen. Dafür gibt es nicht nur eine erste Infrastruktur und einige Testtreiber, sondern neuerdings auch Support in der Kernel-CI, dem automatischen Testsystem für den Linux-Kernel [4].

Dennoch steckt das Rust-im-Kernel-Projekt noch in den Kinderschuhen und beschnuppern sich die Entwickler noch gegenseitig. Linus Torvalds betonte zum Beispiel mehrfach, dass Code im Linux-Kernel anders funktioniere als bei gewöhnlichen Userspace-Programmen. So erklärte er einem Rust-Entwickler von Google: “Wenn Du Speicher allozieren willst, ohne Dich um den Kontext oder Spinlocks und Ähnliches zu kümmern, solltest Du keine Kernel-Entwicklung machen – weder in C noch in Rust.”

Unsichere Sicherheit

Ein Update für das Linux Security Modules Framework (LSM) blieb dieses Mal umstritten. Security-Subsystem-Maintainer Paul Moore schickte einen Patch an Linus Torvalds, um einen neuen LSM-Hook zu integrieren, der einen User Namespace erzeugen kann – mit Implementierungen für BPF LSM und SELinux. Der Hook eigne sich, um User Namespaces sowohl zu überwachen als auch zu steuern, schrieb Moore. Und nicht nur das: Er sei von guter Qualität, löse ein bereits länger existierendes Problem für Benutzer und Distributionen und gehe konform mit dem LSM-Layer und den Kernel-Praktiken.

Er gab aber auch zu Protokoll [5], dass er den Code trotz Ablehnung des Kexec-Maintainers Eric Biederman veröffentliche. Der hätte ihn trotz Vermittlungsversuchen vehement abgelehnt, weil er sich potenziell auf den Userspace auswirke. Nach längeren und ergebnislosen Diskussionen habe man sich dazu entschlossen, den Code trotz Biedermans Veto zu schicken. Moore erklärte, dass sich der Code tatsächlich auf den Userspace auswirken könne, aber nur auf Basis einer willentlichen Runtime-Konfiguration durch Distributoren, Admins oder Benutzer. Offenbar akzeptierte Torvalds diese Erklärung und übernahm den Code in den Kernel.

Business as usual

Auch die klassische Entwicklung in C ging weiter. Die Ext4- und Btrfs-Programmierer schraubten im Linux-6.1-Zyklus vorwiegend an der Performance ihrer Dateisysteme, im Fall von Btrfs mit teils beachtlichen Ergebnissen. So steigerten dessen Entwickler die Fiemap-Performance deutlich [6]. Diese Btrfs-Methode erlaubt es, im Userspace eine Liste von Datei-Extents anzufordern. Den dazugehörigen Algorithmus passten die Entwickler nun so an, dass er skaliert und die Extents laut eigenen Tests zwei bis drei Größenordnungen schneller zurückliefert (Abbildung 1). Weiterhin gibt es Änderungen beim Inode-Logging und beim Umgang mit gepufferten Daten. Ein neuer Block-Gruppen-Tree beschleunigt das Einhängen großer Dateisysteme, daneben gab es in Btrfs Verbesserungen an der »io_uring«-Integration.

Abbildung 1: Dank Optimierungen an der Fiemap-Methode liefert Btrfs Extents nun deutlich schneller zurück.

Abbildung 1: Dank Optimierungen an der Fiemap-Methode liefert Btrfs Extents nun deutlich schneller zurück.

Auch das EROFS (Enhanced Read-Only File System), an dem der chinesische Hersteller Huawei arbeitet, erhielt in der aktuellen Runde einige Updates. Es geht nun effizienter mit Speicherplatz um [7]. Entwickler Gao Xiang berichtete von der Einführung eines Fscache-basierten Domain Sharings für das Container-Umfeld. Das bedeutet, dass EROFS exakt identische Daten-Blobs neuerdings über Mountpoints hinweg teilen kann und so Platz spart. Dazu müssen die EROFS-Dateisysteme lediglich dieselbe Domain teilen. Daneben sorgt ein speziell gepackter Inode für ein besseres Kompressionsverhältnis. Er erlaubt es, sowohl Dateifragmente als auch ganze Dateien gepackt aufzubewahren und zu deduplizieren.

Der Device Mapper aktiviert laut Mike Snitzer »dm-integrity«-fähige Geräte jetzt auch im Nur-Lesen-Modus. Solche Blockgeräte erlauben es, in einem Journal neben einem Daten-Tag auch eine zusätzliche sektorbasierte Information zur Datenintegrität abzulegen (Integrity Tag).

Wi-Fi 7 im Anmarsch

Wie immer gab es auch im Netzwerkbereich einige Neuerungen [8]. In Sachen Protokolle fällt unter anderem die Arbeit am noch nicht fertigen IEEE-802.11be-Standard ins Auge, der den hohen theoretischen Datendurchsatz von bis zu 30 Gbit/s bereits im Namen trägt (EHT, Extremely High Throughput). Die Spezifikation wird voraussichtlich 2024 unter dem Label Wi-Fi 7 veröffentlicht und folgt damit Wi-Fi 6 alias IEEE 802.11ax nach. Die Linux-Entwickler arbeiten bereits an einer Implementierung des zugehörigen Protokolls.

Auch neue Drahtlos-Chipsätze unterstützt Linux 6.1. Der WLAN-Treiber »brcmfmac« erhält Support für zwei Chipsätze von Infineon (CYW43439, CYW89459) und einen von Broadcom (BCM4378), der unter anderem das WLAN auf der Apple-Plattform antreibt. Ein Mac Mini diente den Entwicklern als Basis für den Test. Andere WLAN-Treiber bauten die Entwickler weiter aus, so etwa den bekannten »ath11k«-Treiber. Der unterstützt neuerdings Cold Boot Calibration und Wake-on-WLAN für den Qualcomm-Chip WCN6750. Daneben stärkt Linux den Support für einige vorhandene Netzwerkkarten von Intel, Nvidia/Mellanox, Huawei, AMD und anderen. Hinzu kommen optimierte Treiber für High-Speed- und Embedded-Switches.

Für BPF bringt der Kernel einen Memory Allocator mit, der in allen Kernel-Kontexten läuft. Auch eine Hilfsfunktion für das Abgleichen von PKCS#7-Signaturen ist jetzt an Bord. Ein neuer Map-Typ sowie einige assoziierte Hilfsfunktionen erleichtern die Kommunikation zwischen Userspace und Kernel über einen Ringpuffer. Programme dürfen neuerdings bestimmte destruktive Funktionen aufrufen, um zum Beispiel über »crash_kexec()« einen Kernel Dump für das Debugging zu provozieren. Über das Rstat-Framework sammelt BPF zudem Statistiken zu angepassten hierarchischen Cgroups.

Verbessertes SELinux

Im Bereich der Sicherheit liefert Herbert Xu ein paar neue Features. Dazu gehören API-Änderungen, die es zum Beispiel erlauben, nicht vertrauenswürdige Quellen von Random Number Generators (RNGs) in »/dev/random« zu füttern. Zudem lassen sich schlafende Hardware-RNGs einfacher aufwecken.

Weitere Patches von Paul Moore betreffen SELinux [9]. Dessen Installationsskript für Policies verwendet neuerdings »grep -E« anstelle von »egrep«. Die booleschen Werte in der SELinux-Policy verwenden jetzt signierte Integer-Typen. Der bisherige Mix aus signierten und unsignierten Integers sei “allgemein keine gute Idee”, meint Moore.

Kaputte CPUs entdecken

Gehen CPUs über die Jahre allmählich kaputt, äußert sich das in Segfaults von Programmen, die auf anderen Rechnern problemfrei laufen. Eine zusätzliche »printk()«-Zeile gibt nun bei einem Segmentation-Fehler die CPU, den Kern und den Socket zurück. Das genügt, um schlechte CPU-Kerne zu identifizieren. Kontrollieren lässt sich diese »printk()«-Option über »/proc/sys/debug/exception-trace«.

Für die x86-Plattform reichte Hans de Goede mehrere Verbesserungen ein [10]. So gibt es Updates für das Platform Management Framework von AMD, das nun das CnQF (Cool and Quiet Framework) unterstützt. Daneben landete Code für den Surface Laptop Go 2 und den Surface-Pro-8-HID-Sensor von Microsoft im Kernel. Toshibas ACPI-Laptop-Treiber unterstützt neuerdings einen Eco-Modus.

Die Neuerungen im ARM-Devicetree betreffen vor allem Geräte von Qualcomm und Freescale, was laut Arnd Bergmann auch deren Dominanz im Mobil- und Embedded-Sektor widerspiegele. Die acht neu unterstützten SoCs gehören aber alle zu bereits vorhandenen SoC-Familien. Mobiltelefone zählen auch dazu, konkret das Sony Xperia 1 IV und drei Snapdragon-410-basierte Samsung-Geräte: das Galaxy E5, E7 und Grand Max. Eine Übersicht der unterstützten SoCs, Mobilgeräte und Laptops findet sich online [11].

RISC-V-Maintainer Palmer Dabbelt berichtet von Verbesserungen am CPU-Topologie-Subsystem, die für bessere Topologieinformationen sorgen. Außerdem haben die Entwickler in der »defconfig« die Unterstützung für CD-ROM-Dateisysteme aktiviert.

Innenleben

Laut Andrew Morton [12] macht sich KMSAN im Speicherbereich bereits bezahlt. Dmitry Vyukov hat den Kernel Memory Sanitizer, der auf ein Clang-generiertes Instrumentarium zurückgreift, neu eingeführt. Er deckte im aktuellen Entwicklungszyklus bereits mehrere ältere und neue Bugs auf.

Die Entwickler um Christian Brauner haben Patches an verschiedene Dateisystem-Subsysteme (F2FS, XFS, Overlay-FS und weitere) geschickt [13], die bislang ID-mapped Mounts direkt aufrufen. Sie sollen dafür in Zukunft nach Möglichkeit die »vfsuid«-basierten Hilfsprogramme verwenden.

Eine stark verbesserte Performance bei Anwendungen verspricht ein Patch für »io_uring«. Das beschleunigt die Abläufe bei Programm-Handlern, die viele Systemaufrufe verwenden, indem es solche Aufrufe bündelt und in einem Rutsch ausführt [14].

Größere Änderungen kündigen sich auch für das EFI-Subsystem an. Das bootet laut Ard Biesheuvel nun auch die im letzten Zyklus neu eingeführte LoongArch-Architektur. Die Umbauten zogen im aktuellen Zyklus einige Cleanups und Refactoring nach sich. Hinzu kommen Vorbereitungen für die geplanten Umbauarbeit, die EFI mit Confidential Computing verheiraten soll.

Die Macher von Perf verwenden neuerdings BPF CO-RE (Compile Once, Run Everywhere), wenn ihr Bperf-Tool mit Cgroups zum Einsatz kommt. Außerdem führen sie Support für die HiSilicon PCIe Performance Monitoring Unit (PMU) ein, die Aspekte wie Bandbreite, Latenz oder die Bus- und Puffernutzung überwacht.

Paralleles Abarbeiten

Bei den Eingabegeräten liefert der Kernel nun Treiber für HID++-Geräte von Logitech mit und unterstützt weitere Geräte besser. Dazu gehören unter anderem Nachbauten von Nintendo-Controllern.

Bei den Grafikkartentreibern landen weitere Änderungen für “Arc Alchemist” (Intels geplante Desktop-GPUs) im »i915«-Treiber. Neuen Code ergänzten die Entwickler auch für “Meteorlake”, Intels 14. CPU-Generation. Nicht zuletzt kam ein wenig Display-Code-Refactoring hinzu. Für AMD landete Code für Gang Submission im Kernel. Dieser erlaubt es, verschiedene Workloads zur selben Zeit auf verschiedenen Engines laufen zu lassen.

Wer den neuen Kernel 6.1 testen möchte, findet den Quellcode wie immer auf Kernel.org oder auf Github [15]. (uba)

Infos

  1. Torvalds’ Hardwareprobleme: https://lkml.iu.edu/hypermail/linux/kernel/2210.1/00691.html
  2. RC1-Release-Meldung: https://lkml.org/lkml/2022/10/16/359
  3. Kernel-Release-Mitteilung: https://lkml.org/lkml/2022/12/11/206
  4. Rust in der Kernel-CI: https://www.collabora.com/news-and-blog/news-and-events/kernelci-now-testing-linux-rust-code.html
  5. LSM-Updates: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=26b84401da8458c5cbd6818d5732f7bbb84124a2
  6. Schnelleres Btrfs: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76e45035348c247a70ed50eb29a9906657e4444f
  7. EROFS: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3497640a80d77cd098d45c9f3ab235b1aa472dbc
  8. Netzwerkaktualisierungen: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0326074ff4652329f2a1a9c8685104576bd8d131
  9. SELinux-Patches: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e816da29bc0cf0504afddd314a2d71b694b5d7af
  10. x86-Plattform: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7fb68b6c821be7165d5be5d8801d909912af9159
  11. ARM-Ergänzungen: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7171a8da00035e7913c3013ca5fb5beb5b8b22f0
  12. CPU und KMSAM: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=27bc50fc90647bbf7b734c3fc306a5e61350da53
  13. ID-mapped Mounts: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8bea8ff34a8a5a46c9550aad6f6381b9fce0f958
  14. »io_uring«: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0a78a376ef3c2f3d397df48909f00cd75f92137a
  15. Linux 6.1 auf Github: https://github.com/torvalds/linux
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 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