Nach zwei Monaten Entwicklung stellte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.6 vor. Zu den bemerkenswertesten Änderungen gehören: der neue EEVDF-Task-Scheduler; ein Schattenstapelmechanismus zum Schutz vor Exploits; Unterstützung von fs-verity in OverlayFS; Implementierung von Quoten und xattr in tmpfs; Vorbereitung von online fsck in XFS; verstärkte Überwachung des Exports von „GPL-only“-Symbolen; Unterstützung von Netzwerksockets in io_uring; Randomisierung des Speichers in kmalloc(); ReiserFS als veraltet erklärt; in Nouveau wurden Primitive für den Vulkan-Treiber NVK hinzugefügt.
In die neue Version wurden 15291 Korrekturen von 2058 Entwicklern übernommen, die Patch-Größe beträgt 39 MB (die Änderungen betreffen 14844 Dateien, 553359 Codezeilen wurden hinzugefügt, 284012 Zeilen gelöscht). In der vorherigen Version gab es 14674 Korrekturen von 2016 Entwicklern, die Patch-Größe betrug 78 MB. Etwa 44 % aller Änderungen in 6.6 stehen im Zusammenhang mit Gerätetreibern, etwa 17 % betreffen Aktualisierungen von architekturspezifischem Code, 11 % betreffen den Netzwerk-Stack, 4 % die Dateisysteme und 3 % die internen Kern-Subsysteme.
Die Hauptneuerungen im Kernel 6.6:
- Speicher und Systemdienste
- Ein neuer EEVDF-Task-Scheduler (Earliest Eligible Virtual Deadline First) wurde implementiert, der den CFS (Completely Fair Scheduler) ersetzt, der seit Kernel 2.6.23 ausgeliefert wurde. Der neue Scheduler berücksichtigt bei der Auswahl des nächsten Prozesses für die Ausführung die Prozesse, die nicht genügend CPU-Ressourcen erhalten haben oder unverdient viel CPU-Zeit erhalten haben. Im erstgenannten Fall wird die Kontrolle an den Prozess übergeben, im letzteren Fall wird sie hingegen aufgeschoben. Der alte CFS-Scheduler verwendete Heuristiken und Feineinstellungen, um Prozesse, die besondere Aufmerksamkeit benötigten, zu identifizieren, während der neue Scheduler diese Prozesse klarer verfolgt und keine Feineinstellungen erfordert. Es wird angenommen, dass EEVDF dazu beitragen wird, die Latenz bei der Ausführung von Aufgaben zu reduzieren, mit denen CFS Scheduling-Probleme hatte.
- Änderungen bei der Verarbeitung interner Symbole der Kategorie „GPL-only“ wurden vorgenommen, um die Verwendung von proprietären Modulen als GPL-Schichten zur Umgehung der Zugriffsbeschränkungen auf die Kernel-Subsysteme zu erschweren, die nur Code unter der GPL-Lizenz erlauben. In der Funktion symbol_get() ist die Suche nach Symbolen, die als GPL-only gekennzeichnet sind, für proprietäre Module untersagt, und umgekehrt können GPL-Module keine von proprietären Modulen exportierten Symbole finden.
- Zusätzliche Einstellungen für Arbeitswarteschlangen (unbound workqueue) wurden hinzugefügt, um die Effizienz der Wiederverwendung des CPU-Caches in großen Systemen mit mehreren Level-3-Caches (L3) zu erhöhen. Im Kernel ist auch das Tool tools/workqueue/wq_dump.py zur Überprüfung der aktuellen Konfiguration der Arbeitswarteschlangen enthalten.
- Im io_uring-Subsystem wurde erste Unterstützung für operationale und befehlsspezifische Funktionen für Netzwerksockets hinzugefügt. Ein sysctl io_uring_disabled wurde hinzugefügt, um io_uring auf Systemebene zu deaktivieren. Zudem wurde der direkte Eingabe/Ausgabe (Direct I/O) im asynchronen Modus im io_uring erheblich beschleunigt. Die Steigerung der Durchsatzrate und die Verringerung der Latenzen bei der Durchführung von Eingabe-/Ausgabe-Operationen nach den Änderungen erreichen 37%.
- Für die PA-RISC-Architektur wurde ein JIT-Compiler für BPF implementiert.
- In die Einstellung /sys/devices/system/cpu/smt/control wurde Unterstützung für numerische Parameter hinzugefügt, die die Anzahl der verfügbaren Threads für jeden CPU-Kern festlegen (zuvor wurden nur die Werte „on“ und „off“ zur Aktivierung bzw. Deaktivierung der Unterstützung für symmetrisches Multithreading unterstützt). Diese neue Möglichkeit kann auf bestimmten PowerPC-Prozessoren verwendet werden, die den Hotplug-Modus für symmetrisches Multithreading („hotplug SMT“) unterstützen, um SMT selektiv für bestimmte Kerne während des Betriebs zu aktivieren.
- Die Übertragung von Änderungen aus dem Rust-for-Linux-Zweig, die die Verwendung der Programmiersprache Rust als zweite Sprache zur Entwicklung von Treibern und Kernel-Modulen betreffen, wurde fortgesetzt (die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den zwingenden Build-Abhängigkeiten des Kernels gehört). Es wurde auf die Verwendung der Rust-Versionen 1.71.1 und bindgen 0.65.1 umgestellt. Der Typ ‚Zeroable‘ wurde implementiert. Die prozeduralen Makros ‚paste!‘ und ‚#[derive(Zeroable)]‘ wurden hinzugefügt. Die Kompatibilität mit ‚#[pin_data]‘ wurde sichergestellt. Die Initialisierungsfunktionen ‚{,pin_}init_array_from_fn()‘ und die Methode ‚{,pin_}chain‘ wurden hinzugefügt. Die Funktionen des Moduls ‚types‘ wurden erweitert. Im Unit-Test-Framework kunit wurde die Möglichkeit hinzugefügt, Tests aus der Rust-Dokumentation auszuführen.
- Ein neues Subsystem „eventfs“ wurde hinzugefügt, das den Speicherverbrauch im Trace-System erheblich senkt, da es überflüssige Strukturen eliminiert, die zur Darstellung von Trace-Punkten im Dateisystem verwendet werden. Früher wurden solche Strukturen für alle Trace-Punkte erstellt, unabhängig von deren Nutzung. Mit Hilfe von eventfs können solche Strukturen dynamisch nur bei Bedarf erstellt werden.
- Die Funktionen des Tools perf wurden erweitert.
- Im Datei /proc/pid/smaps wurden Informationen für die Diagnose der Effizienz des Mechanismus zur Zusammenführung identischer Speicherseiten (KSM, Kernel Samepage Merging) hinzugefügt.
- Die API Frontswap wurde entfernt, die es ermöglicht, einen Swapbereich im nicht direkt adressierbaren Speicher zu platzieren, der keine operativen Informationen über den verfügbaren Speicherplatz bietet. Diese API wurde nur in zswap verwendet, daher wurde beschlossen, diese Funktionalität direkt in zswap zu nutzen und überflüssige Schichten zu eliminieren.
- Für die Architektur RISC-V wurde die Unterstützung für den Zugriff auf Performance-Zähler aus dem Benutzerspeicher und die Möglichkeit hinzugefügt, einen Kernel-Dump nach einem Fehler im Bereich über 4 GB abzulegen.
- Erste Unterstützung für die ARM SME (Scalable Matrix Extension) Instruktionen wurde hinzugefügt.
- Die Möglichkeit zur Verwendung von Debugging-Tools wie KDB, KGDB, kcov, KFENCE und KASAN auf Systemen mit der Architektur LoongArch wurde realisiert.
- Die Unterstützung von Dateien für Kernel-Tests im kontinuierlichen Integrationssystem GitLab wurde hinzugefügt, das bei der Entwicklung von Grafiktreibern verwendet wird.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Das OverlayFS-Dateisystem hat die Unterstützung für die Speicherung von fs-verity-Hashes im erweiterten Attribut (xattr) overlay.verity hinzugefügt, was zur Überprüfung der Integrität und Authentizität von Dateien in den unteren Schichten von OverlayFS mithilfe von kryptografischen Hashes und Schlüsseln verwendet werden kann. Damit sind in OverlayFS nun alle Änderungen enthalten, die für das Composefs-Projekt erforderlich sind, um als Erweiterung über dem OverlayFS und EROFS zu arbeiten.
- Im XFS-Dateisystem wurde die Vorbereitung für die Implementierung der Möglichkeit zur Verwendung des fsck-Tools zur Überprüfung und Behebung von entdeckten Problemen im Online-Modus, ohne die Dateisystempartition abzutrennen, abgeschlossen. Darüber hinaus wurde im XFS die Möglichkeit implementiert, große Folios im Seiten-Cache zu verwenden, und es wurden einige damit verbundene Optimierungen hinzugefügt, die die Leistung für bestimmte Lastarten deutlich steigerten.
- Das tmpfs-Dateisystem hat die Unterstützung für benutzerdefinierte erweiterte Attribute (user xattrs), direkten Eingabe/Ausgabe und benutzer- und gruppenbezogene Quoten hinzugefügt. Die Offsets für Verzeichnisse wurden stabilisiert, wodurch Probleme mit dem Export von tmpfs über NFS gelöst wurden.
- Im Mount-Management-API wurde zur Erhöhung der Sicherheit das Flag FSCONFIG_CMD_CREATE_EXCL hinzugefügt, das die gemeinsame Nutzung des Superblocks an mehreren Mount-Punkten einschränkt (es verhindert, dass eine Partition an mehreren Mount-Punkten angebracht wird). Im Mount-Toolkit wurde die Option „—exclusive“ zur Aktivierung dieses Flags angeboten.
- Im VFS-Subsystem wurde die Unterstützung für die dynamische Änderung der Zugriffs- und Änderungszeiten (atime, mtime) hinzugefügt. Zuvor wurden die Zeitangaben mit einer gewissen Verzögerung reflektiert, was die Verfolgung der Aktualität von Daten im Cache in Systemen wie NFS erschwerte (aufgrund der Verzögerung bei der Feststellung von Änderungen in einer Datei konnte das System fälschlicherweise annehmen, dass die Daten im Cache aktuell sind). Diese neue Funktion steht für Btrfs, Ext4, tmpfs und XFS zur Verfügung.
- Im Btrfs wurde der integrierte Mechanismus zur Überprüfung der Integrität, der während des Builds über den Parameter BTRFS_FS_CHECK_INTEGRITY aktiviert wird, als veraltet erklärt. Dieser Mechanismus wird nicht mehr unterstützt, nicht mehr getestet und erzeugt zusätzliche Belastung für CPU und Speicher. Darüber hinaus wurde die Leistung des neuen Integritätsprüfcodes (scrub) im Btrfs optimiert.
- Im Ext4-Dateisystem wurden periodische Überprüfungen zur Aktualisierung des Superblocks hinzugefügt und die Speicherzuweisungsoperationen beim Anhängen an das Ende einer Datei beschleunigt.
- Im FUSE-Subsystem wurde Unterstützung für das Attribut btime („Geburtszeit“) hinzugefügt, das den Zeitpunkt der Erstellung von Inodes definiert.
- Die Änderung der Berechtigungen für symbolische Links ist untersagt.
- Der Systemaufruf fchmodat2() wurde hinzugefügt, der sich vom Systemaufruf fchmodat() durch ein zusätzliches Argument zur Angabe von Flags unterscheidet. Aktuell unterstützen die Flags nur AT_SYMLINK_NOFOLLOW und AT_EMPTY_PATH, die es ermöglichen, im libc-Funktion fchmodat() das Dereferenzieren von symbolischen Links zu verbieten und die Verwendung eines Dateideskriptors bei Angabe eines leeren Pfades zu ermöglichen.
- Im EROFS-Dateisystem (Extendable Read-Only File System), das für die Verwendung auf nur-Lese-Partitionen vorgesehen ist, wurde Unterstützung für den Kompressionsalgorithmus Deflate hinzugefügt. Zur Beschleunigung der Suche nach erweiterten Attributen wird eine probabilistische Struktur, der Bloom Filter, eingesetzt.
- Die Konfiguration CONFIG_BUFFER_HEAD wurde hinzugefügt, die es ermöglicht, den Kernel ohne die Verwendung der Struktur buffer_head zu kompilieren. Bei der Kompilierung ohne buffer_head können Blockgeräte und einige Dateisysteme wie xfs, btrfs, cramfs, erofs und squashfs verwendet werden.
- Im Blockgerätetreiber ublk, der es ermöglicht, spezifische Logik in den Benutzermodus zu verlagern, wurde Unterstützung für zonierte Speichergeräte hinzugefügt (Trennung in Zonen von Blockgruppen oder Sektoren, in denen nur sequenzielles Hinzufügen von Daten mit einer vollständigen Aktualisierung aller Blockgruppen zulässig ist).
- Die Implementierung des Dateisystems ReiserFS wurde aus der Kategorie der unterstützten Dateisysteme in die der obsoleten Dateisysteme (Obsolete) überführt. Die Unterstützung von ReiserFS wird für 2025 eingestellt. Als Grund für die Einstufung von ReiserFS als obsolet wird die Stagnation bei der Wartung dieses Dateisystems, das ungelöste Problem des Jahres 2038, das Fehlen von Möglichkeiten zur Gewährleistung der Fehlertoleranz und der Wunsch, den Wartungsaufwand für allgemeine Änderungen, die mit der Unterstützung des neuen API für das Einhängen, iomap und Folios verbunden sind, zu reduzieren, genannt.
- Im NFS-Server wurde ein Mechanismus zur Delegation von Schreiboperationen für NFSv4 implementiert, der die Effizienz des Schreibcachings für Dateien zur Reduzierung des Traffics verbessert. Unterstützung für die in NFS 4.2 definierte Operation READ_PLUS wurde aktiviert.
- Der Ceph-Dateisystem hat Unterstützung für fscrypt hinzugefügt.
- Virtualisierung und Sicherheit
- Eine Implementierung des Shadow Stack-Mechanismus wurde hinzugefügt, der die Ausführung vieler Exploits blockiert, indem die Hardwarefähigkeiten von Intel-Prozessoren zum Schutz vor der Überschreibung der Rücksprungadresse aus einer Funktion im Falle eines Bufferüberlaufs im Stack genutzt werden. Der Schutzmechanismus besteht darin, dass nach der Übergabe der Kontrolle an die Funktion die Rücksprungadresse nicht nur im normalen Stack, sondern auch in einem separaten „Shadow“-Stack vom Prozessor gespeichert wird, der direkt nicht verändert werden kann. Vor dem Verlassen der Funktion wird die Rücksprungadresse aus dem Shadow-Stack abgerufen und mit der Rücksprungadresse aus dem Hauptstack verglichen. Eine Nichtübereinstimmung der Adressen führt zur Erzeugung einer Ausnahme, die Situationen blockiert, in denen es einem Exploit gelungen ist, die Adresse im Hauptstack zu überschreiben. Der Hardware-Shadow-Stack wird nur in 64-Bit-Bauformen unterstützt, während in 32-Bit-Bauformen eine softwaremäßige Emulation verwendet wird.
- Unterstützung für die Kompilierung mit dem Clang-Compiler im aktiven CFI-Schutzmodus (Control Flow Integrity), der Verletzungen des normalen Ausführungsablaufs aufgrund von Exploits, die in der gespeicherten Funktion Pointer im Speicher Veränderungen vornehmen, blockiert, wurde hinzugefügt.
- Für die RISC-V-Architektur wurde die Randomisierung der Kernelplatzierung im Speicher beim Booten aktiviert.
- Der Systemaufruf seccomp() hat das Flag SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP erhalten, das die Verarbeitung von Ereignissen aus überwachten Prozessen im synchronen Modus ermöglicht, um die Effizienz des Scheduling zu verbessern.
- In der Funktion kmalloc() wird die Randomisierung von Slab-Caches gewährleistet, die die Ausnutzung von Schwachstellen im Kern erschwert.
- Die Optionen im Zusammenhang mit der Aktivierung des SELinux-Sicherheitskontrollsystems wurden dahingehend geändert, dass die Erwähnung der National Security Agency (NSA) entfernt wurde. Da das Projekt seit 20 Jahren von der Gemeinschaft unterstützt wird und von unabhängigen Maintainers betreut wird, wurde beschlossen, in Kommentaren und Dokumentationen in Kconfig den Namen „SELinux“ anstelle von „NSA SELinux“ zu verwenden (zum Beispiel wurde die Erklärung zu den Build-Optionen SECURITY_SELINUX von „NSA SELinux Support“ in „SELinux Support“ geändert).
- Der Systemaufruf userfaultfd() hat die Operation UFFDIO_POISON erhalten, die es ermöglicht, Speicherseiten als „vergiftet“ (poisoned) zu kennzeichnen, was für die Übertragung beschädigter Speicherseiten bei der Migration verwendet werden kann. virtuelle Maschinen von einem System zu einem anderen.
- Im VFIO-Subsystem wurde eine neue symbolische Schnittstelle (/dev/vfio/devices/vfioX) zur Verwaltung von VFIO-Geräten hinzugefügt, die es dem Benutzer ermöglicht, eine Datei mit einem Gerät direkt zu öffnen, ohne den veralteten Gruppeninterface /dev/vfio/$groupID zu verwenden.
- Im Server Die Unterstützung veralteter Kerberos-Verschlüsselungstypen, die die Algorithmen DES und 3DES verwenden, wurde für NFS eingestellt.
- Bei der Ausführung in einer Hyper-V-Hypervisor-Umgebung wurde die Unterstützung für Gäste hinzugefügt, die durch AMD SEV-SNP (Secure Nested Paging) und Intel TDX (Trusted Domain Extensions) geschützt sind.
- Beim Bauen des Kernels im Modus 'W=1' sind in der Standard-Compilerkonfiguration die Warnungen '-Wformat-overflow', '-Wformat-truncation', '-Wstringop-overflow' und '-Wrestrict' aktiviert. Für alle Builds ist die Warnung '-Wenum-conversion' aktiviert.
- Netzwerksubsystem
- Die Implementierung der AF_XDP (eXpress Data Path) Adressfamilie wurde um die Möglichkeit erweitert, Pakete zu verarbeiten, die in mehreren Puffern gespeichert sind (zum Beispiel kann ein Puffer den Paketkopf und ein anderer die Daten enthalten, oder in einer Kette von mehreren Puffern können große Jumbo-Ethernet-Frames platziert werden). Programme, die AF_XDP-Sockets verwenden, können jetzt Pakete sofort aus mehreren Puffern empfangen und senden.
- Im BPF-Subsystem wurde die Unterstützung für die Defragmentierung von IPv4- und IPv6-Paketen sowie die Möglichkeit zur Filterung von fragmentierten Paketen hinzugefügt.
- BPF hat einen neuen Handler update_socket_protocol hinzugefügt, der es BPF-Programmen ermöglicht, das angeforderte Protokoll für neue Sockets zu ändern. Beispielsweise kann ein BPF-Programm das TCP-Protokoll transparent durch MPTCP (Multipath TCP) ersetzen, um den Anwendungsverkehr zu optimieren. Außerdem wurde die Unterstützung für die Verwaltung der Paketweiterleitung über verschiedene Ströme in MPTCP hinzugefügt.
- Der experimentelle Status des ksmbd-Moduls, das eine funktionsfähige Implementierung eines Dateiserver auf Kernel-Ebene auf Basis des SMB3-Protokolls bietet, wurde aufgehoben. Unterstützung für Compound-Lesevorgänge (Read Compound-Anfragen) wurde hinzugefügt.
- Ausrüstung
- Im DRM-Subsystem (Direct Rendering Manager) wurden Änderungen vorgenommen, die für die effektive Zusammenarbeit des offenen NVK-Treibers mit der Vulkan-Grafik-API-Implementierung für NVIDIA-Grafikkarten erforderlich sind. Der DRM-Treiber Nouveau war ursprünglich auf die Implementierung von OpenGL ausgelegt, weshalb ihm die notwendigen Primitives für die effektive Funktionsweise von Vulkan-Treibern fehlen, wie etwa die Unterstützung synchronisierter Objekte und das Management des virtuellen Adressraums.
- Im AMDGPU-Treiber wurde Unterstützung für SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 und GFX 9.4.3 implementiert. Der Code zum Laden der PSP-Firmware (Platform Security Processor) wurde überarbeitet. Die Unterstützung der adaptiven Synchronisationstechnologie FreeSync wurde erweitert (Unterstützung für Freesync Panel Replay V2 hinzugefügt).
- Im i915-Treiber wird die Unterstützung für Intel Meteor Lake-Chips fortgeführt. Die Unterstützung für die HDCP-Technologie (High-bandwidth Digital Content Protection) wurde verbessert. Der Code für die Interaktion mit dem Display wurde überarbeitet.
- Die Optionen zum Deaktivieren des Ladens von Mikrokode im Build-Schritt wurden aus Kconfig entfernt - MICROCODE_INTEL und MICROCODE_AMD. Der Kernel wird jetzt immer mit dem Mikrokode-Ladecode für x86-Systeme kompiliert, jedoch kann das eigentliche Laden des Mikrokodes deaktiviert werden, indem der Kernel-Parameter 'dis_ucode_ldr' angegeben wird.
- Der Audio-Subsystem wurde die Möglichkeit hinzugefügt, Audio-Geräte zu verwalten, die über das IIO (Industrial I/O) Subsystem angeschlossen sind.
- Unterstützung für die Audio-Schnittstellen Intel LunarLake, Intel ArrowLake und AMD ACP5x, für die Codec Cirrus Logic CS42L43, Realtek RT1017 und TI TAS2781 sowie für die Verstärker Cirrus Logic CS35L56 und winic aw88261 hinzugefügt. Unterstützung für ASoC AMD Van Gogh wurde hinzugefügt.
- Ein USB MIDI 2.0 Gadget-Treiber wurde hinzugefügt, der die USB MIDI 2.0-Schnittstelle emuliert und mit dem ALSA UMP rawmidi-Gerät verbunden ist.
- Unterstützung für die Ethernet-Controller Broadcom ASP 2.0 und Marvell 88Q2XXX wurde hinzugefügt.
- Unterstützung für die Bildschirme Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 und EDT ET028013DMA, Display-Controller von Loongson und Touchscreen-Controller von Azoteq IQS7222D/IQS7210A/7211A wurde hinzugefügt.
- Unterstützung für ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018 und AN400 (Amlogic T7) wurde hinzugefügt.
- Unterstützung für ARM-Plattformen wie Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3 und Radxa ROCK 4SE wurde hinzugefügt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation eine vollständig freie Kernel-Version 6.6 - Linux-libre 6.6-gnu - erstellt, die von Firmware- und Treiberelementen bereinigt wurde, die nichtfreie Komponenten oder Codeabschnitte enthalten, deren Nutzung durch den Hersteller eingeschränkt ist. In der Version 6.6 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen aktualisiert, beispielsweise in den Treibern für TI Gigabit RU Ethernet, MediaTek 792x WiFi, Cirrus Logic CS42L43 MFD, CS35L56 HD-Audio und aw88261 SoC. Namen von Blobs in DTS-Dateien für die Architektur Aarch64 wurden bereinigt. Blobs wurden in neuen IVPU-Treibern, in Bluetooth-Treibern, im Treiber für Touchscreens und im Encoder/Decoder Qualcomm Venus V4L2 entfernt.
Quelle: opennet.ru
