Nach zwei Monaten Entwicklung stellte Linus Torvalds das Release des Linux-Kernels 6.1 vor. Zu den auffĂ€lligsten Ănderungen gehören: UnterstĂŒtzung fĂŒr die Entwicklung von Treibern und Modulen in der Sprache Rust, Modernisierung des Mechanismus zur Bestimmung der verwendeten Speicherseiten, ein spezieller Speichermanager fĂŒr BPF-Programme, ein Diagnosesystem fĂŒr Speicherprobleme namens KMSAN, ein Schutzmechanismus namens KCFI (Kernel Control-Flow Integrity) und die EinfĂŒhrung der Struktur Maple tree.
In die neue Version wurden 15.115 Korrekturen von 2.139 Entwicklern aufgenommen, die PatchgröĂe betrĂ€gt 51 MB, was etwa halb so viel ist wie die PatchgröĂen der Kernelversionen 6.0 und 5.19. Die Ănderungen betrafen 13.165 Dateien, es wurden 716.247 Zeilen Code hinzugefĂŒgt und 304.560 Zeilen entfernt. Etwa 45 % der in 6.1 enthaltenen Ănderungen beziehen sich auf GerĂ€tetreiber, etwa 14 % betreffen die Aktualisierung von architekturspezifischem Code, weitere 14 % stehen im Zusammenhang mit dem Netzwerk-Stack, 3 % mit Dateisystemen und 3 % mit internen Subsystemen des Kernels.
Die wichtigsten Neuerungen im Kernel 6.1:
- Speicher und Systemdienste
- Es wurde die Möglichkeit hinzugefĂŒgt, Rust als zweite Sprache zur Entwicklung von Treibern und Modulen des Kernels zu verwenden. Das Hauptmotiv fĂŒr die UnterstĂŒtzung von Rust ist die Vereinfachung des Schreibens sicherer und hochwertiger GerĂ€tetreiber, indem die Wahrscheinlichkeit verringert wird, Fehler im Umgang mit Speicher zu machen. Die Rust-UnterstĂŒtzung ist standardmĂ€Ăig nicht aktiv und zwingt nicht dazu, Rust in die Liste der erforderlichen AbhĂ€ngigkeiten fĂŒr den Kernel aufzunehmen. In den Kernel wurde bisher eine minimal reduzierte Version der Patches aufgenommen, die von 40.000 auf 13.000 Zeilen Code reduziert wurde und nur das notwendige Minimum bietet, das ausreicht, um ein einfaches Kernel-Modul, das in Rust geschrieben ist, zu kompilieren. In Zukunft ist geplant, die vorhandene FunktionalitĂ€t schrittweise auszubauen und weitere Ănderungen aus dem Rust-for-Linux-Zweig zu ĂŒbertragen. Parallel dazu werden Projekte entwickelt, die die vorgeschlagene Infrastruktur zur Entwicklung von Treibern fĂŒr NVMe-Speicher, das Netzwerkprotokoll 9p und die GPU von Apple M1 nutzen.
- FĂŒr Systeme, die auf AArch64-, RISC-V- und LoongArch-Architekturen mit EFI basieren, wurde die Möglichkeit der direkten Boot-Loader-Option fĂŒr komprimierte Kernel-Images implementiert. Es wurden Handler zum Laden, Starten und Entladen von Kernel-Images hinzugefĂŒgt, die direkt aus EFI zboot aufgerufen werden. AuĂerdem wurden Handler zum Installieren und Entfernen von Protokollen aus der EFI-Protokolldatenbank hinzugefĂŒgt. Zuvor wurde die Entpackung durch einen separaten Bootloader durchgefĂŒhrt, jetzt kann dies durch den Handler im Kernel selbst geschehen â das Kernel-Image wird in Form einer EFI-Anwendung erstellt.
- Ein Teil der Patches, die ein mehrstufiges Speichermanagement-Modell implementieren, das es ermöglicht, Speichermodule mit unterschiedlichen Leistungsmerkmalen zu trennen, wurde angenommen. Zum Beispiel können die am hÀufigsten verwendeten Seiten im schnellsten Speicher abgelegt werden, wÀhrend selten verwendete Seiten in relativ langsamem Speicher gespeichert werden können. Im Kernel 6.1 wurde ein Mechanismus zur Erkennung von intensiv genutzten Seiten im langsamen Speicher implementiert, um sie in den schnellen Speicher zu verschieben, und das allgemeine Konzept von Speicherebenen und deren relativer Leistung wurde realisiert.
- Das MGLRU (Multi-Generational LRU)-System, das die alte LRU (Least Recently Used) Implementierung auf der Basis von zwei Warteschlangen durch eine mehrstufige Struktur ersetzt hat, die besser definiert, welche Speicherseiten tatsÀchlich verwendet werden und welche in den Swap-Bereich verschoben werden können, wurde integriert.
- Die UnterstĂŒtzung der von Oracle-Ingenieuren vorgeschlagenen Datenstruktur "maple tree" wurde hinzugefĂŒgt, die als effizientere Alternative zur Struktur "red-black tree" positioniert wird. Maple tree ist eine Variante des B-Baums, die die Indizierung nach Wertebereichen unterstĂŒtzt und fĂŒr eine effiziente Cache-Nutzung konzipiert ist. moderner Prozessoren. Einige Speichermanagement-Untersysteme wurden bereits auf maple tree umgestellt, was sich positiv auf ihre Leistung ausgewirkt hat. In Zukunft könnte maple tree zur Implementierung von Bereichs-Sperren (range locking) verwendet werden.
- Im BPF-Subsystem wurde die Möglichkeit zur Erstellung von "destruktiven" BPF-Programmen hinzugefĂŒgt, die speziell darauf ausgelegt sind, einen Notabschaltaufruf ĂŒber crash_kexec() zu initiieren. Solche BPF-Programme können fĂŒr Debugging-Zwecke erforderlich sein, um zu einem bestimmten Zeitpunkt einen Crash-Dump zu erzeugen. Um auf destruktive Operationen beim Laden des BPF-Programms zuzugreifen, ist die Angabe des Flags BPF_F_DESTRUCTIVE, die Aktivierung von sysctl kernel.destructive_bpf_enabled und das Vorhandensein der Berechtigung CAP_SYS_BOOT erforderlich.
- FĂŒr BPF-Programme wurde die Möglichkeit geschaffen, Elemente von cgroup zu durchlaufen 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 Speicherzuweisung in BPF-Programmen (memory allocator) wurde hinzugefĂŒgt, der eine sicherere Speicherverteilung im Kontext von BPF gewĂ€hrleistet als das standardmĂ€Ăige kmalloc().
- Der erste Teil der Ănderungen wurde integriert, die die Erstellung von Treibern fĂŒr EingabegerĂ€te mit HID (Human Interface Device) ermöglichen, die in Form von BPF-Programmen realisiert sind.
- Der Code zur UnterstĂŒtzung des Executable-Formats a.out wurde vollstĂ€ndig aus dem Kernel entfernt, das in der Version 5.1 als veraltet eingestuft und in den Versionen 5.18 und 5.19 fĂŒr die Hauptarchitekturen deaktiviert wurde. Das a.out-Format wird auf Linux-Systemen seit langem nicht mehr verwendet, und die Generierung von a.out-Dateien wird von modernen Werkzeugen in den standardmĂ€Ăigen Linux-Konfigurationen nicht unterstĂŒtzt. Der Loader fĂŒr a.out-Dateien kann vollstĂ€ndig im Benutzerspeicher implementiert werden.
- FĂŒr Systeme auf der Basis der LoongArch-Befehlssatzarchitektur, die in den Loongson 3 5000-Prozessoren verwendet wird und eine neue RISC-ISA implementiert, die MIPS und RISC-V Ă€hnelt, wurde die UnterstĂŒtzung fĂŒr Leistungsereignismessungen (perf event), kexec, kdump und die JIT-Kompilierung von BPF implementiert.
- Im asynchronen Eingabe-/Ausgabe-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 zu verschieben, bis eine Anfrage von der Anwendung eingeht. Dies kann verwendet werden, um die AusfĂŒhrung von Arbeiten im Batch-Modus zu organisieren und Probleme mit Verzögerungen zu verhindern, die durch das VerdrĂ€ngen der Anwendung zu einem ungeeigneten Zeitpunkt entstehen.
- Im Benutzerraum haben die Prozesse die Möglichkeit erhalten, den Bereich normaler Speicherseiten in eine Gruppe groĂer Speicherseiten (Transparent Huge-Pages) umzuwandeln.
- Eine Implementierung des GerĂ€ts /dev/userfaultfd wurde hinzugefĂŒgt, das den Zugriff auf die FunktionalitĂ€t des Systemaufrufs userfaultfd() mit Hilfe von Berechtigungen im Dateisystem ermöglicht. Die FunktionalitĂ€t von userfaultfd erlaubt es, Handler fĂŒr Zugriffe auf nicht zugewiesene Speicherseiten (page faults) im Benutzerraum zu erstellen.
- Die Anforderungen an die Version des GNU Make-Tools wurden erhöht - zur Erstellung des Kernels ist jetzt mindestens Version 3.82 erforderlich.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Dateisystem Btrfs wurden erhebliche Leistungsoptimierungen vorgenommen, darunter eine drastische Steigerung der Leistung des ioctl-Aufrufs FIEMAP. Die UnterstĂŒtzung fĂŒr asynchrones gepuffertes Schreiben fĂŒr Anwendungen, die io_uring verwenden, wurde hinzugefĂŒgt. In den 'send'-Befehl wurde die UnterstĂŒtzung fĂŒr Dateien integriert, die durch fs-verity geschĂŒtzt sind.
- Im ext4-Dateisystem wurden Leistungsoptimierungen in Verbindung mit der Protokollierung und dem Betrieb im Nur-Lese-Modus hinzugefĂŒgt.
- Im EROFS-Dateisystem (Enhanced Read-Only File System), das fĂŒr die Verwendung in nur lesbaren Partitionen vorgesehen ist, wurde die Möglichkeit implementiert, Daten gemeinsam zu speichern, die in verschiedenen Dateisystemen dupliziert sind.
- Der Systemaufruf statx() hat die Möglichkeit erhalten, Informationen ĂŒber die Eignung fĂŒr direkten Datei-I/O fĂŒr eine Datei auszugeben.
- Im FUSE (Filesystems in User Space)-Subsystem wurde die UnterstĂŒtzung zur Erstellung temporĂ€rer Dateien mit dem Flag O_TMPFILE hinzugefĂŒgt.
- Virtualisierung und Sicherheit
- Die Implementierung des CFI (Control Flow Integrity) Schutzmechanismus wurde ersetzt, der vor jedem indirekten Funktionsaufruf eine ĂberprĂŒfung hinzufĂŒgt, um bestimmte Formen von undefiniertem Verhalten zu identifizieren, die potenziell die normale AusfĂŒhrungsreihenfolge (Control Flow) stören können, resultierend aus Exploits, die in der Speicher gespeicherte Funktionszeiger verĂ€ndern. Die Standardimplementierung von CFI aus dem LLVM-Projekt wurde durch eine Variante ersetzt, die ebenfalls auf Clang basiert, aber speziell zur Sicherung von niedrigstufigen Subsystemen und Betriebssystemkernen angepasst ist. In LLVM wird die neue Implementierung mit Clang 16 angeboten und kann mit der Option â-fsanitize=kcfiâ aktiviert werden. Das Hauptmerkmal der neuen Implementierung ist, dass sie nicht an Optimierungen zur Link-Time (LTO) gebunden ist und keine Ersetzung von Funktionszeigern durch Verweise in der Sprungtabelle fĂŒhrt.
- FĂŒr LSM-Module (Linux Security Module) wurde die Möglichkeit geschaffen, Handler zu erstellen, die Operationen zur Erstellung von Namespaces abfangen.
- Es wurden Mittel zur ĂberprĂŒfung von digitalen Signaturen PKCS#7 in BPF-Programmen bereitgestellt.
- In /dev/random wurde die Möglichkeit, im nicht-blockierenden Modus (O_NONBLOCK) zu öffnen, zurĂŒckgegeben, die versehentlich im Kernel 5.6 entfernt wurde.
- Auf Systemen mit x86-Architektur wurde eine Warnung hinzugefĂŒgt, wenn vom Kernel-Subsystem Seiten des Speichers abgebildet werden, die gleichzeitig AusfĂŒhrung und Schreiben ermöglichen. ZukĂŒnftig wird die Möglichkeit in Betracht gezogen, eine vollstĂ€ndige Sperre dieser Speichermapping zu erwĂ€gen.
- Ein Debugging-Mechanismus KMSAN (Kernel Memory Sanitizer) wurde hinzugefĂŒgt, um die Verwendung von nicht initialisiertem Speicher im Kernel sowie das Leck von nicht initialisiertem Speicher zwischen Benutzerraum und GerĂ€ten zu erkennen.
- Verbesserungen wurden an dem kryptografisch sicheren pseudozufĂ€lligen Zahlengenerator CRNG, der im Aufruf getrandom verwendet wird, vorgenommen. Die Ănderungen wurden von Jason Donenfeld vorbereitet, dem Autor von WireGuard, und zielen darauf ab, die Sicherheit der Entnahme von pseudozufĂ€lligen Ganzzahlen zu erhöhen. VPN Im TCP-Stack wurde die Möglichkeit implementiert (standardmĂ€Ăig deaktiviert), separate Hash-Tabellen fĂŒr Sockets fĂŒr jeden Namespace zu verwenden, was die Leistung von Systemen mit einer groĂen Anzahl von Namespaces verbessern kann.
- Netzwerksubsystem
- Im TCP-Stack wurde die Möglichkeit (standardmĂ€Ăig deaktiviert) zur separaten Nutzung von Hash-Tabellen fĂŒr Sockets in jedem Namespace implementiert, was die Leistung von Systemen mit vielen Namespaces erhöhen kann.
- Der Code zur UnterstĂŒtzung des veralteten DECnet-Protokolls wurde entfernt. FĂŒr den Benutzerspeicher wurden API-Platzhalter belassen, die es ermöglichen, Anwendungen zu kompilieren, die DECnet verwenden, jedoch können diese Anwendungen nicht auf das Netzwerk zugreifen.
- Das netlink-Protokoll wurde dokumentiert.
- AusrĂŒstung
- Der amdgpu-Treiber hat UnterstĂŒtzung fĂŒr DSC (Display Stream Compression) hinzugefĂŒgt, um Datenverlust bei der Kommunikation mit Bildschirmen mit sehr hohen Auflösungen zu reduzieren. Die Arbeit zur UnterstĂŒtzung der AMD RDNA3 (RX 7000) und CDNA (Instinct) Plattformen wird fortgesetzt. 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. Der amdkfd-Treiber (fĂŒr AMD-Discretes GPUs wie Polaris) hat UnterstĂŒtzung fĂŒr GFX 11.0.3 implementiert.
- Der i915-Treiber (Intel) hat UnterstĂŒtzung fĂŒr die Meteor Lake GPU hinzugefĂŒgt. FĂŒr Meteor Lake und neuere GPUs wurde UnterstĂŒtzung fĂŒr den DP 2.0 (DisplayPort) Schnittstelle sichergestellt. Identifikatoren fĂŒr Grafikarten basierend auf der Alder Lake S Mikroarchitektur wurden hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr Audiokomponenten, die in Apple Silicon, Intel SkyLake und Intel KabyLake Prozessoren implementiert sind, wurde hinzugefĂŒgt. Der Audio-Treiber CS35L41 HDA unterstĂŒtzt jetzt den Energiesparmodus. UnterstĂŒtzung fĂŒr ASoC (ALSA System on Chip) fĂŒr integrierte Audioprozessoren 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 wurde hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr LCD-Displays von 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 der Baikal-T1 SoC verwendet werden, wurde hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr Bluetooth-Chips von MediaTek MT7921, Intel Magnetor (CNVi, integrierte KonnektivitĂ€t), Realtek RTL8852C, RTW8852AE und RTL8761BUV (Edimax BT-8500) wurde hinzugefĂŒgt.
- Im ath11k-Treiber fĂŒr drahtlose Module von Qualcomm wurde UnterstĂŒtzung fĂŒr das spektrale Scannen im 160 MHz-Bereich hinzugefĂŒgt, Multithreading NAPI implementiert und die UnterstĂŒtzung fĂŒr Wi-Fi-Chips von Qualcomm WCN6750 verbessert.
- Treiber fĂŒr Tastaturen zu PinePhone, InterTouch-Touchpads (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-Controller, XP-PEN Deco Pro S und Intuos Pro Small (PTH-460) wurden hinzugefĂŒgt.
- Ein Treiber fĂŒr die kryptographischen Beschleuniger Aspeed HACE (Hash and Crypto Engine) wurde hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr integrierte Thunderbolt/USB4-Controller von Intel Meteor Lake wurde hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr Smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 und Grand Max, Pine64 Pinephone Pro wurde hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr ARM SoC und Boards 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 SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom und NXP wurden aktualisiert.
Gleichzeitig hat die lateinamerikanische Free Software Foundation eine vollstĂ€ndig freie Kernel-Variante 6.1 â Linux-libre 6.1-gnu â erstellt, die von Firmware- und Treiberelementen befreit ist, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Anwendungsbereich durch den Hersteller eingeschrĂ€nkt ist. In der neuen Version wurde der neue Treiber rtw8852b und die DTS-Dateien fĂŒr verschiedene SoC Qualcomm und MediaTek mit Prozessoren auf Basis der AArch64-Architektur gereinigt. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI wurde aktualisiert. Die Bereinigung veralteter Treiber wie tm6000 TV-Karten, cpia2 v4l, sp8870, av7110 wurde angepasst.
Quelle: opennet.ru
