Release des Linux-Kernels 6.14

Nach zwei Monaten Entwicklung hat Linus Torvalds den Linux-Kernel 6.14 veröffentlicht. Zu den bemerkenswertesten Änderungen gehören: der ntsync-Treiber mit Synchronisierungsprimitiven für Windows NT, die Optimierung der Lastenverteilung für Leseoperationen in Btrfs RAID1, Unterstützung für reflink in XFS im Realtime-Modus, die Möglichkeit für nicht zwischenspeicherbaren, gepufferten I/O, dmem cgroup zur Begrenzung des GPU-Speichers, der Einsatz von io_uring in FUSE, die Delegierung von Attributen in NFS, Unterstützung für atomare Schreibvorgänge im Device Mapper, Beschleunigung von symbolischen Links, Verwaltung der Ausführbarkeit von Skripten sowie Unterstützung für Qualcomm Snapdragon 8 Elite Chips und einen Treiber für AMD NPU.

In die neue Version wurden 12115 Korrekturen von 1984 Entwicklern aufgenommen, die Patch-Größe beträgt 39 MB (die Änderungen beziehen sich auf 10170 Dateien, 531586 Codezeilen wurden hinzugefügt, 235999 Codezeilen entfernt). In der vorherigen Version gab es 14172 Korrekturen von 2086 Entwicklern, die Patch-Größe betrug 46 MB. Rund 41% aller in 6.14 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 13% der Änderungen stehen im Zusammenhang mit der Aktualisierung von architektur-spezifischem Code, 14% beziehen sich auf den Netzwerk-Stack, 7% auf Dateisysteme und 4% auf interne Kernsubsysteme.

Wesentliche Neuerungen im Kern 6.14:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Das Dateisystem Btrfs unterstützt jetzt neue Methoden zur Lastenverteilung der Lesevorgänge zwischen den Festplatten in einem RAID1-Verbund. Neben der bisherigen Lastverteilung basierend auf Prozess-IDs (pid) bietet die neue Version drei neue Lastverteilungsmodi an: „rotation“ (gleichmäßige Lastverteilung über alle Festplatten, standardmäßig aktiviert); „latency“ (Lastverteilung unter Berücksichtigung von Latenzen, nützlich bei Fehlern oder instabilen Festplatten); „devid“ (manuelle Steuerung). Um den Lastverteilungsmodus zu ändern, wurde die Schnittstelle „/sys/fs/btrfs//read_policy“ hinzugefügt. Zu den weiteren Änderungen in Btrfs gehört die Implementierung von ioctl FS_IOC_READ_VERITY_METADATA.
    • Es wurde ein Modus für nicht zwischenspeichernde gepufferte Ein-/Ausgabe hinzugefügt, bei dem Daten aus dem Seitenspeicher sofort gelöscht werden, nachdem die Lese- oder Schreibvorgänge abgeschlossen sind. Diese Änderung kann nützlich sein, wenn sehr schnelle Speichergeräte verwendet werden, bei denen das Zwischenspeichern von Vorgängen im RAM überflüssig ist. Der neue Modus ermöglicht es, überflüssigen Speicherverbrauch durch den Seitenspeicher zu vermeiden, ohne auf die komplizierte API für direkte Ein-/Ausgabe (Direct I/O) zurückgreifen zu müssen.
    • In fsnotify, dem Mechanismus zur Verfolgung von Änderungen im Dateisystem, wurde ein neues Ereignis FS_PRE_ACCESS hinzugefügt, das in der Phase vor dem Zugriff auf den Inhalt einer Datei generiert wird. Dieses Ereignis wird synchron verarbeitet, das heißt, der Kernel sendet das Ereignis und wartet auf eine Antwort. Wenn die Antwort eingeht, wird die Operation durchgeführt, und bei einem Fehler wird ein Fehlercode an den Benutzerraum zurückgegeben. Mithilfe von FS_PRE_ACCESS kann ein Prozess im Benutzerraum zum Beispiel das Befüllen einer Datei organisieren, sobald die Daten in einem langsamen Speicher verfügbar sind.
    • In das FUSE-Subsystem, das die Implementierung von Dateisystemen im Benutzerspeicher ermöglicht, wurde die Unterstützung für den Datenaustausch zwischen dem Kernel und dem Benutzerraum-Handler unter Verwendung des io_uring-Ein- und Ausgabemechanismus eingeführt. Diese Änderung verbessert die FUSE-Leistung, indem sie den Kontextwechsel zwischen Kernel und Benutzerraum reduziert.
    • Im XFS-Dateisystem wurde die Möglichkeit zur Verwendung von Rückwärtsspeicherabbildung (rmap, reverse-mapping) im Modus mit vorhersehbaren Verzögerungen („realtime device“) hinzugefügt. Die Rückwärtsspeicherabbildung ermöglicht die Feststellung, welcher Dateispeicherblock für die Speicherung einer bestimmten Datei verwendet wird. Durch rmap unterstützt XFS im Realtime-Modus die reflink-Operation, die das Erstellen von Datei-Kopien durch Klonen von Dateimetadaten und Erstellen von Links zu bereits vorhandenen Daten ohne deren tatsächliche Kopie ermöglicht.
    • Im VFS wurde die Zwischenspeicherung der Größe von symbolischen Links implementiert, was eine Beschleunigung der Ausführung der readlink-Operation um 1,5 % ermöglichte (im Test mit /initrd.img in ext4). Die Zwischenspeicherung ist in den Dateisystemen ext4 und tmpfs aktiviert.
    • In der Implementierung von NFSv4.2 wurde die Unterstützung für das Delegieren von Dateiattributen hinzugefügt, wodurch solche Attribute wie die Änderungszeit (mtime) auf der Seite des NFS-Clients verwaltet werden können, ohne dass Änderungen auf dem Server zurückgesetzt werden müssen. Der NFS-Protokoll wurde auch verbessert, um den 'LOCALIO'-Modus zu unterstützen, der es ermöglicht festzustellen, ob der NFS-Client und der Server auf demselben Host laufen, um entsprechende Optimierungen wie die Verwendung von Direct I/O durch den Client zu aktivieren.
    • Die Leseleistung in den Dateisystemen NETFS, CIFS und AFS (Andrew File System) wurde verbessert.
    • Im Squashfs wurde der Modus für das direkte Laden von Blöcken in den Seitencache (SQUASHFS_FILE_DIRECT) eingeführt, wodurch ein separater read_page-Cache überflüssig wird. Diese Änderung hat den Speicherbedarf beim Betrieb von Squashfs reduziert.
    • Im Systemaufruf statx() wurde das FLAG STATX_DIO_READ_ALIGN implementiert, um die benötigte Ausrichtung für Leseoperationen aus einer Datei zu bestimmen.
    • Im Dateisystem Bcachefs wurde das Format der Festplattenstrukturen aktualisiert und stabilisiert. Künftige Änderungen am Format werden als optional betrachtet und in Form von Ergänzungen realisiert. Die Geschwindigkeit der Integritätsprüfung des Dateisystems wurde erheblich verbessert. Darüber hinaus wurde die Leistung im Nur-Lese-Modus für Bcachefs verbessert; Probleme, die zu Zugriffsfehlern nach der Speicherfreigabe führten, wurden behoben; Probleme mit Reflink-Zeigern in fsck wurden gelöst; und die Behandlung von Transaktionsneustarten wurde korrigiert.
    • Das Modul md-linear, das zur Zusammenführung von Blockgeräten dient, wurde zurückgebracht. Dieses Modul war zuvor als veraltet deklariert und aus dem Kernel 6.8 entfernt worden, stellte sich jedoch als nachgefragt heraus und wurde daher jetzt wiederhergestellt.
    • Die Dateisysteme F2FS und SQUASHFS wurden auf die Verwendung von Seitenfolio (page folios) umgestellt.
    • Die Dateisysteme OCFS2 und DLMFS wurden auf die Verwendung der neuen API zum Einbinden von Partitionen umgestellt.
    • Im null_blk-Treiber wurde das Attribut 'rotational' implementiert, das über configfs eingestellt wird und es ermöglicht, die Arbeit mit einem Gerät auf Basis rotierender Festplatten zu simulieren, um die Funktionen des Kernels zu testen.
    • Im Device Mapper sowie in den Modulen dm-mirror, dm-io, dm-table, dm-linear, dm-stripe und dm-raid1 wurde Unterstützung für atomare Schreibvorgänge implementiert.
  • Speicher und Systemdienste
    • Die Integration des ntsync-Treibers in den Kernel ist abgeschlossen. Dieser Treiber stellt das virtuelle Gerät \/dev\/ntsync sowie eine Reihe von Synchronisationsprimitive bereit, die im Windows NT-Kernel verwendet werden. Die Implementierung solcher Primitive im Kernel verbessert die Leistung von Windows-Spielen, die mit Wine ausgeführt werden, erheblich. Die Leistungssteigerung wird durch die Beseitigung der Overhead-Kosten erzielt, die mit der Verwendung von RPC im Benutzerspeicher verbunden sind. Die Schaffung eines separaten Kerneltreibers für Linux wird durch die Schwierigkeiten bei der korrekten Implementierung der NT-Synchronisations-API über bestehende Primitive im Kernel gerechtfertigt.
    • Ein neuer DMEM Cgroup-Controller wurde hinzugefügt, um den Speicherbereich von Geräten wie GPUs separat zu verfolgen. DMEM ermöglicht es, eigene Cgroups für verschiedene Aufgaben, die mit GPUs arbeiten, zu erstellen, sodass diese unabhängig voneinander ausgeführt werden können. Diese neue Funktion löst das Problem des erzwungenen Abschlusses von GPU-Operationen bei Erschöpfung des verfügbaren Speichers, indem der von der GPU reflektierte Speicher und der von den Treibern verwendete CPU-Speicher in separaten Cgroups erfasst werden.
    • Optimierungen wurden für die Skalierung des Cache-Wipes (Flush) des TLB (Translation Lookaside Buffer) vorgenommen, der zur Beschleunigung der Umwandlung von virtuellen Adressen in physische verwendet wird. Die vorgenommenen Optimierungen bestehen in der verzögerten Aktualisierung einiger Datenstrukturen während des Kontextwechsels, was die Leistung bei bestimmten Tests erhöht.
    • Die Leistung des MGLRU (Multi-Generational LRU)-Mechanismus wurde verbessert, der zur Bestimmung verwendet wird, welche Seiten im Speicher genutzt werden und welche in den Swap-Bereich ausgelagert werden können.
    • Die Übertragung von Änderungen aus dem Rust-for-Linux-Zweig, die den Einsatz von Rust als sekundäre Sprache für die Entwicklung von Treibern und Kernelmodulen betreffen, muss fortgesetzt werden (die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den erforderlichen Build-Abhängigkeiten des Kernels gehört). Es wurde die Möglichkeit geschaffen, im Kernel-Code das Makro „derive(CoercePointee)“ zu verwenden, was die Verwendung von Smart Pointern mit Trait-Objekten ermöglicht. In den Kernel wurden Rust-Bindings für PCI, Plattformen, Open Firmware, Zeichengeräte und einige I/O-Funktionen integriert. Greg Kroah-Hartman, der für die Unterstützung des stabilen Linux-Kernel-Zweigs verantwortlich ist, hat den aktuellen Stand als „fast bereit für das Schreiben eines echten Treibers in Rust“ beschrieben.
    • In den Build-Szenarien wurde neuer Code zur Generierung von Debug-Symbolversionen für geladene Module vorgeschlagen, der jetzt Informationen aus DWARF-Debugging-Protokollen verwendet, anstatt den Quellcode direkt zu analysieren. Diese Änderung ermöglicht die Verwendung von Versionskontrolle für Debug-Symbole in Modulen, die in Rust geschrieben sind. Die alte Implementierung bleibt ebenfalls im Kern erhalten, und die Auswahl des Generators erfolgt auf der Ebene der Build-Optionen.
    • Für die PowerPC-Architektur wurde die Unterstützung für den Modus der latenzverzögerten Aufgabenverdrängung (PREEMPT_LAZY, lazy preemption) realisiert, der dem Modus der vollständigen Verdrängung („full preemption“) für Echtzeitanwendungen (RR/FIFO/DEADLINE) entspricht, jedoch die Verdrängung normaler Aufgaben (SCHED_NORMAL) bis zur Tick-Grenze verzögert.
    • In das Leistung-Profilierungssystem „perf“ wurde die Unterstützung für Energieverbrauchszähler von AMD-Prozessoren hinzugefügt. Es wurde die Möglichkeit implementiert, auf Systemen mit bis zu 2048 CPU-Kernen zu arbeiten.
    • Es wurde die Möglichkeit eingeführt, den sysctl-Parameter pid_max mit Prozess-ID-Namensräumen (ID-Namespace) zu verwenden. Der Parameter pid_max dient dazu, den maximalen Wert der Prozess-IDs (PID) zu begrenzen und kann nun dazu verwendet werden, die maximal mögliche Anzahl von Prozessen, die in dem angegebenen Namensraum gestartet werden können, zu beschränken. Die Verarbeitung des Parameters erfolgt hierarchisch, d.h. Einschränkungen in den äußeren Namensräumen gelten auch für die verschachtelten Namensräume.
    • Beim Aufruf des Systemaufrufs execveat zum Starten eines Prozesses wird in dem Verzeichnis /proc nun der Name der ausgeführten Datei angezeigt, anstelle der Nummer des Dateideskriptors.
    • Im Quellcode des Kernels (im Verzeichnis samples/vfs) wurde das Hilfsprogramm mountinfo hinzugefügt, das die Verwendung der Systemaufrufe statmount() und listmount() demonstriert.
    • Im BPF-Unterbereich wurden die neuen Funktionen bpf_local_irq_save() und bpf_local_irq_restore() vorgeschlagen, um Interrupts auf der lokalen CPU vorübergehend zu deaktivieren. Diese Funktionen können verwendet werden, um Strukturen zu implementieren, deren Verarbeitung nicht durch Interrupts unterbrochen wird.
    • Im Systemaufruf madvise() sorgt die Verwendung der Flags MADV_DONTNEED und MADV_FREE für die Freigabe der Seitentabellen des Arbeitsspeichers, die mit dem freizugebenden Adressbereich verknüpft sind, da in bestimmten Situationen leere Speicherseiten beträchtlichen Speicherplatz beanspruchen können.
    • Für die OpenRISC-Architektur wurde die Unterstützung für einen Mechanismus von wiederholbaren Sequenzen (rseq, restartable sequences) implementiert, der für die schnelle atomare Ausführung von Operationen vorgesehen ist, die im Falle einer Unterbrechung durch einen anderen Thread zurückgesetzt werden und die Ausführung erneut versucht wird.
    • Der Code wurde reorganisiert, und die Algorithmen CRC32 und CRC-T10DIF werden nun nicht mehr über die Kryptografie-Subsystem aufgerufen, sondern direkt über die Bibliotheksschnittstelle. Diese Änderung hat den Code vereinfacht und die Effizienz erhöht.
    • In das asynchrone E/A-System io_uring wurde eine Schnittstelle zur Übertragung zusätzlicher Metadaten zur Integrität bei Lese- und Schreiboperationen integriert.
  • Virtualisierung und Sicherheit
    • Im Systemaufruf execveat wurde das Flag AT_EXECVE_CHECK hinzugefügt, das eine Überprüfung der Ausführbarkeit einer Datei ermöglicht, ohne sie tatsächlich zu starten, jedoch unter Berücksichtigung von Sicherheitsrichtlinien, Zugriffsrechten und aktiven LSM-Modulen. Um die Verwendung in Verbindung mit AT_EXECVE_CHECK zu unterstützen, wurden die Securebit-Flags SECBIT_EXEC_RESTRICT_FILE und SECBIT_EXEC_DENY_INTERACTIVE vorgeschlagen, die zur Einschränkung der Ausführung von Dateien mit Skripten in interpretierenden Programmiersprachen verwendet werden können. Das Flag SECBIT_EXEC_RESTRICT_FILE verpflichtet Compiler und Interpreter, die Option AT_EXECVE_CHECK zur Überprüfung der Ausführbarkeit zu nutzen, während das Flag SECBIT_EXEC_DENY_INTERACTIVE die Verarbeitung interaktiver Befehle untersagt. Die Grundidee der Änderung besteht darin, Sicherheitsrichtlinien nicht nur auf traditionelle ausführbare Dateien anzuwenden, sondern auch auf Textdateien mit Skripten, die über den Interpreter gestartet werden können (d.h. das Verbot der Ausführung kann nicht nur beim Start von „./script.sh“ umgesetzt werden, sondern auch bei der Ausführung in der Form „sh script.sh“).
    • Auf x86-Systemen wird die Unterstützung für geschützte Zeitstempel für Gastbetriebssysteme bereitgestellt, die es nicht erlauben, die Systemuhren des Gastbetriebssystems aus der Hostumgebung zu ändern. Diese Möglichkeit basiert auf dem Mechanismus AMD SEV (Secure Encrypted Virtualization), der in Virtualisierungssystemen zum Schutz eingesetzt wird. virtuellen Maschinen gegen Eingriffe von Hypervisoren oder dem Administrator des Host-Systems.
    • Das System für mandatorischen Zugriffskontrolle SELinux hat Unterstützung für xperm-Regeln erhalten, die es ermöglichen, SELinux-Richtlinien an bestimmte ioctl()-Aufrufe oder Netlink-Nachrichten zu binden.
    • Zur Signierung von Kernelmodulen wird standardmäßig der Algorithmus SHA512 statt SHA1 verwendet.
    • In den Treibern für Gastbetriebssysteme in VirtualBox wurde die Unterstützung für die ARM64-Architektur aktiviert.
    • Im Hypervisor KVM wird die Arbeit an der Implementierung des Mechanismus Intel TDX (Trusted Domain Extensions) zur Verschlüsselung des Gastbetriebsspeichers fortgesetzt.
    • In virtio_blk wurde die Unterstützung für den Fehlerwiederherstellungsmodus hinzugefügt.
  • Netzwerksubsystem
    • In der Umsetzung des RxRPC-Protokolls wurde die Möglichkeit hinzugefügt, große UDP-Pakete zu verwenden, um die Bandbreite zu erhöhen.
    • Für TCP wurde die Unterstützung des RACK-TLP-Algorithmus zur Erkennung von Paketverlusten hinzugefügt.
    • Ein neuer sysctl-Parameter tcp_tw_reuse_delay wurde hinzugefügt, der bei der Zuordnung zum Namensraum (Network Namespace) wirkt und es ermöglicht, die Verzögerung zu bestimmen, bevor das System eine Netzwerkportnummer nach dem Schließen eines TCP-Sockets erneut verwenden kann.
    • Die Möglichkeit zur Auswahl eines Zeitgeberanbieters (PTP) zur Erstellung von Zeitstempeln auf PHY- und MAC-Ebenen wurde hinzugefügt.
    • Für IPsec wurde die Unterstützung des Mechanismus zur Aggregation und Fragmentierung von eingekapselten IP-Paketen - IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload) - implementiert.
    • Das Netzwerk-Socket-System unterstützt jetzt die Übertragung von Prioritätsinformationen (SO_PRIORITY) in Form von Steuer-Nachrichten (cmsg - control messages). Für Netzwerk-Sockets wurde die Option SO_RCVPRIORITY hinzugefügt, die in der Funktion recvmsg() die Übertragung von Prioritätsinformationen des Sockets ermöglicht.
  • Ausrüstung
    • Der Treiber amdxdna für in AMD-CPUs integrierte NPU (Neural Processing Unit) Beschleuniger auf Basis der XDNA-Architektur wurde hinzugefügt, der zur Beschleunigung von Machine-Learning-Vorgängen dient. NPU auf Basis der XDNA-Architektur ist in den Serien 7040 und 8040 der AMD Ryzen Prozessoren, in den AMD Alveo V70 Beschleunigern und in SoC AMD Versal verfügbar.
    • Der i915-Treiber hat neue GPU-IDs hinzugefügt, einen Handler für HDMI-Initialisierungsfehler implementiert und die Zuverlässigkeit des GPU-Reset-Mechanismus auf Haswell und älteren Systemen verbessert.
    • Die Entwicklung des DRM-Treibers (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur, die in Intel Arc-Grafikkarten und integrierter Grafik ab Tiger Lake verwendet wird, wurde fortgesetzt.
    • Im Nouveau-Treiber wurde die Möglichkeit zur Übertragung von GSP-RM-Protokollpuffern über debugfs hinzugefügt.
    • Im AMDGPU-Treiber wurde die Unterstützung für den DRM-Panic-Mechanismus implementiert, der eine Art 'blauen Bildschirm des Todes' bei Abstürzen anzeigt. Die Vorbereitungen zur Unterstützung der kommenden Radeon RX 9000-Grafikkartenserie auf Basis der RDNA4-Architektur wurden fortgesetzt. Die Unterstützung für DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS und ISP wurde aktualisiert.
    • Im DRM-Treiber msm (GPU Qualcomm Adreno) wurde die Unterstützung für die Qualcomm SM6150-Plattform (QCS615) hinzugefügt.
    • Im DRM-Treiber panfrost wurde die Unterstützung für die SoC MediaTek MT8188 mit GPU Mali-G57 hinzugefügt.
    • Im DRM-Treiber vc4 wurde die Unterstützung für die SoC Broadcom BCM2712 (Raspberry Pi 5) hinzugefügt.
    • Im vfio-Treiber nvgrace-gpu wurde die Unterstützung für NVIDIA Grace Blackwell 200-Chips hinzugefügt.
    • Ein Treiber für Intel THC (Touch Host Controller) ist enthalten, der für die Interaktion mit Touchscreens und Touchpads auf bestimmten Laptops verwendet wird. Unterstützung für Wacom-Geräte mit PCI-Schnittstelle hinzugefügt. Unterstützung für QH Electronics-Spielcontroller hinzugefügt.
    • Unterstützung für ARM-Plattformen, SoCs und Geräte hinzugefügt: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Unterstützung für das RISC-V-basierte SoC SpacemiT K1 hinzugefügt.
    • In der ALSA-Audiosubsystem wurden die APIs rawmidi und sequencer für MIDI 2.0 erweitert. Die API zur Auslagerung von Komprimierungsoperationen auf die Soundkarte hat Unterstützung für ASRC (Asynchronous Sample Rate Conversion) erhalten.
    • Unterstützung für Audiosysteme von Allwinner-Geräten F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 und 18i20 hinzugefügt. Unterstützung für die drahtlosen Kopfhörer SteelSeries Arctis 9 hinzugefügt.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster