Nach zwei Monaten der Entwicklung hat Linus Torvalds die Veröffentlichung des Linux-Kernels 6.1 vorgestellt. Zu den bemerkenswertesten Änderungen gehören: Unterstützung für die Entwicklung von Treibern und Modulen in Rust, die Modernisierung des Mechanismus zur Bestimmung der verwendeten Speicherseiten, ein spezieller Speicher-Manager für BPF-Programme, ein Diagnosesystem für Speicherprobleme (KMSAN), ein Schutzmechanismus für KCFI (Kernel Control-Flow Integrity) und die Einführung der Maple tree-Struktur.
In die neue Version wurden 15.115 Korrekturen von 2.139 Entwicklern integriert, die Patch-Größe beträgt 51 MB, was ungefähr halb so viel wie die Patches der Versionen 6.0 und 5.19 ist. Die Änderungen betreffen 13.165 Dateien, 716.247 Codezeilen wurden hinzugefügt und 304.560 Zeilen entfernt. Ungefähr 45 % aller in 6.1 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 14 % betreffen die Aktualisierung von architekturspezifischem Code, 14 % beziehen sich auf den Netzwerkstack, 3 % auf Dateisysteme und 3 % auf interne Kernel-Subsysteme.
Die Hauptneuheiten im Kernel 6.1:
- Speicher und Systemdienste
- Die Unterstützung für die Programmiersprache Rust wurde als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen hinzugefügt. Das Hauptziel der Rust-Unterstützung ist es, das Schreiben von sicheren und qualitativ hochwertigen Gerätetreibern zu erleichtern, indem die Wahrscheinlichkeit von Fehlern beim Umgang mit Speicher verringert wird. Standardmäßig ist die Rust-Unterstützung deaktiviert und führt nicht zur Aufnahme von Rust in die obligatorischen Build-Abhängigkeiten des Kernels. Derzeit wurde ein minimaler, reduzierter Satz von Patches in den Kernel aufgenommen, der von 40.000 auf 13.000 Codezeilen verkürzt wurde und nur das notwendige Minimum bietet, das ausreicht, um ein einfaches Kernelmodul, das in Rust geschrieben wurde, zu kompilieren. Zukünftig ist geplant, die vorhandene Funktionalität schrittweise auszubauen und weitere Änderungen aus der Rust-for-Linux-Branch zu integrieren. Gleichzeitig werden Projekte entwickelt, die die vorgeschlagene Infrastruktur zur Entwicklung von Treibern für NVMe-Speicher, das Netzwerkprotokoll 9p und die GPU Apple M1 in Rust nutzen.
- Für Systeme mit AArch64-, RISC-V- und LoongArch-Architekturen mit EFI ist es nun möglich, komprimierte Kernel-Images direkt zu booten. Es wurden Handler hinzugefügt, um Kernel-Images zu laden, zu starten und zu entladen, die direkt aus EFI zboot aufgerufen werden. Außerdem wurden Handler zum Installieren und Entfernen von Protokollen aus der EFI-Protokolldatenbank implementiert. Zuvor wurde die Dekomprimierung von einem separaten Bootloader durchgeführt, jetzt kann dies der Handler im Kernel selbst erledigen – das Kernel-Image wird als EFI-Anwendung erstellt.
- Ein Teil der Patches mit der Implementierung eines mehrstufigen Speichermanagementmodells wurde angenommen, das es ermöglicht, Speicherbänke mit unterschiedlichen Leistungsmerkmalen zu trennen. Beispielsweise können die am intensivsten genutzten Seiten in dem schnellsten Speicher untergebracht werden, während selten genutzte Seiten in relativ langsamen Speicher gespeichert werden können. Im Kernel 6.1 wurde ein Mechanismus zur Bestimmung des Vorhandenseins intensiv genutzter Seiten im langsamen Speicher implementiert, um sie in den schnellen Speicher zu verlagern, und es wurde ein allgemeines Konzept für Speicherebenen und deren relative Leistung realisiert.
- Das MGLRU (Multi-Generational LRU) System ist nun integriert, welches die alte LRU (Least Recently Used) Implementierung auf Basis von zwei Warteschlangen durch eine mehrstufige Struktur ersetzt. Diese neue Struktur erkennt besser, welche Speicherseiten tatsächlich verwendet werden und welche in den Swap-Bereich verschoben werden können.
- Die Unterstützung für die von Oracle-Ingenieuren vorgeschlagene Datenstruktur 'maple tree' wurde hinzugefügt, die als effizientere Alternative zur 'red-black tree' Struktur positioniert wird. Der Maple-Tree ist eine Variante des B-Baums, die eine Bereichsindexierung unterstützt und für eine optimale Cache-Nutzung entworfen wurde. modernen Prozessoren. Einige Speichermanagement-Subsysteme wurden bereits auf den Maple-Tree umgestellt, was sich positiv auf ihre Leistung ausgewirkt hat. Zukünftig könnte der Maple-Tree für die Implementierung von Bereichssperren (range locking) genutzt werden.
- Das BPF-Subsystem hat die Möglichkeit hinzugefügt, "destructive" BPF-Programme zu erstellen, die speziell auf die Initiierung eines Not-Aus durch den Aufruf von crash_kexec() abzielen. Solche BPF-Programme können für Debugging-Zwecke erforderlich sein, um zu einem bestimmten Zeitpunkt einen Crash-Dump zu initiieren. Um auf die destruktiven Operationen beim Laden des BPF-Programms zuzugreifen, muss das Flag BPF_F_DESTRUCTIVE angegeben, der sysctl kernel.destructive_bpf_enabled aktiviert und die Berechtigung CAP_SYS_BOOT vorhanden sein.
- Für BPF-Programme wurde die Möglichkeit implementiert, cgroup-Elemente sowie Ressourcen (Dateien, vma, Prozesse usw.) eines bestimmten Threads oder Tasks zu durchlaufen. Ein neuer Map-Typ wurde implementiert, um benutzerdefinierte Ringpuffer (user ring buffer) zu erstellen.
- Ein spezieller Aufruf zur Speicherallokation in BPF-Programmen (Memory Allocator) wurde hinzugefügt, der eine sicherere Speicherverteilung im Kontext von BPF bietet als das Standard-kmalloc().
- Der erste Teil der Änderungen wurde integriert, um die Erstellung von Treibern für Eingabegeräte mit HID-Schnittstelle (Human Interface Device) zu ermöglichen, die in Form von BPF-Programmen implementiert werden.
- Der Code zur Unterstützung des a.out-Executables wurde vollständig aus dem Kern entfernt. Dieser wurde in der Version 5.1 als veraltet eingestuft und seit den Versionen 5.18 und 5.19 für die Hauptarchitekturen deaktiviert. Das a.out-Format wird auf Linux-Systemen schon lange nicht mehr verwendet, und die Erstellung von a.out-Dateien wird von modernen Werkzeugen in standardmäßigen Linux-Konfigurationen nicht mehr unterstützt. Der Loader für a.out-Dateien kann vollständig im Benutzerspeicher implementiert werden.
- Für Systeme, die auf der Befehlsarchitektur LoongArch basieren, die in den Prozessoren Loongson 3 5000 verwendet wird und eine neue RISC ISA implementiert, die MIPS und RISC-V ähnlich ist, wurde die Unterstützung für Performance-Messereignisse (perf event), kexec, kdump und JIT-Kompilierung für BPF implementiert.
- Im asynchronen I/O-Interface io_uring wurde ein neuer Modus IORING_SETUP_DEFER_TASKRUN vorgeschlagen, der es ermöglicht, die Ausführung von mit dem Ringpuffer verbundenen Arbeiten vorübergehend bis zum Eintreffen einer Anfrage von der Anwendung zu verzögern. Dadurch kann die Ausführung von Arbeiten im Batch-Modus organisiert und Probleme mit Verzögerungen durch das zeitgleiche Auslagern der Anwendung verhindert werden.
- Benutzerräumlichkeiten haben die Möglichkeit erhalten, den Bereich regulärer Speicherseiten in ein Set großer Speicherseiten (Transparent Huge-Pages) umzuwandeln.
- Die Implementierung des Geräts /dev/userfaultfd wurde hinzugefügt, um den Zugang zu den Funktionen des Systemaufrufs userfaultfd() mit Dateisystemberechtigungen zu ermöglichen. Die Funktionalität von userfaultfd ermöglicht die Erstellung von Handlern für Seitenfehler (page faults) im Benutzerraum.
- Die Anforderungen an die Version des GNU Make-Werkzeugs wurden erhöht – zur Kompilierung des Kernels ist nun mindestens Version 3.82 erforderlich.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Btrfs-Dateisystem wurden erhebliche Leistungsoptimierungen vorgenommen, unter anderem wurde die Leistung des ioctl-Aufrufs FIEMAP um ein Vielfaches gesteigert. Unterstützt wird nun auch asynchrones gepuffertes Schreiben für Anwendungen, die io_uring verwenden. Der 'send'-Befehl unterstützt nun Dateien, die durch fs-verity geschützt sind.
- Im ext4-Dateisystem wurden Leistungsoptimierungen hinsichtlich der Protokollführung und des Betriebs im Nur-Lese-Modus hinzugefügt.
- Im EROFS-Dateisystem (Enhanced Read-Only File System), das für Partitionen im Nur-Lese-Modus konzipiert ist, wurde die Möglichkeit der gemeinsamen Speicherung von Daten eingeführt, die in verschiedenen Dateisystemen dupliziert werden.
- Der Systemaufruf statx() erhielt die Möglichkeit, Informationen über die Anwendbarkeit von direkter Ein-/Ausgabe auf eine Datei auszugeben.
- Im FUSE-Subsystem (Filesystems in User Space) wurde die Unterstützung für die Erstellung temporärer Dateien mit dem Flag O_TMPFILE hinzugefügt.
- Virtualisierung und Sicherheit
- Die Implementierung des CFI (Control Flow Integrity)-Schutzmechanismus wurde überarbeitet. Dieser fügt vor jedem indirekten Funktionsaufruf eine Überprüfung ein, um bestimmte Formen undefinierten Verhaltens zu identifizieren, die potenziell den normalen Ablauf (Control Flow) durch Exploits, die Speicherpointer auf Funktionen ändern, stören können. Die Standardimplementierung des CFI aus dem LLVM-Projekt wurde durch eine Variante ersetzt, die ebenfalls auf Clang basiert, jedoch speziell für den Schutz von Low-Level-Subsystemen und Betriebssystemkernen angepasst wurde. In LLVM wird die neue Implementierung mit der Veröffentlichung von Clang 16 erhältlich sein und als Option "-fsanitize=kcfi" aktiviert werden können. Ein wesentliches Merkmal der neuen Implementierung ist, dass sie nicht an Bindungsoptimierungen (LTO) gebunden ist und nicht zu einer Ersetzung von Funktionszeigern durch Referenzen in der Sprungtabelle führt.
- Für LSM-Module (Linux Security Module) wurde die Möglichkeit geschaffen, Handler für die Abfangen von Vorgängen zur Erstellung von Namensräumen zu erstellen.
- Es wurden Werkzeuge zur Verifizierung von PKCS#7 digitalen Signaturen in BPF-Programmen bereitgestellt.
- Im /dev/random wurde die Möglichkeit zur Öffnung im nicht-blockierenden Modus (O_NONBLOCK) wiederhergestellt, die versehentlich im Kernel 5.6 entfernt wurde.
- Auf Systemen mit x86-Architektur wurde eine Warnung hinzugefügt, wenn das Kernel-Subsystem Seiten des Speichers mappt, die sowohl Ausführung als auch Schreiben erlauben. In Zukunft wird die Möglichkeit geprüft, eine solche Speichermappung vollständig zu verbieten.
- Ein Debugging-Mechanismus KMSAN (Kernel Memory Sanitizer) wurde hinzugefügt, um die Nutzung von nicht initialisiertem Speicher im Kernel sowie Lecks von nicht initialisiertem Speicher zwischen dem Benutzerspeicher und Geräten zu identifizieren.
- Verbesserungen wurden am kryptographisch sicheren Pseudozufallszahlengenerator CRNG vorgenommen, der im Aufruf getrandom verwendet wird. Änderungen wurden von Jason Donenfeld, dem Autor von WireGuard, vorbereitet und zielen darauf ab, die Sicherheit bei der Erzeugung von Pseudozufalls-Ganzzahlen zu erhöhen. VPN Im TCP-Stack wurde die Möglichkeit implementiert (standardmäßig deaktiviert), separate Hash-Tabellen für Sockets in jedem Namensraum zu verwenden, was die Leistung von Systemen mit einer großen Anzahl von Namensräumen verbessert.
- Netzwerksubsystem
- Die Unterstützung wurde hinzugefügt, um die Verwendung von Hash-Tabellen in TCP-Sockets für jeden Namensraum zu trennen, um die Leistung in Systemen mit vielen Namensräumen zu optimieren.
- Der Code zur Unterstützung des veralteten DECnet-Protokolls wurde entfernt. Für den Benutzerraum wurden API-Platzhalter belassen, die es ermöglichen, Anwendungen, die DECnet verwenden, zu kompilieren, jedoch können diese Anwendungen nicht mit dem Netzwerk verbunden werden.
- Das netlink-Protokoll wurde dokumentiert.
- Ausrüstung
- Der amdgpu-Treiber unterstützt nun die Durchleitung von DSC (Display Stream Compression), um verlustfreie Datenkompression beim Austausch von Informationen mit Bildschirmen mit extrem hoher Auflösung zu ermöglichen. Es wurde weiterhin an der Unterstützung der AMD RDNA3 (RX 7000) und CDNA (Instinct)-Plattformen gearbeitet. Die Unterstützung für die IP-Komponenten DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x und GMC 11.x wurde hinzugefügt. Im amdkfd-Treiber (für diskrete AMD-GPUs wie Polaris) wurde die Unterstützung für GFX 11.0.3 implementiert.
- Der i915 (Intel)-Treiber bietet nun Unterstützung für die Meteor Lake-GPU. Für Meteor Lake und neuere GPUs wurde Unterstützung für das DP 2.0 (DisplayPort)-Interface bereitgestellt. Es wurden neue Identifizierungen für Grafikkarten auf Basis der Alder Lake S-Mikroarchitektur hinzugefügt.
- Die Unterstützung für Audiosubsysteme, die in Apple Silicon, Intel SkyLake und Intel KabyLake Prozessoren implementiert sind, wurde hinzugefügt. Der Audio-Treiber CS35L41 HDA bietet nun Unterstützung für den Energiesparmodus. Unterstützung für ASoC (ALSA System on Chip) wurde für integrierte Audiocontroller von Apple Silicon, AMD Rembrandt DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake und Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 und Texas Instruments SRC4392 hinzugefügt.
- Unterstützung für LCD-Panel Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1 und Multi-Inno Technology MI0800FT-9 wurde hinzugefügt.
- Die Unterstützung für AHCI SATA-Controller, die in SoCs Baikal-T1 verwendet werden, wurde hinzugefügt.
- Die Unterstützung für die Bluetooth-Chips MediaTek MT7921, Intel Magnetor (CNVi, integrierte Konnektivität), Realtek RTL8852C, RTW8852AE und RTL8761BUV (Edimax BT-8500) wurde hinzugefügt.
- Im ath11k-Treiber für die WLAN-Module von Qualcomm wurde die Unterstützung für die spektrale Scanning im Bereich von 160 MHz hinzugefügt. Es wurde Multithreading NAPI implementiert und die Unterstützung für die Wi-Fi-Chips Qualcomm WCN6750 wurde verbessert.
- Treiber für die Tastatur des PinePhone, Touchpads von InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Bedienpanels (IBM Operation Panel), XBOX One Elite Controllern sowie Tablets XP-PEN Deco Pro S und Intuos Pro Small (PTH-460) wurden hinzugefügt.
- Ein Treiber für die kryptografischen Beschleuniger Aspeed HACE (Hash und Crypto Engine) wurde hinzugefügt.
- Die Unterstützung für integrierte Thunderbolt/USB4-Controller von Intel Meteor Lake wurde hinzugefügt.
- Unterstützung für die Smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 und Grand Max, Pine64 Pinephone Pro wurde hinzugefügt.
- Unterstützung für folgende ARM SoC und Platinen wurde hinzugefügt: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 und RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Treiber für Samsung SoC, Mediatek, Renesas, Tegra, Qualcomm, Broadcom und NXP wurden aktualisiert.
Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Kernel-Variante 6.1 – Linux-libre 6.1-gnu – erstellt, die von Elementen aus Firmware und Treibern, die nicht freie Komponenten oder Codeabschnitte enthalten, die vom Hersteller eingeschränkt sind, bereinigt wurde. In dieser neuen Ausgabe wurde der neue Treiber rtw8852b sowie die DTS-Dateien für verschiedene SoC von Qualcomm und MediaTek mit Prozessoren auf Basis der Architektur AArch64 überarbeitet. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI wurde aktualisiert. Die Bereinigung veralteter Treiber für TM6000 TV-Karten, cpia2 v4l, sp8870, av7110 wurde angepasst.
Quelle: opennet.ru
