Nach zwei Monaten Entwicklung hat Linus Torvalds die Version 6.15 des Linux-Kernels veröffentlicht. Zu den auffälligsten Änderungen gehören: das Audit-System in Landlock, der Modus zum Fixieren der Speichermapping, das fwctl-Subsystem, der Nova-Treiber für NVIDIA-GPUs, die Implementierung eines Host-Systems für den Hypervisor Hyper-V, die Unterstützung für zonierte Speichergeräte in XFS, Optimierungen im Netzwerk-Subsystem, Scrub-Checks in Bcachefs sowie die Möglichkeit zur Kontrolle von Operationen über io_uring.
In die neue Version wurden 15.945 Änderungen von 2.154 Entwicklern aufgenommen, die Patch-Größe beträgt 59 MB (Änderungen betreffen 13.596 Dateien, hinzugefügt wurden 739.608 Codezeilen und 312.168 Zeilen entfernt). In der vorherigen Version gab es 12.115 Änderungen von 1.984 Entwicklern, die Patch-Größe betrug 39 MB. Rund 41 % aller in 6.15 präsentierten Änderungen stehen im Zusammenhang mit Gerätetreibern, etwa 16 % der Änderungen betreffen das Update von hardware-spezifischem Code, 13 % sind bezüglich des Netzwerk-Stacks, 5 % betreffen Dateisysteme und 4 % interne Kernel-Subsysteme.
Die wichtigsten Neuerungen im Kernel 6.15:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im fanotify-Mechanismus wurde die Möglichkeit zum Verfolgen von Einhänge- und Aushänge-Ereignissen hinzugefügt.
- In XFS wurde die Unterstützung für zonierte Speichereinheiten hinzugefügt (Unterteilung in Zonen von Blockgruppen oder Sektoren, in denen nur sequentielles Hinzufügen von Daten mit vollständiger Aktualisierung aller Blockgruppen zulässig ist). Es wurde das Flag rwf_dontcache hinzugefügt, um das Caching beim Schreiben zu deaktivieren. Es besteht die Möglichkeit, mehrere Datenblöcke atomar zu schreiben.
- In Btrfs wurde die Möglichkeit implementiert, beim Einhängen negative Komprimierungsstufen für zstd anzugeben (-15 bis -1, z. B. „compress=zstd:-5“), die eine höhere Geschwindigkeit auf Kosten einer geringeren Kompressionseffizienz bieten. Die Caching-Performance für Dateipfade wurde verbessert (in einem durchgeführten Test wurde die Ausführung der Operation „send“ um 30 % beschleunigt). Die Unterstützung für Blöcke mit einer Größe von 2 KB wurde hinzugefügt.
- Bei EXT4 wurde die Leistung beim Journal-Playback mit einer sehr hohen Anzahl zurückgezogener Einträge (lasten, die typischerweise bei Lustre-Dateisystemen vorkommen) verbessert. Eine lineare Suche nach "dentry"-Einträgen (interne Darstellung von Verzeichniselementen) wurde implementiert, um Zugriffsprobleme auf bestimmte Dateien im case-insensitiven Modus zu beheben. Die Funktionalität der Einhängeoption "errors=remount-ro" wurde optimiert. Die Robustheit bei der Verarbeitung beschädigter Dateisysteme wurde erhöht.
- Im F2FS wurde ein ioctl zur Abrufung von Informationen über die Eingabe-/Ausgabe-Priorität für eine bestimmte Datei implementiert. Zudem wurde der Übergang zur Verwendung von Seitenfoliant-Speicher (page folios) vorangetrieben.
- In Bcachefs wurde ein "scrub"-Modus hinzugefügt, der die Integrität aller Daten und Metadaten aus dem Dateisystem prüft. Bei festgestellten Fehlern wird ein Wiederherstellungsverfahren gestartet. Bcachefs unterstützt nun auch Dateisysteme, bei denen die Blockgröße größer ist als die Seitengröße. Das Format der Bcachefs-Datenstrukturen wurde stabilisiert (weitere Formatänderungen werden in Form von optionalen Erweiterungen umgesetzt).
- In EROFS wurde die Unterstützung für 48-Bit Blockadressierung hinzugefügt.
- Im FUSE-System wurden die sysctl-Parameter default_request_timeout und max_request_timeout eingeführt, um Zeitlimits für die Ausführung von Anfragen festzulegen. Dies ermöglicht es, Hängeschleifen bei FUSE-Komponenten im Benutzermodus zu verfolgen. Die maximale Länge von Dateinamen in FUSE wurde auf 1024 Zeichen erhöht.
- Der Systemaufruf statmount() wurde um die Möglichkeit erweitert, Informationen über das Mapping der Benutzer-IDs von gemounteten Dateisystemen abzurufen. Dies wird verwendet, um die Dateien eines bestimmten Benutzers auf einem gemounteten fremden Volume einem anderen Benutzer im aktuellen System zuzuordnen.
- Es wurde die Möglichkeit geschaffen, einen Mountpunkt mit einem anderen Mapping der Benutzer-IDs als beim ursprünglichen gemounteten Volume zu erstellen.
- Im API für das Mount-Management wurden Änderungen vorgenommen, die den Aufbau komplexer Hierarchien von Dateisystemen erleichtern, ohne dabei Teile der Dateisysteme offenzulegen, die verborgen bleiben müssen.
- In das Subsystem für die Arbeit mit Blockgeräten wurde die Unterstützung für hardwarebasierte Schlüsselmanagement-Geräte integriert.
- Im SMB-Dateisystem wurde die Option is_network_name_deleted implementiert, und der Modus smb_server_kerberos5 ist standardmäßig aktiviert.
- Für das OverlayFS wurde die Montageoption «override_creds» hinzugefügt. Bei Angabe dieser Option werden die Anmeldedaten des aufrufenden Benutzers anstelle der des montierenden Benutzers verwendet, um auf die unteren Ebenen des Speichers zuzugreifen. Diese Änderung ermöglicht es beispielsweise, OverlayFS mit einem Benutzer zu montieren, der über die Berechtigung CAP_SYS_ADMIN verfügt, aber die Datei mit Anmeldedaten ohne diese Berechtigung zu verwenden.
- In exFAT wurden die Datei-Löschvorgänge beschleunigt. Statt die «discard»-Anfragen einzeln für jeden freigegebenen Cluster der zu löschenden Datei zu senden, gruppiert der Treiber jetzt die Anfragen. Ein durchgeführter Test zeigte, dass die Löschzeit einer Datei mit 80 GB von 286 Sekunden auf 1,6 Sekunden gesenkt wurde.
- Alle Pseudo-Dateisysteme sowie das EXT2-Dateisystem wurden auf die Verwendung der neuen API für die Montage von Partitionen umgestellt.
- Der Code zur Unterstützung der Dateisysteme SYSV (SystemV/386, Xenix und Coherent) wurde entfernt, da er seit 2023 als veraltet (orphaned) gekennzeichnet ist.
- Speicher und Systemdienste
- Die erforderliche minimale Version von GCC für den Kernel-Bau wurde auf 8.1 angehoben, während Clang auf 15.0.0 erhöht wurde.
- Das Subsystem fwctl (Firmware Control) wurde hinzugefügt, das eine API für die sichere Verwaltung von Firmware und die Ausführung von Handlern im Benutzermodus bietet. Auf Basis von fwctl wurden Treiber für CXL-Geräte (Compute Express Link), Ethernet-Adapter von Mellanox ConnectX (mlx5) und Servicekarten von AMD/Pensando vorbereitet.
- Die Funktionalitäten des pidfd-Mechanismus wurden erweitert, um IDs zu verwenden, die mit bestimmten Prozessen verbunden sind und im Gegensatz zu pid nicht wieder zugewiesen werden. Es wurde die Möglichkeit geschaffen, Informationen über den Abschlussstatus eines Prozesses zu extrahieren, der über pidfd identifiziert wird, nachdem der übergeordnete Prozess die Bestätigung über den Abschluss des untergeordneten Prozesses (reaped) erhalten hat und dessen Ressourcen freigegeben wurden. Ein PIDFD_SELF-Flag wurde zu den Systemaufrufen hinzugefügt, mit dem der Prozess auf sich selbst verweisen kann.
- Für die RISC-V-Architektur wurde die Unterstützung für die Erweiterungen BFloat16, Zaamo (atomare Speicheroperationen), Zalrsc (Load-Reserved/Store-conditional) und ZBKB (Bitoperationen für die Kryptografie) implementiert.
- Bei der Nachverfolgung wurde die Möglichkeit geschaffen, die Argumente der aufgerufenen Funktionen zu speichern und deren Darstellung in den Nachverfolgungsprotokollen sicherzustellen.
- Im asynchronen Ein- und Ausgabesystem io_uring wurde die Unterstützung für das Lesen von Informationen über epoll-Ereignisse hinzugefügt. Der Einsatz von io_uring zur Verarbeitung von epoll-Ereignissen reduziert die Anzahl der Kontextwechsel und ermöglicht die gleichzeitige Verarbeitung mehrerer epoll-Ereignisse.
- Im eBPF-Subsystem wurde die Verifizierung von Programmen mit Schleifen verbessert. Neue Anweisungen wie „timed_may_goto“, „load-acquire“ und „store-release“ wurden hinzugefügt. Zudem wurde die Möglichkeit geschaffen, erweiterte Dateiattribute aus BPF-Programmen zu ändern. Eine neue Funktion try_alloc_pages() wurde implementiert, die für die Zuordnung von Speicher bei einer hohen Wahrscheinlichkeit eines Fehlschlags ausgelegt ist (beim Ausführen von BPF-Programmen in eingeschränkten Kontexten).
Ein neuer Sperrprimitive — rqspinlock (Resilient Queued Spin Lock) — wurde implementiert, der während der Ausführung Situationen erkennt, die zu gegenseitigen Blockierungen führen können. Dieser neue Primitive ermöglicht das Laden von BPF-Programmen, bei denen der Verifier die Korrektheit der Arbeit mit Sperren nicht garantieren konnte.
- Die Zuverlässigkeit der Zuordnung großer Seiten im Speicher (huge-page) wurde erheblich verbessert.
- Die Berechnung der CRC64-Prüfziffern auf x86-Systemen wurde erheblich beschleunigt. Unter anderem kamen neue Vektorinstruktionen aus dem AVX-512-Befehlssatz zum Einsatz. In einigen Fällen stieg die Leistung um das 100-Fache.
- Die Übertragung von Änderungen aus dem Rust-for-Linux-Branch, die die Verwendung von Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen betreffen, wurde fortgesetzt (die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels zählt). Es wurde die Möglichkeit geschaffen, im Kernel-Code das Makro „#[kunit_tests()]“ für das Ausführen von Unit-Tests zu verwenden. Unterstützung für die ARMv7-Architektur wurde hinzugefügt. Es wurden Module für DMA und hrtimer mit Rust-Bindings für DMA (von Linus gegen die Anordnung des Maintainers hinzugefügt, der daraufhin von seinem Posten zurücktrat) und hochgenaue Timer implementiert. Die Module ‘list’, ‘str’, ‘sync’, ‘error’ und ‘alloc’ wurden erweitert. Unterstützung für die neue Syntax ‘&raw’ (raw_ref_op) wurde hinzugefügt.
- Im Perf-Subsystem wurde die Möglichkeit zur Profilerstellung von Verzögerungen unter Verwendung von Informationen des Task-Schedulers implementiert.
- Der Parameter der Kernel-Befehlszeile "traceoff_after_boot" wurde hinzugefügt, der die Traceing nach dem Booten des Kernels und dem Starten des Init-Prozesses deaktiviert. Dieser Parameter kann bei der Diagnose von Boot-Problemen verwendet werden und stellt sicher, dass die während des Bootvorgangs gesammelten Trace-Daten nicht überschrieben werden.
- Die Unterstützung für 32-Bit x86-Systeme mit mehr als 8 CPU und 4 GB RAM wurde eingestellt. Solche Hardware wird seit langem nicht mehr hergestellt, und Systeme, die solche Ressourcen erfordern, wurden auf 64-Bit-CPUs umgestellt.
- Änderungen wurden an der Implementierung der POSIX-Timer vorgenommen, die es dem CRIU-Tool (Checkpoint/Restore in Userspace) ermöglichen, Timer-IDs zu speichern und wiederherzustellen.
- Virtualisierung und Sicherheit
- Die Möglichkeit, Linux als Wurzelumgebung (Dom0, Root-Partition) für den Hypervisor Hyper-V (Microsoft Hypervisor) zu verwenden, wurde hinzugefügt. Die Host-Umgebung verwaltet den Hypervisor, organisiert das Starten von Gastsystemen, vergibt Ressourcen und gewährleistet die Interaktion virtuellen Maschinen mit der Hardware. Die Verwaltung des Hypervisors Hyper-V in Linux erfolgt über das Gerät /dev/mshv.
- Im Landlock-Modul, das unprivilegierten Programmen Mittel zur Einschränkung der Nutzung von Linux-Kernelobjekten (Dateihierarchien, Netzwerk-Sockets, ioctl usw.) bereitstellt, wurde ein Auditmechanismus hinzugefügt. Dieser ermöglicht eine detaillierte Analyse der Gründe für Zugriffsbeschränkungen, die bei der Nutzung von Landlock erfolgen, sowie Verständnis darüber, wann und welche Operation blockiert wurde, warum die Blockierung erfolgt ist und welche Regel ausgelöst wurde.
- Es wurde die Möglichkeit hinzugefügt, in LSM-Modulen (Linux Security Modules) Handler zu implementieren, die den Zugriff auf das asynchrone I/O-System io_uring überwachen und die Verwendung von io_uring zur Umgehung der Zugriffsbeschränkungen auf Systemaufrufe blockieren. Ein solcher Handler wurde im LSM-Modul SELinux implementiert.
- In SELinux wurde die Möglichkeit eingeführt, Richtlinien auf alle von dem Kernel geladenen Datentypen anzuwenden, einschließlich Firmware-Abbilder, Sicherheitsrichtlinien und Zertifikate.
- Ein Modus zur Fixierung (seal) bestimmter Speicherzuordnungsoperationen, die vom Kernel im Adressraum des Prozesses durchgeführt werden, wurde hinzugefügt. Die Fixierung versetzt die Zuordnung in einen Nur-Lese-Modus und verhindert Änderungen im Falle einer Sicherheitsanfälligkeit. Die Maßnahme betrifft die Zuordnung von vDSO, vsyscall, vvar, sigpage und uprobes. Der Standardmodus ist deaktiviert, da er die Funktionsweise einiger Anwendungen beeinträchtigen kann. Eine Konfigurationsoption CONFIG_MSEAL_SYSTEM_MAPPINGS wurde hinzugefügt, um ihn zu aktivieren.
- Netzwerksubsystem
- Die Arbeit zur Beseitigung der globalen Sperre im Netzwerk-Stack RTNL (rtnl_lock) wurde fortgesetzt und in Sperren umgewandelt, die einzelnen Netzwerknamensräumen zugeordnet sind.
- Eine anfängliche Möglichkeit zur Erfassung von Netzwerkpaketen über io_uring wurde hinzugefügt, wobei der Inhalt direkt in den Benutzerspeicher ohne Zwischenpufferung (Zero-Copy) kopiert wird. In durchgeführten Tests konnte diese Änderung den Umgang mit dem Datenverkehr über einen 200-Gigabit-Kanal mit einem einzelnen CPU-Kern bewältigen.
- Die sysctl tcp_rto_max_ms und die TCP-Socket-Option TCP_RTO_MAX_MS wurden implementiert. Damit kann die maximale Zeit zwischen den Versuchen zur erneuten Übertragung von Paketen festgelegt werden.
- Im BPF wurde eine Reihe von Callback-Funktionen hinzugefügt, um Informationen über die Zeit aus verschiedenen Bereichen des Netzwerk-Stacks abzurufen. Dies kann zur Diagnose von Netzwerkverzögerungsproblemen verwendet werden.
- Leistungsoptimierungen für Netzwerkoperationen hinzugefügt:
- Die Optimierung GRO (Generic Receive Offload), die mehrere kleine Pakete in ein großes zusammenfasst, wird nun beim Wechsel der Paketverarbeitung auf eine andere CPU (zur Lastenverteilung) in der XDP-Subsystem (eXpress Data Path) eingesetzt, das es ermöglicht, Pakete auf der Ebene des Netzwerktreibers zu verarbeiten, bevor sie an den Netzwerk-Stack übergeben werden. Der Leistungszuwachs bei der Verarbeitung von TCP-Strömen durch die Anwendung der Optimierung kann bis zu dem Doppelten betragen.
- Unter hoher Last wurde die Leistung der Funktion connect() um das Zweifache gesteigert, indem die spin-locks durch den Synchronisationsmechanismus RCU (Read-Copy-Update) ersetzt wurden, um Einträge mit Informationen über die Endpunkte der Verbindung zu suchen (Quellen und Ziele und Ports). IP-Adressen Zusätzlich wurde die Hashing-Optimierung durchgeführt, die einen weiteren Leistungszuwachs von 229 % gewährte.
- Die beschleunigte Implementierung von MPTCP (Multipath TCP), einer Erweiterung des TCP-Protokolls, ermöglicht die gleichzeitige Paketlieferung über mehrere Routen durch verschiedene Netzwerkschnittstellen mit unterschiedlichen IP-Adressen. MPTCP im Einzelsitzungsmodus wurde um 29 % beschleunigt.
- Im netfilter wurde die Ausführung von Routenfindungsoperationen in der FIB (Forwarding Information Base) bei vorhandenen Sockets beendet. Durch diese Optimierung wurde die Leistung um 20 % gesteigert.
- Die UDP-Leistung bei Flood-Szenarien wurde um 10% verbessert, indem unnötige Operationen mit der Struktur sk_tsflags beim Empfangen von Paketen ausgeschlossen wurden.
- Ein Treiber mit der Implementierung des Protokolls MCTP-over-USB wurde hinzugefügt.
- Ausrüstung
- Das Kernel hat eine erste Implementierung des Nova-Treibers für NVIDIA GPUs übernommen, die mit GSP-Firmware ausgestattet sind und seit der NVIDIA GeForce RTX 2000-Serie auf der Turing-Architektur verwendet werden. Der Treiber ist in Rust geschrieben. In der ersten Phase wurde nur das Gerüst von nova-core hinzugefügt, das etwa 400 Zeilen Code umfasst und ein grundlegendes Abstraktionsniveau über die Software-Schnittstellen der GSP-Firmware bereitstellt. In der nächsten Phase wird geplant, den DRM-Treiber nova-drm (Direct Rendering Manager) in den Kernel aufzunehmen, um mit GPUs aus dem Benutzermodus zu interagieren, sowie einen VFIO-Treiber mit einem vGPU-Manager, der die Verwendung virtueller NVIDIA GPUs in Virtualisierungssystemen ermöglicht.
- Die Arbeit am drm-Treiber (Direct Rendering Manager) für die auf der Intel Xe Architektur basierenden GPUs, die in den Intel Arc Grafikkarten und in der integrierten Grafik ab den Tiger Lake Prozessoren eingesetzt werden, wurde fortgesetzt. Die Unterstützung für SVM (Shared Virtual Memory), ein Bestandteil des DRM-Frameworks, das den gemeinsam genutzten Speicher zwischen CPU und GPU verwaltet, wurde hinzugefügt.
- Im i915 Treiber wurden Identifikatoren für neue GPUs hinzugefügt.
- Im Nouveau Treiber wurde das GSP RPC überarbeitet und die Schnittstelle drm_slave_encoder integriert.
- Im AMDGPU Treiber wurde die Unterstützung der DCN36 Architektur (Display Core Next) implementiert. Außerdem wurde die Möglichkeit hinzugefügt, eigene Helligkeitskurven zur Helligkeitskorrektur des Displays zu definieren.
- Im Adreno Treiber wurde die Unterstützung für die Qualcomm Adreno 623 GPU hinzugefügt.
- Die Unterstützung für die Apple Touch Bar Touchscreens wurde hinzugefügt.
- Unterstützung für die zweite Version der eUSB2-Erweiterung (eUSB2V2 – Embedded USB2 Version 2.0) hinzugefügt, die die Betriebsspannung (auf bis zu 1,2 Volt) senkt und die Leistung von USB 2.0 erhöht. Die Datenübertragungsrate in eUSB2V2 kann 4,8 Gbit/s erreichen, was zehnmal schneller ist als die üblichen 480 Mbit/s, die für USB 2.0 typisch sind. eUSB2V2 ermöglicht es Herstellern von Laptops, ihre Geräte mit hochauflösenden Webcams auszustatten, während sie weiterhin den Embedded USB2-Bus für deren Anschluss nutzen.
- Unterstützung für Intel Killer E5000 Ethernet-Adapter (RTL8126) hinzugefügt.
- Unterstützung für die Bildschirm-Panel-Modelle Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie und starry-2082109qfh040022-50e hinzugefügt.
- Treiber für Laptops der Samsung Galaxy Book-Serie hinzugefügt.
- Unterstützung für die Audio-Systeme Presonus Studio 1824c, Jabra Evolve 65 hinzugefügt. Unterstützung für DSP-Module AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL und GAIN hinzugefügt. Verbesserte Audio-Unterstützung für Laptops von ASUS, HP und Lenovo.
- Unterstützung für ARM-Plattformen, SoCs und Geräte hinzugefügt: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 Toradex-Boards basierend auf i.MX6.
Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 6.15 – Linux-libre 6.15-gnu – veröffentlicht, die von Firmware-Elementen und Treibern befreit ist, die nicht-freie Komponenten oder Codeteile enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der Version 6.15 wurde das Laden von Blobs in den Treibern nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G Ethernet, Realtek 8814A Wifi, Apple Silicon SoC Touchscreen, Renesas UFS und aw88166 Audio neutralisiert. Die Bereinigung des Treibers Spider 1Gb Ethernet, der aus dem Kernel entfernt wurde, wurde eingestellt. Verweise auf tiVoisierte Binärdateien wurden entfernt. Die Blockierung des Ladens von Blobs aus Rust-Code wurde implementiert.
Quelle: opennet.ru
