Linux 6.1-Kernel-Release

Nach zweimonatiger Entwicklungszeit präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.1. Zu den bemerkenswertesten Änderungen gehören: Unterstützung für die Entwicklung von Treibern und Modulen in der Rust-Sprache, Modernisierung des Mechanismus zur Ermittlung verwendeter Speicherseiten, ein spezieller Speichermanager für BPF-Programme, ein System zur Diagnose von Speicherproblemen KMSAN, das KCFI (Kernelk Control). -Flow Integrity) Schutzmechanismus, Einführung des Maple-Strukturbaums.

Die neue Version enthält 15115 Fixes von 2139 Entwicklern, die Patchgröße beträgt 51 MB und ist damit etwa doppelt so groß wie die Patches der Kernel 2 und 6.0. Die Änderungen betrafen 5.19 Dateien, 13165 Codezeilen wurden hinzugefügt und 716247 Zeilen gelöscht. Etwa 304560 % aller in 45 eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 6.1 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 14 % beziehen sich auf den Netzwerkstapel, 14 % beziehen sich auf Dateisysteme und 3 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Wichtige Neuerungen im Kernel 6.1:

  • Speicher- und Systemdienste
    • Es wurde die Möglichkeit hinzugefügt, Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen zu verwenden. Der Hauptgrund für die Unterstützung von Rust besteht darin, das Schreiben sicherer und hochwertiger Gerätetreiber zu erleichtern, indem die Wahrscheinlichkeit von Fehlern bei der Arbeit mit dem Speicher verringert wird. Die Rust-Unterstützung ist standardmäßig deaktiviert und führt nicht dazu, dass Rust als erforderliche Kernel-Build-Abhängigkeit enthalten ist. Der Kernel hat bisher eine minimale, abgespeckte Version der Patches übernommen, die von 40 auf 13 Codezeilen reduziert wurde und nur das notwendige Minimum bietet, das ausreicht, um ein einfaches Kernelmodul zu erstellen, das in der Rust-Sprache geschrieben ist. Zukünftig ist geplant, die bestehende Funktionalität schrittweise zu erweitern und weitere Änderungen aus dem Rust-for-Linux-Zweig zu übernehmen. Parallel dazu werden Projekte entwickelt, um mithilfe der vorgeschlagenen Infrastruktur Treiber für NVMe-Laufwerke, das 9p-Netzwerkprotokoll und die Apple M1-GPU in der Sprache Rust zu entwickeln.
    • Für Systeme, die auf AArch64-, RISC-V- und LoongArch-Architekturen mit EFI basieren, wurde die Möglichkeit implementiert, komprimierte Kernel-Images direkt zu laden. Handler zum Laden, Ausführen und Entladen von Kernel-Images hinzugefügt, die direkt von EFI zboot aufgerufen werden. Außerdem wurden Handler zum Installieren und Löschen von Protokollen aus der EFI-Protokolldatenbank hinzugefügt. Früher wurde das Entpacken durch einen separaten Bootloader durchgeführt, nun kann dies durch einen Handler im Kernel selbst erfolgen – das Kernel-Image wird als EFI-Anwendung gebildet.
    • Die Zusammensetzung umfasst einen Teil der Patches mit der Implementierung eines mehrstufigen Speicherverwaltungsmodells, das die Trennung von Speicherbänken mit unterschiedlichen Leistungsmerkmalen ermöglicht. Beispielsweise können die am häufigsten verwendeten Seiten im schnellsten Speicher gespeichert werden, während die am seltensten verwendeten Seiten im relativ langsamen Speicher gespeichert werden. Kernel 6.1 führt einen Mechanismus ein, um zu bestimmen, wo sich stark genutzte Seiten im langsamen Speicher befinden, damit sie in den schnellen Speicher hochgestuft werden können, und führt außerdem ein allgemeines Konzept von Speicherebenen und ihrer relativen Leistung ein.
    • Es umfasst den MGLRU-Mechanismus (Multi-Generational LRU), der die alte LRU-Implementierung (Least Recent Used) basierend auf zwei Warteschlangen durch eine mehrstufige Struktur ersetzt, die besser bestimmt, welche Speicherseiten tatsächlich verwendet werden und an welche weitergeleitet werden können die Swap-Partition.
    • Unterstützung für die von Oracle-Ingenieuren vorgeschlagene „Maple Tree“-Datenstruktur hinzugefügt, die als effektiverer Ersatz für die „Red-Black Tree“-Struktur positioniert ist. Maple Tree ist eine Variante von B-Tree, die die Bereichsindizierung unterstützt und darauf ausgelegt ist, den Cache moderner Prozessoren effizient zu nutzen. Einige Speicherverwaltungssubsysteme wurden bereits auf Maple Tree übertragen, was sich positiv auf deren Leistung auswirkte. Zukünftig kann Maple Tree zur Implementierung einer Bereichssperre verwendet werden.
    • Dem BPF-Subsystem wurde die Möglichkeit hinzugefügt, „zerstörerische“ BPF-Programme zu erstellen, die speziell darauf ausgelegt sind, über den Aufruf crash_kexec() eine Notabschaltung einzuleiten. Solche BPF-Programme können für Debugging-Zwecke erforderlich sein, um zu einem bestimmten Zeitpunkt die Erstellung eines Crash-Dumps zu veranlassen. Um beim Laden eines BPF-Programms auf destruktive Vorgänge zuzugreifen, müssen Sie das Flag BPF_F_DESTRUCTIVE angeben, sysctl kernel.destructive_bpf_enabled aktivieren und über CAP_SYS_BOOT-Rechte verfügen.
    • Für BPF-Programme ist es möglich, cgroup-Elemente sowie Ressourcen (Dateien, VMA, Prozesse usw.) eines bestimmten Threads oder einer bestimmten Aufgabe aufzuzählen. Ein neuer Kartentyp wurde implementiert, um Benutzer-Ringpuffer zu erstellen.
    • Ein spezieller Aufruf für die Speicherzuweisung in BPF-Programmen (Speicherzuweisung) wurde hinzugefügt, der eine sicherere Speicherzuweisung im BPF-Kontext bietet als der Standard-kmalloc().
    • Der erste Teil der Änderungen wurde integriert und bietet die Möglichkeit, Treiber für Eingabegeräte mit einer HID-Schnittstelle (Human Interface Device) zu erstellen, implementiert in Form von BPF-Programmen.
    • Der Kernel hat den Code zur Unterstützung des ausführbaren Dateiformats a.out vollständig entfernt, das in Version 5.1 veraltet war und seit den Versionen 5.18 und 5.19 für die wichtigsten Architekturen deaktiviert ist. Das a.out-Format ist auf Linux-Systemen seit langem veraltet und die Generierung von a.out-Dateien wird von modernen Tools in Standard-Linux-Konfigurationen nicht unterstützt. Der Loader für a.out-Dateien kann vollständig im Userspace implementiert werden.
    • Für Systeme, die auf der LoongArch-Befehlssatzarchitektur basieren, die in den Loongson 3 5000-Prozessoren verwendet wird und die neue RISC ISA implementiert, ähnlich wie MIPS und RISC-V, ist Unterstützung für Leistungsmessereignisse (Perf-Ereignisse), Kexec, Kdump und BPF-JIT-Kompilierung implementiert .
    • Die asynchrone I/O-Schnittstelle io_uring bietet einen neuen Modus, IORING_SETUP_DEFER_TASKRUN, der es ermöglicht, ringpufferbezogene Arbeiten vorübergehend zu verschieben, bis eine Anwendungsanforderung gestellt wird, die für Batch-Arbeiten verwendet werden kann und Latenzprobleme aufgrund von Preemption vermeidet. Anwendungen am falsche Zeit.
    • Prozesse im Benutzerbereich erhalten die Möglichkeit, die Konvertierung einer Reihe normaler Speicherseiten in einen Satz großer Speicherseiten (Transparent Huge-Pages) zu initiieren.
    • Implementierung des Geräts /dev/userfaultfd hinzugefügt, das den Zugriff auf die Funktionalität des Systemaufrufs userfaultfd() mithilfe von Zugriffsrechten im FS ermöglicht. Mit der Funktion „userfaultfd“ können Sie Handler für den Zugriff auf nicht zugewiesene Speicherseiten (Seitenfehler) im Benutzerbereich erstellen.
    • Die Anforderungen an die Version des Dienstprogramms GNU Make wurden erhöht – zum Erstellen des Kernels ist jetzt mindestens Version 3.82 erforderlich.
  • Festplattensubsystem, E/A und Dateisysteme
    • Am Btrfs-Dateisystem wurden erhebliche Leistungsoptimierungen vorgenommen; unter anderem wurde die Leistung des FIEMAP-ioctl-Aufrufs um Größenordnungen gesteigert. Unterstützung für asynchrone gepufferte Schreibvorgänge für Anwendungen hinzugefügt, die io_uring verwenden. Unterstützung für mit fs-verity geschützte Dateien zum „Senden“-Vorgang hinzugefügt.
    • Das ext4-Dateisystem verfügt über Leistungsoptimierungen im Zusammenhang mit der Journalpflege und dem schreibgeschützten Betrieb.
    • Das EROFS-Dateisystem (Enhanced Read-Only File System), das für die Verwendung auf Partitionen konzipiert ist, auf die im schreibgeschützten Modus zugegriffen werden kann, implementiert die Möglichkeit, in verschiedenen Dateisystemen duplizierte Daten gemeinsam zu nutzen.
    • Der Systemaufruf statx() wurde hinzugefügt, um Informationen darüber anzuzeigen, ob direkte E/A auf eine Datei angewendet werden kann.
    • Dem FUSE-Subsystem (Filesystems in User Space) wurde Unterstützung für die Erstellung temporärer Dateien mit dem O_TMPFILE-Flag hinzugefügt.
  • Virtualisierung und Sicherheit
    • Die Implementierung des CFI-Schutzmechanismus (Control Flow Integrity) wurde ersetzt und fügt vor jedem indirekten Aufruf einer Funktion Überprüfungen hinzu, um einige Formen undefinierten Verhaltens zu erkennen, das möglicherweise zu einer Verletzung der normalen Ausführungsreihenfolge (Kontrollfluss) führen könnte Ergebnis der Verwendung von Exploits, die Zeiger auf im Speicher gespeicherte Funktionen ändern. Die Standardimplementierung von CFI aus dem LLVM-Projekt wurde durch eine Option ersetzt, die ebenfalls auf der Verwendung von Clang basiert, jedoch speziell für den Schutz von Subsystemen und Betriebssystemkernen auf niedriger Ebene angepasst ist. In LLVM wird in der Clang 16-Version eine neue Implementierung angeboten und mit der Option „-fsanitize=kcfi“ aktiviert. Der wesentliche Unterschied zur neuen Implementierung besteht darin, dass sie nicht an Link-Time-Optimierungen (LTO) gebunden ist und nicht dazu führt, dass Funktionszeiger durch Links in der Sprungtabelle ersetzt werden.
    • Für LSM-Module (Linux Security Module) ist es möglich, Handler zu erstellen, die Vorgänge zum Erstellen von Namespaces abfangen.
    • Es werden Tools zur Überprüfung digitaler PKCS#7-Signaturen in BPF-Programmen bereitgestellt.
    • Die Möglichkeit, im nicht blockierenden Modus (O_NONBLOCK) zu öffnen, die in Kernel 5.6 versehentlich entfernt wurde, wurde an /dev/random zurückgegeben.
    • Auf Systemen mit x86-Architektur wurde eine Warnung hinzugefügt, falls Speicherseiten durch Kernel-Subsysteme zugeordnet werden, die gleichzeitig Ausführung und Schreiben ermöglichen. Zukünftig wird über die Möglichkeit nachgedacht, eine solche Speicherzuordnung vollständig zu verbieten.
    • KMSAN-Debugging-Mechanismus (Kernel Memory Sanitizer) hinzugefügt, um nicht initialisierte Speichernutzung im Kernel sowie nicht initialisierte Speicherlecks zwischen Benutzerbereich und Geräten zu erkennen.
    • Es wurden Verbesserungen am kryptosicheren CRNG-Pseudozufallszahlengenerator vorgenommen, der im getrandom-Aufruf verwendet wird. Die Änderungen wurden von Jason A. Donenfeld, Autor von VPN WireGuard, vorbereitet und zielen darauf ab, die Sicherheit der pseudozufälligen Ganzzahlextraktion zu verbessern.
  • Netzwerk-Subsystem
    • Der TCP-Stack bietet die Möglichkeit (standardmäßig deaktiviert), Socket-Hash-Tabellen für jeden Namespace separat zu verwenden, was die Leistung auf Systemen mit einer großen Anzahl von Namespaces verbessert.
    • Code zur Unterstützung des alten DECnet-Protokolls entfernt. Benutzerraum-API-Stubs bleiben vorhanden, um die Kompilierung von Anwendungen zu ermöglichen, die DECnet verwenden. Diese Anwendungen können jedoch keine Verbindung zum Netzwerk herstellen.
    • Das Netlink-Protokoll ist dokumentiert.
  • Ausrüstung
    • Der amdgpu-Treiber hat Unterstützung für die DSC-Weiterleitung (Display Stream Compression) für verlustfreie Datenkomprimierung beim Austausch von Informationen mit Bildschirmen hinzugefügt, die sehr hohe Auflösungen unterstützen. Es wird weiterhin daran gearbeitet, die Plattformen AMD RDNA3 (RX 7000) und CDNA (Instinct) zu unterstützen. Unterstützung für DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x und GMC 11.x IP-Komponenten hinzugefügt. Der amdkfd-Treiber (für diskrete AMD-GPUs wie Polaris) bietet Unterstützung für GFX 11.0.3.
    • Der i915 (Intel)-Treiber unterstützt die Meteor-Lake-GPU. Meteor Lake und neuere GPUs unterstützen die DP 2.0-Schnittstelle (DisplayPort). Identifikatoren für Grafikkarten basierend auf der Alder Lake S-Mikroarchitektur hinzugefügt.
    • Unterstützung für Audio-Subsysteme hinzugefügt, die in Apple Silicon-, Intel SkyLake- und Intel KabyLake-Prozessoren implementiert sind. Der HDA-Audiotreiber CS35L41 unterstützt den Ruhemodus. ASoC-Unterstützung (ALSA System on Chip) für integrierte Audiochips von Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake und Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250 hinzugefügt. SM8450 und Texas Instruments SRC4392
    • Unterstützung für LCD-Panels Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21, INX hinzugefügt N116BCA- EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Unterstützung für AHCI-SATA-Controller hinzugefügt, die im Baikal-T1-SoC verwendet werden.
    • Unterstützung für Bluetooth-Chips MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE und RTL8761BUV (Edimax BT-8500) hinzugefügt.
    • Der ath11k-Treiber für Qualcomm-Funkmodule bietet Unterstützung für Spektralscannen im 160-MHz-Bereich, implementiert Multithread-NAPI und verbesserte Unterstützung für Qualcomm WCN6750 Wi-Fi-Chips.
    • Treiber für PinePhone-Tastatur, InterTouch-Touchpads (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite-Fernbedienungen, Tablets XP-PEN Deco Pro S hinzugefügt und Intuos Pro Small (PTH-460).
    • Treiber für kryptografische Beschleuniger Aspeed HACE (Hash and Crypto Engine) hinzugefügt.
    • Unterstützung für integrierte Thunderbolt/USB4 Intel Meteor Lake-Controller hinzugefügt.
    • Unterstützung für die Smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 und Grand Max sowie Pine64 Pinephone Pro 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. Aktualisierte Treiber für SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom und NXP.

Gleichzeitig hat die Latin American Free Software Foundation eine Version des völlig kostenlosen Kernels 6.1 erstellt – Linux-libre 6.1-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang ist vom Hersteller begrenzt. Die neue Version bereinigt den neuen rtw8852b-Treiber und die DTS-Dateien für verschiedene Qualcomm- und MediaTek-SoCs mit Prozessoren, die auf der AArch64-Architektur basieren. Aktualisierter Blob-Reinigungscode in den Treibern und Subsystemen amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Die Bereinigung veralteter Treiber tm6000 TV-Karten, cpia2 v4l, sp8870, av7110 wurde korrigiert.

Source: opennet.ru

Kommentar hinzufügen