Nach zwei Monaten Entwicklung hat Linus Torvalds die Version 7.1 des Linux-Kernels veröffentlicht. Zu den auffälligsten Änderungen gehören: ein neuer ntfsplus-Treiber, der erste Schritt zur Einstellung der Unterstützung für CPU i486, die Entfernung alter Ethernet-Adapter, die Abschaffung von ISDN- und AX.25-Protokollen, die Standardaktivierung des Intel FRED-Mechanismus, Unterstützung für BPF-Handler in io_uring, Optimierungen im Swap-Subsystem, die Unterstützung von Sub-Schedulern in sched_ext, Zero-Copy-I/O im ublk-Treiber, die ioctl-Operation „shutdown“ in Btrfs, dynamisches Wechseln des Leistungsmodus im amd-pstate-Treiber und die Unterstützung von xattr für Unix-Sockets.
In die neue Version wurden 17.275 Korrekturen von 2.589 Entwicklern integriert.
Die Größe des Patches beträgt 57 MB (Änderungen betreffen 13.528 Dateien, 751.785 Codezeilen wurden hinzugefügt, 405.916 Zeilen wurden entfernt). In der vorherigen Version gab es 15.624 Korrekturen von 2.477 Entwicklern, die Patch-Größe betrug 56 MB. Etwa 41 % aller in 7.1 eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 12 % auf das Update hardware-spezifischer Codes, 14 % betreffen den Netzwerk-Stack, 5 % die Dateisysteme und 3 % die internen Subsysteme des Kernels.
Die wichtigsten Neuerungen im Kernel 7.1 (1, 2, 3):
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Kern wurde eine neue Implementierung des NTFS-Dateisystems – ntfsplus – eingeführt, die auf dem Code des alten NTFS-Kernel-Treibers basiert. Der alte Treiber wurde neu gestaltet, mit der Fähigkeit zur Datenschreibung erweitert und an moderne Möglichkeiten angepasst, wie die Verwendung von Page-Folianten (folios) anstelle der buffer_head-Struktur. Im neuen Treiber wurde eine verzögerte Blockzuweisung implementiert, die hohe Schreibgeschwindigkeiten und reduzierte Fragmentierung ermöglicht. Für gepufferte Lese-/Schreiboperationen, direkten I/O, Extent-Mapping und Seiten-Lese-/Schreiboperationen kommt die iomap-Bibliothek zum Einsatz. In iozone-Tests zeigte sich der ntfsplus-Treiber als 3-5% schneller als ntfs3 bei Einzelthread-Schreibvorgängen und 35-110% schneller bei der Nutzung von 4 Threads. Die Leseleistung von ntfsplus und ntfs3 liegt ungefähr auf dem gleichen Niveau. Der ntfs3-Treiber bleibt Teil des Kernels und hat Korrekturen sowie kleinere Verbesserungen erhalten.
- Die Unterstützung für die Generierung und Verifizierung von Integritätsprüfdaten T10 auf Dateisystemebene anstelle von Blockgeräten wurde hinzugefügt, was die Leistung von Lesevorgängen verbessert.
- Im Blockgerätetreiber ublk wurde die Unterstützung für die Ein-/Ausgabe über gemeinsamen Speicher ohne Datenkopieren zwischen den Puffern (Zero-Copy-Modus) hinzugefügt, um spezifische Logik auf die Benutzerebene zu verlagern.
- Für selbstverschlüsselnde Blockgeräte SED-OPAL wurden ioctl-Befehle zum Steuern des Single-User-Modus hinzugefügt und der Befehl STACK_RESET implementiert.
- In Btrfs wurde die Unterstützung für die ioctl-Operation 'shutdown' als stabil markiert, die das Dateisystem in einen Zustand versetzt, in dem versucht wird, laufende Operationen abzuschließen, während alle neuen Operationen blockiert werden.
- In exFAT wurde die Möglichkeit implementiert, leere Bereiche über den Aufruf von fallocate() zu reservieren.
- In der CIFS-Dateisystem wurde die Unterstützung für die Erstellung von temporären Dateien mit dem Flag O_TMPFILE hinzugefügt.
- Der Systemaufruf fsmount() wurde um die Option FSMOUNT_NAMESPACE erweitert, die einen neuen Namensraum für die Montagepunkte des Dateisystems erstellt. Die Systemaufrufe clone3() und unshare() wurden mit Flags ausgestattet, um einen neuen Namensraum für die Montagepunkte zurückzugeben, der nur ein montiertes leeres FS-Stub auf Basis von nullfs sowie den fs-dax-Treiber mit einem FS-Interface zu DAX-Geräten (Direct Access) enthält.
- Der NFS-Server hat einen Schutz gegen Angriffe zur Auffindung von Dateideskriptoren erhalten, der durch die kryptografische Signatur der Deskriptoren implementiert wurde. Der Schutz wird über die Mount-Option sign_fh aktiviert.
- Ein symbolischer Treiber fs-dax wurde hinzugefügt, der eine Schnittstelle für die Interaktion mit DAX-Geräten (Direct Access) bietet, die den Zugriff ohne Seitencache unterstützen. Diese Schnittstelle ist notwendig für die Integration in den Dateisystemkern famfs, der im Arbeitsspeicher gehostet wird.
- Im Ceph-Dateisystem wurde die Erfassung von Ein-/Ausgabeterminen in Verbindung mit den Teilbereichen implementiert.
- Speicher und Systemdienste
- Die erste Reihe von Änderungen zur Einstellung der Unterstützung für i486-Prozessoren wurde übernommen. Die Optionen zur Kernel-Kompilation mit Unterstützung für die Prozessoren 486DX, 486SX und AMD ELAN (CONFIG_M486, CONFIG_M486SX und CONFIG_MELAN) wurden aus Kconfig entfernt, und die Kompilierungsoptionen für i486-Systeme (-march=i486) wurden aus dem Makefile ausgeschlossen. Der Code zur tatsächlichen Unterstützung des Betriebs auf i486-Prozessoren bleibt im Kernel erhalten, jedoch erfordert die Kompilierung für solche Systeme nun das Anwenden von Patches auf die Build-Dateien. Der Grund für die Entfernung der Unterstützung für i486-Prozessoren ist der Wunsch, den Kernel von komplexem Code zu befreien, der einige Hardwareoperationen emuliert, wie z.B. CX8 (Vergleiche und tausche 8 Byte) und TSC (CPU-Zähler, der im Task-Scheduler verwendet wird).
- Im amd-pstate-Treiber, der zur Steuerung des Energieverbrauchs auf Systemen mit AMD-Prozessoren verwendet wird, wurde das dynamische Umschalten der Leistungsparameter und die Anpassung des Energieverwaltungsverhaltens in Abhängigkeit von der Nutzung des Netzstroms oder des Akkus implementiert. Bei stationärer Verbindung wird jetzt der Modus „performance“ aktiviert, während im Akkubetrieb der Modus „balance_performance“ aktiv wird.
- Standardmäßig ist der Intel FRED-Mechanismus (Flexible Return and Event Delivery) aktiviert, der die Effizienz und Zuverlässigkeit der Übermittlung von Informationen über niederwärtige Ereignisse erhöht. Die Leistungssteigerung und Reduktion der Latenzzeiten wird durch die Rückgabe von Ereignissen über den Prozessorbefehl IRET anstelle der Übertragung von Ereignissen über die IDT (Interrupt Descriptor Table) erreicht. Die Zuverlässigkeit wird durch die separate Verarbeitung des Eingangsereignisses im Kontext des Kernels und im Kontext des Benutzers erhöht, sowie durch den Schutz vor verschachtelter NMI-Ausführung und die Speicherung aller mit der Ausnahme verbundenen CPU-Register im erweiterten Stack-Frame.
- Die perf-Subsystem beinhaltet jetzt die Unterstützung für Leistungsmessungsblöcke (PMU – Performance Monitoring Unit), die in SoC NVIDIA Tegra410 verwendet werden.
- Die Ausführung von Futex-Operationen auf ARM-Systemen wurde beschleunigt, dank der Nutzung von Arm 9.6 LSUI-Befehlen, die es dem Kernel ermöglichen, auf den Speicher des Benutzerbereichs zuzugreifen, ohne zuvor den PAN-Schutzmodus (Privileged Access Never) zu deaktivieren.
- Auf ARM-Prozessoren wurde die Unterstützung der MPAM-Architektur (Memory System Resource Partitioning and Monitoring) verbessert und die Möglichkeit hinzugefügt, sie im Benutzerspace über den resctrl-Mechanismus zur Ressourcenverwaltung zu nutzen. MPAM markiert jede Speicheranfrage mit einer Partitions-ID (PARTID) und einer Monitoring-Gruppen-ID (PMG). In Verbindung mit der PARTID kann der Ressourcenverbrauch, wie etwa die Speicherbandbreite oder die Cache-Größe, begrenzt werden, um sicherzustellen, dass eine Gruppe von Aufgaben nicht alle Ressourcen beansprucht. Im Kontext des Monitorings kann die Kombination aus PMG und PARTID verwendet werden, um den Speicherverbrauch unter bestimmten Lastarten zu verfolgen.
- Die Möglichkeit zur Nutzung des Echtzeitzustands (PREEMPT_RT) wurde auf 32-Bit-ARM-Prozessoren eingeführt. Zuvor wurde die Unterstützung von PREEMPT_RT für die Architekturen x86 und x86-64, ARM64, RISC-V und LoongArch bereitgestellt.
- Im Systemaufruf clone3() wurden neue Flags hinzugefügt: CLONE_NNP – Verbot der Erlangung neuer Privilegien im erstellten Prozess; CLONE_AUTOREAP – automatische Beendigung des Prozesses anstelle seiner Umwandlung in einen Zombie-Prozess, bis die Funktion wait() des Elternprozesses ausgeführt wird;
CLONE_PIDFD_AUTOKILL – Beendigung des Tochterprozesses beim Schließen des zugehörigen pidfd-Descriptors (z. B. beim Beenden des Elternprozesses). - Für jedes Kernel-Modul wurde im Verzeichnis /sys/module die Datei import_ns hinzugefügt, die eine Liste der importierten Symbolnamespace enthält.
- Im System für asynchrone Eingabe/Ausgabe io_uring wurde die Unterstützung der BPF-Subsysteme zur Erstellung von Handlern hinzugefügt. Zum Beispiel kann der Hauptdispatcher-Zyklus durch ein BPF-Programm ersetzt werden.
- Im BPF-Subsystem wurde die Analyse der Stack-Nutzung modernisiert, was die Verifizierung vieler BPF-Programme erheblich beschleunigt hat.
- Zur Optimierung der Leistung wurde das hrtimer-Subsystem (High Resolution Timer) neu geschrieben. Der Task-Scheduler kann jetzt hochauflösende Timer verwenden, ohne an Leistung zu verlieren, anstelle weniger präziser Timer.
- Die Änderungen aus dem Rust-for-Linux-Zweig wurden fortgesetzt, die die Nutzung von Rust als zweite Sprache für die Entwicklung von Treibern und Modulen des Kernels betreffen (die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht zur Aufnahme von Rust in die obligatorischen Build-Abhängigkeiten des Kernels). Mit Version 1.85 (verfügbar in Debian 13) wurden die Anforderungen an die Rust-Version, die für den Bau der Kernelkomponenten erforderlich ist, erhöht. Eine experimentelle Kconfig-Option CONFIG_RUST_INLINE_HELPERS wurde hinzugefügt, die es ermöglicht, C-Makros während der Kompilierung in Rust-Code einzubetten (die Optimierung beschleunigte die Leistung des Null-Blocktreibers um 2%). Ein neuer Makro 'const_assert!' wurde eingeführt. Die Module 'sizes', 'clk', 'ptr', 'sync', 'error' wurden erweitert.
- Im SCHED_EXT-Mechanismus, der die Verwendung von BPF zur Erstellung von CPU-Planern ermöglicht, wurde die erste Möglichkeit zur Erstellung von verschachtelten Planern (Sub-Planern) hinzugefügt, mit denen für jede cgroup ein eigener Task-Planer aktiviert werden kann.
- Die Optimierung des Swap-Subsystems wurde fortgesetzt. Die alte Struktur swap_map wurde durch den Mechanismus 'Swap Table' ersetzt. Diese Änderung hat die Leistung verbessert und den Speicherverbrauch im Swap-Subsystem reduziert.
- Im DAMON-Subsystem (Data Access MONitor), das den Zugriff von Prozessen auf Daten im RAM überwacht (zum Beispiel kann man herausfinden, auf welche Bereiche des Speichers ein Prozess zugegriffen hat und welche Bereiche ungenutzt blieben), wurde die Unterstützung verschiedener automatischer Tuning-Algorithmen für Quoten hinzugefügt.
- Im Tracing-Subsystem wurde das Konzept externer Ringpuffer implementiert, das es ermöglicht, Tracing-Daten aus virtuellen Maschinen. Diese Funktion wird in Hypervisoren KVM und nVHE genutzt, um Tracing-Daten aus dem Gastbetriebssystem an den Host zu übertragen.
- Im RV-Subsystem (Runtime Verification), das zur Überprüfung der Korrektheit von hochverfügbaren Systemen dient, wurden Monitoring-Komponenten 'stall' zur Überwachung von Aufgaben hinzugefügt, deren Ausführung vorübergehend pausiert oder blockiert ist, sowie 'deadline' zur Analyse des Verhaltens des Task-Schedulers.
- Virtualisierung und Sicherheit
- Standardmäßig ist die Flagge PROC_MEM_FORCE_PTRACE gesetzt, die den Zugriff auf den Speicher eines Prozesses über die Datei /proc/PID/mem nur für Prozesse erlaubt, die den Systemaufruf ptrace() zur Debugging verwenden.
- Ein neuer Satz von Hooks für LSM-Module (Linux Security Module) wurde hinzugefügt, der die Implementierung von Richtlinien für stapelbare Dateisysteme wie overlayfs erleichtert. In LSM wurde auch ein Hook zur Verwaltung des Zugriffs auf Unix-Sockets hinzugefügt, der im LSM-Modul Landlock zur Zuweisung von Zugriffsrichtlinien für Unix-Sockets verwendet wird.
- Die integrierte Kryptobibliothek lib/crypto, die einfachere und schnellere Funktionen als die traditionelle crypto API bereitstellt, unterstützt jetzt die Algorithmen AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH und SM3. Die Dokumentation zu lib/crypto wurde ebenfalls hinzugefügt.
- Der pKVM-Modus (Protected KVM) zur strengen Isolierung anonymer Speicher wurde implementiert, wobei Virtualisierungs-Erweiterungen für die Architektur AArch64 verwendet werden. In diesem Modus werden die Speicherseiten des Gasts aus der Tabelle der virtuellen Adressen des Host-Systems ausgeschlossen.
- Im KVM-Hypervisor wurde die Unterstützung für die fünfte Version des virtuellen Interruptsteuergeräts ARM (VGICv5 – ARM Virtual Generic Interrupt Controller v5) hinzugefügt.
- Netzwerksubsystem
- Für Unix-Sockets, die durch die Funktion socket() erstellt werden, wird die Unterstützung für erweiterte Dateiattribute (xattr) „user.*“ bereitgestellt. Eine Anwendungsdomäne umfasst das Setzen von Labels über erweiterte Attribute an Unix-Sockets, die für IPC Varlink verwendet werden, um sie von der Masse abzuheben und die Funktionsweise von IPC mithilfe von BPF-Programmen zu inspizieren und zu debuggen. In systemd-journald sollen die erweiterten Attribute zur Bestimmung des Log-Formats in Verbindung mit dem Socket /dev/log verwendet werden.
- Die Unterstützung des UDP-Lite-Protokolls (RFC 3828), das die Zustellung von Paketen mit fehlerhaften Prüfziffern zulässt, wurde entfernt, da davon ausgegangen wird, dass beispielsweise teilweise beschädigte Audio- und Videodaten auf Codec-Ebene wiederhergestellt werden können. Das Protokoll wurde entfernt, da es niemand verwendet hat.
- Die Möglichkeit, den IPv6-Stack als Kernelmodul zu kompilieren, wurde entfernt, was in der Praxis nicht genutzt wurde (IPv6 wird entweder ins Kernel eingebaut oder vollständig deaktiviert), aber die Wartung erschwerte, da beim Kompilieren von IPv6 als Kernelmodul (CONFIG_IPV6=m) viele Subsysteme gezwungen waren, unnötige Handler für den Fall des Entladens des IPv6-Moduls hinzuzufügen.
- Ausrüstung
- Im AMDGPU-Treiber wurde eine neue Display-Engine (DC) für die AMD APU-Serie HD 7000 (Sea Islands, GCN 1.1) aktiviert.
- Der Nouveau-Treiber hat erste Unterstützung für die NVIDIA GA100 GPU, basierend auf der Ampere-Architektur, hinzugefügt.
- Die Arbeit an dem drm-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur, die in Intel-Grafikkarten der Arc-Serie und integrierter Grafik ab den Tiger-Lake-Prozessoren verwendet wird, wurde fortgesetzt. Unterstützung für die Grafikschnittstelle der Intel Nova Lake-P-Prozessoren wurde hinzugefügt. Es wurden säuberbare Pufferobjekte (Purgeable Buffer Objects) implementiert.
- Die Integration der Nova-Treiberkomponenten für NVIDIA GPUs, die mit GSP-Firmware ausgestattet sind und seit der NVIDIA GeForce RTX 2000 Serie auf Basis der Turing-Architektur verwendet werden, wurde fortgesetzt. Der Treiber ist in Rust geschrieben. Erste Unterstützung für GPUs auf Basis der Turing-Architektur wurde hinzugefügt.
- Der DRM-Corebootdrm-Treiber zur Ausgabe von Grafiken über das Framebuffer von CoreBoot-Firmware wurde hinzugefügt.
- Unterstützung für die ASoC-Audiochips AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP und WM8962 wurde hinzugefügt. Die Unterstützung für USB-Audiogeräte, einschließlich Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio und Feaulle Rainbow, wurde verbessert.
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - Der Yogafan-Treiber wurde hinzugefügt, um die Drehgeschwindigkeit des Lüfters bei Lenovo Yoga, Legion und IdeaPad Laptops zu verfolgen.
- Unterstützung für ARM-Plattformen, SoC und Geräte hinzugefügt: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 und ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- Die Unterstützung für in SoC Baikal-T1 verwendete AHCI SATA- und PCIe-Controller sowie Treiber für Timer, Speicher, physmap, Bus, hwmon, dwc und bt1-rom wurde entfernt. Der Grund für die Entfernung ist mangelnde Wartung und unvollständige Integration in den Kern der Baikal-Plattform, deren Produktion in Russland im November 2025 eingestellt wurde.
- 12 Treiber für Ethernet-Geräte mit ISA- und PCMCIA-Schnittstellen, die vor 2002 hergestellt wurden und für die keine Nutzer in Betriebssystemen gefunden wurden, wurden entfernt. Auch aus dem Kernel ausgeschlossen.
ISDN-Subsystem, Implementierung der Protokolle AX.25, CAIF und Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), Treiber für yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateurfunk), inport und logibm (busmouse). Der Grund für die Entfernung war das Fehlen aktiver Wartungsmitarbeiter, während die Anzahl der durch syzbot und KI-Tools entdeckten Fehler zunahm, die niemand beheben möchte. Die gesamte Last der Behebung schwerwiegender Probleme liegt nun bei denjenigen, die die Hauptnetz-Subsysteme des Kernels betreuen. Insgesamt wurden mehr als 140.000 Codezeilen entfernt.
Quelle: opennet.ru
