Veröffentlichung des Linux-Kernels 6.1

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

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster