Release des Linux-Kernels 6.14

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.14. Zu den bemerkenswertesten Änderungen gehören: der ntsync-Treiber mit Synchronisationsprimitiven für Windows NT, die Anpassung der Lastverteilung bei Lesevorgängen in Btrfs RAID1, Unterstützung von reflink in XFS im Realtime-Modus, die Möglichkeit von nicht-cachierbarem gepuffertem I/O, dmem cgroup zur Begrenzung des GPU-Speichers, die Nutzung von io_uring in FUSE, die Delegation von Attributen in NFS, Unterstützung für atomare Schreibvorgänge im Device Mapper, Beschleunigung von symbolischen Links, Verwaltung der Ausführungsfähigkeit von Skripten, Unterstützung für Qualcomm Snapdragon 8 Elite Chips, einen Treiber für NPU AMD.

In die neue Version wurden 12115 Fehlerbehebungen von 1984 Entwicklern aufgenommen, die Patchgröße beträgt 39 MB (die Änderungen betreffen 10170 Dateien, 531586 Codezeilen wurden hinzugefügt, 235999 Zeilen entfernt). In der vorherigen Veröffentlichung gab es 14172 Fehlerbehebungen von 2086 Entwicklern, die Patchgröße betrug 46 MB. Etwa 41 % aller in 6.14 eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 13 % auf Updates von architekturspezifischem Code, 14 % auf das Netzwerk-Stack, 7 % auf Dateisysteme und 4 % auf interne Subsysteme des Kernels.

Die wichtigsten Neuerungen im Kernel 6.14:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Im Btrfs-Dateisystem wurde die Unterstützung neuer Methoden zur Lastverteilung bei Lesevorgängen zwischen den Laufwerken im RAID1-Verbund eingeführt. Neben der bereits bestehenden Lastverteilung auf Basis von Prozess-IDs (pid) bietet die neue Version drei neue Lastverteilungsmodi an: „rotation“ (gleichmäßige Verteilung der Last auf alle Laufwerke, standardmäßig aktiviert); „latency“ (Verteilung unter Berücksichtigung von Verzögerungen, kann bei Ausfällen oder instabiler Arbeitsweise von Laufwerken nützlich sein); devid (manuelle Steuerung). Für die Änderung des Lastverteilungsmodus 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.
    • Ein Modus für nicht zwischengespeicherte Puffereingaben/-ausgaben wurde hinzugefügt, bei dem die Daten aus dem Seitencache sofort gelöscht werden, nachdem die Lese- oder Schreiboperationen abgeschlossen sind. Diese Änderung kann nützlich sein, wenn sehr schnelle Speichergeräte verwendet werden, bei denen das Zwischenspeichern von Operationen im Arbeitsspeicher überflüssig ist. Für solche Geräte ermöglicht der neue Modus, den übermäßigen Speicherverbrauch durch den Seitencache zu vermeiden, ohne auf die komplexe API für direkte Eingabe/Ausgabe (Direct I/O) zurückzugreifen.
    • Im 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. Das Ereignis wird synchron verarbeitet, d.h. der Kernel sendet das Ereignis und wartet auf eine Antwort. Wenn die Antwort eingeht, wird die Operation ausgeführt, und wenn ein Fehler auftritt, gibt der Systemaufruf einen Fehlercode an den Benutzerraum zurück. Mithilfe von FS_PRE_ACCESS kann der Prozess im Benutzerraum beispielsweise das Auffüllen der Datei entsprechend der Verfügbarkeit der Daten in einem langsamen Speicher organisieren.
    • In das FUSE-Subsystem, das die Implementierung von Dateisystemen im Benutzerraum ermöglicht, wurde die Unterstützung für den Datenaustausch zwischen dem Kernel und dem Handler im Benutzerraum unter Verwendung des Eingabe/Ausgabe-Mechanismus io_uring hinzugefügt. Diese Änderung erhöht die Leistung von FUSE, indem die Kontextwechsel zwischen Kernel und Benutzerraum reduziert werden.
    • Im Dateisystem XFS wurde die Möglichkeit der Nutzung von Reverse-Mapping (rmap) im Modus mit vorhersehbaren Latenzen („realtime device“) hinzugefügt. Mit Reverse-Mapping kann festgestellt werden, welcher Block auf dem Speichermedium für die Speicherung welcher Datei verwendet wird. Durch rmap wird im XFS für den Realtime-Modus die Unterstützung der Operation reflink realisiert, die es ermöglicht, Kopien von Dateien durch Klonen der Dateimetadaten zu erstellen und einen Link zu bereits vorhandenen Daten zu schaffen, ohne diese tatsächlich zu kopieren.
    • Im VFS wurde das Caching der Größe von symbolischen Links implementiert, was eine Beschleunigung von 1,5% bei der Ausführung der Operation readlink (im Test mit /initrd.img in ext4) ermöglichte. Das Caching ist im Dateisystem ext4 und tmpfs aktiviert.
    • In der Implementierung von NFSv4.2 wurde die Unterstützung für die Delegation von Dateiattributen hinzugefügt, die es ermöglicht, solche Dateiattribute wie die Änderungszeit (mtime) auf der Seite des NFS-Clients zu verwalten, ohne Änderungen auf den Server zurücksetzen zu müssen. Zudem wurde die Unterstützung für das Protokoll „LOCALIO“ verbessert, das es ermöglicht festzustellen, ob sich der NFS-Client und der Server auf demselben Host befinden, um entsprechende Optimierungen wie die Nutzung von Direct I/O durch den Client zu aktivieren.
    • Die Leistung der Leseoperationen in den Dateisystemen NETFS, CIFS und AFS (Andrew File System) wurde verbessert.
    • In Squashfs wurde der Modus für das direkte Laden von Blöcken in den Seitencache (SQUASHFS_FILE_DIRECT) integriert, der es ermöglicht, auf einen separaten Cache für read_page zu verzichten. Diese Änderung hat die Menge an Speicher reduziert, die Squashfs während des Betriebs benötigt.
    • Im Systemaufruf statx() wurde das Flag STATX_DIO_READ_ALIGN implementiert, um die erforderliche Ausrichtung für Lesevorgänge aus einer Datei zu bestimmen.
    • Im Dateisystem Bcachefs wurde das Format der Datenträgerstrukturen aktualisiert und stabilisiert. Zukünftige Änderungen am Format werden als optional betrachtet und sollen in Form von ergänzenden Optionen umgesetzt werden. Die Geschwindigkeit der Integritätsprüfung des FS wurde erheblich erhöht. Darüber hinaus wurde die Leistung von Bcachefs im Nur-Lese-Modus verbessert; Probleme, die zu Speicherzugriffen nach der Freigabe (use after free) führten, wurden behoben; es wurden Probleme mit reflink-Pointern in fsck gelöst; die Verarbeitung von Transaktionsneustarts wurde korrigiert.
    • Das Modul md-linear, das zur Zusammenführung von Blockgeräten dient, wurde zurückgebracht. Dieses Modul war zuvor als veraltet eingestuft und aus dem Kernel 6.8 entfernt worden, hat sich jedoch als gefragt herausgestellt und wurde daher nun wiederhergestellt.
    • Die Dateisysteme F2FS und SQUASHFS wurden auf die Verwendung von Seitenfolien (page folios) umgestellt.
    • Die Dateisysteme OCFS2 und DLMFS wurden auf die Verwendung der neuen API für das Einbinden von Partitionen umgestellt.
    • Im Treiber null_blk wurde das Attribut „rotational“ implementiert, das über configfs gesetzt wird und ermöglicht, die Arbeit mit einem Gerät auf Basis von rotierenden Platten zu simulieren, um Tests der Kernel-Funktionen zu erleichtern.
    • Im Device Mapper und in den Modulen dm-mirror, dm-io, dm-table, dm-linear, dm-stripe und dm-raid1 wurde die Unterstützung für atomare Schreibvorgänge implementiert.
  • Speicher und Systemdienste
    • Die Integration in den ntsync-Treiberkern, der das Zeichenverfahren /dev/ntsync und eine Reihe von Synchronisierungsprimitive bietet, die im Windows NT-Kernel verwendet werden, wurde abgeschlossen. Die Implementierung solcher Primitive auf Kernel-Ebene ermöglicht eine signifikante Leistungssteigerung bei Windows-Spielen, die mit Wine ausgeführt werden. Dieser Leistungszuwachs wird durch den Verzicht auf Overhead erreicht, der mit der Verwendung von RPC im Benutzerspeicher verbunden ist. Die Schaffung eines separaten Treibers für den Linux-Kernel erklärt sich durch die Schwierigkeiten bei der korrekten Implementierung der NT-Synchronisierungs-API über bestehenden Primitiven im Kernel.
    • Ein neuer DMEM cgroup-Controller wurde hinzugefügt, um separate Bereiche des Speichers von Geräten wie GPUs zu erfassen. DMEM ermöglicht die Erstellung separater cgroups für verschiedene Aufgaben, die mit GPUs arbeiten, sodass sie unabhängig voneinander ausgeführt werden können. Diese neue Funktion löst das Problem des erzwungenen Abbruchs von GPU-Vorgängen bei Erschöpfung des verfügbaren Speichers, da der Speicher, der von der GPU und von den Treibern genutzter CPU-Spiele, in separaten cgroups berücksichtigt wird.
    • Optimierungen für das Scaling der Cache-Flush-Operation (Translation Lookaside Buffer, TLB), das verwendet wird, um die Umwandlung von virtuellen Adressen in physische Adressen zu beschleunigen, wurden vorgenommen. Die hinzugefügten Optimierungen bestehen darin, bestimmte Datenstrukturen während des Kontextwechsels verzögert zu aktualisieren, was die Leistung bei bestimmten Tests verbessert.
    • Die Leistung des MGLRU-Mechanismus (Multi-Generational LRU), der zur Bestimmung verwendet wird, welche Speicherseiten genutzt werden und welche in den Swap-Bereich ausgelagert werden können, wurde verbessert.
    • Der Transfer von Änderungen aus dem Rust-for-Linux-Zweig, die mit der Verwendung der Programmiersprache Rust als zweiter Sprache zur Entwicklung von Treibern und Kernmodulen verbunden sind, wurde fortgesetzt (die Unterstützung von Rust ist standardmäßig deaktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels hinzugefügt wird). Es wurde die Möglichkeit angeboten, im Kernelcode das Makro „derive(CoercePointee)“ zu verwenden, das es ermöglicht, Smart Pointer mit Trait-Objekten zu nutzen. Im Kernel sind Rust-Bindings für PCI, Plattformen, Open Firmware, Zeichenendgeräte und bestimmte Ein-/Ausgabefunktionen enthalten. Greg Kroah-Hartman, der für die Unterstützung des stabilen Linux-Kernel-Zweigs verantwortlich ist, beschrieb den aktuellen Stand als „fast bereit, um einen echten Treiber in Rust zu schreiben“.
    • In den Build-Skripten wurde ein neuer Code zur Generierung von Versionen von Debug-Symbolen für ladbare Module vorgeschlagen, der jetzt Informationen aus Debug-Daten im DWARF-Format verwendet, anstatt den Quellcode direkt zu parsen. Diese Änderung ermöglicht die Anwendung der Versionierung von Debug-Symbolen für Module, die in Rust geschrieben sind. Die alte Implementierung bleibt ebenfalls im Kernel erhalten, und der Generator wird auf Ebene der Build-Optionen ausgewählt.
    • Für die PowerPC-Architektur wurde die Unterstützung für den Modus des latenten Task-Ausschlusses (PREEMPT_LAZY, lazy preemption) implementiert, der dem Modus des vollständigen Ausschlusses („full preemption“) für Echtzeitaufgaben (RR/FIFO/DEADLINE) entspricht, jedoch den Ausschluss normaler Aufgaben (SCHED_NORMAL) bis zur Tick-Grenze verzögert.
    • Im Leistungsmesssystem „perf“ wurde die Unterstützung für Energieverbrauchszähler von AMD-Prozessoren hinzugefügt. Die Möglichkeit, auf Systemen mit bis zu 2048 CPU-Kernen zu arbeiten, wurde hinzugefügt.
    • Es wurde die Möglichkeit geschaffen, den sysctl-Parameter pid_max mit den Namensräumen der Prozess-IDs (ID namespace) zu verwenden. Der Parameter pid_max dient zur Begrenzung des maximalen Wertes der Prozess-IDs (PID) und kann jetzt verwendet werden, um die maximal mögliche Anzahl an Prozessen, die im angegebenen Namensraum ausgeführt werden, zu begrenzen. Die Behandlung des Parameters erfolgt hierarchisch, d.h. die Einschränkungen in äußeren Namensräumen gelten für verschachtelte Namensräume.
    • Bei der Verwendung des Systemaufrufs execveat zur Ausführung eines Prozesses wird nun im Dateisystem /proc der Name der gestarteten Datei anstelle der Nummer des Dateideskriptor angezeigt.
    • Der Quellcode des Kernels (im Verzeichnis samples/vfs) wurde um das Dienstprogramm mountinfo erweitert, das die Verwendung der Systemaufrufe statmount() und listmount() demonstriert.
    • Im BPF-Subsystem wurden neue Funktionen bpf_local_irq_save() und bpf_local_irq_restore() eingeführt, um Unterbrechungen auf der lokalen CPU vorübergehend zu deaktivieren. Diese Funktionen können verwendet werden, um Strukturen zu implementieren, deren Bearbeitung nicht durch Unterbrechungen unterbrochen wird.
    • Im Systemaufruf madvise() wird beim Einsatz der Flags MADV_DONTNEED und MADV_FREE sichergestellt, dass die Speichertabellen, die mit dem freigegebenen Adressbereich verbunden sind, freigegeben werden, da in bestimmten Situationen leere Speicherseiten viel Speicherplatz belegen können.
    • Für die OpenRISC-Architektur wurde die Unterstützung für das Mechanismus der wiederherstellbaren Sequenzen (rseq, restartable sequences) implementiert, das für die schnelle atomare Ausführung von Operationen gedacht ist. Diese Operationen werden im Falle von Unterbrechungen durch einen anderen Thread zurückgesetzt und erneut versucht.
    • Der Code wurde reorganisiert mit der Implementierung der Algorithmen CRC32 und CRC-T10DIF, die nicht mehr mit dem Subsystem crypto kreuzen und direkt über die Bibliotheksoberfläche aufgerufen werden. Diese Änderung ermöglichte eine Vereinfachung des Codes und steigerte dessen Effizienz.
    • Im asynchronen Eingabe-/Ausgabesystem io_uring wurde eine Schnittstelle hinzugefügt, um zusätzliche Metadaten zur Integrität bei Lese- und Schreiboperationen zu übermitteln.
  • Virtualisierung und Sicherheit
    • Im Systemaufruf execveat wurde das Flag AT_EXECVE_CHECK hinzugefügt, das eine Überprüfung der Zulässigkeit der Ausführung einer Datei ohne deren tatsächlichen Start ermöglicht, jedoch unter Berücksichtigung der Sicherheitsrichtlinien, Zugriffsrechte und aktiven LSM-Module. Um in Verbindung mit AT_EXECVE_CHECK verwendet zu werden, wurden die securebit-Flags SECBIT_EXEC_RESTRICT_FILE und SECBIT_EXEC_DENY_INTERACTIVE vorgeschlagen, die verwendet werden können, um die Ausführung von Dateien mit Scripts in interpretierten Programmiersprachen einzuschränken. Das Flag SECBIT_EXEC_RESTRICT_FILE verlangt von Linkern und Interpretern, die Option AT_EXECVE_CHECK zur Überprüfung der Zulässigkeit der Ausführung zu verwenden, während das Flag SECBIT_EXEC_DENY_INTERACTIVE die Verarbeitung interaktiver Befehle verbietet. Die Hauptidee dieser Änderung besteht darin, die Anwendung von Sicherheitsrichtlinien nicht nur auf traditionelle ausführbare Dateien, sondern auch auf Textdateien mit Skripten zu erweitern, die über den Start eines Interpreters geladen werden können (d. h. das Verbot der Ausführung kann nicht nur beim Start von './script.sh', sondern auch bei der Ausführung in der Form 'sh script.sh' umgesetzt werden).
    • Auf x86-Systemen ist Unterstützung für sichere Zeitstempelzähler für Gastbetriebssysteme implementiert, die das Ändern der Systemuhr des Gastbetriebssystems aus der Hostumgebung verhindern. Diese Funktion wurde auf der Grundlage des AMD SEV (Secure Encrypted Virtualization)-Mechanismus implementiert, der in Virtualisierungssystemen zum Schutz verwendet wird. virtuelle Maschinen gegen Übergriffe von Hypervisoren oder Administratoren des Hostsystems.
    • Im SELinux-Mandatssystem für Zugriffssteuerung wurde Unterstützung für xperm-Regeln hinzugefügt, die es ermöglichen, SELinux-Richtlinien an bestimmten ioctl()-Aufrufen oder netlink-Nachrichten zu binden.
    • Zur digitalen Signatur von Kernelmodulen wird standardmäßig der SHA512-Algorithmus anstelle von SHA1 verwendet.
    • In den Treibern für Gastbetriebssysteme von VirtualBox wurde Unterstützung für die ARM64-Architektur hinzugefügt.
    • Im Hypervisor KVM Die Arbeiten zur Nutzung des Intel TDX (Trusted Domain Extensions)-Mechanismus zur Verschlüsselung des Arbeitsspeichers von Gastbetriebssystemen wurden fortgesetzt.
    • In virtio_blk wurde Unterstützung für den Fehlerbehebungsmodus hinzugefügt.
  • Netzwerksubsystem
    • In der RxRPC-Protokollimplementierung ist jetzt die Verwendung von großen UDP-Paketen möglich, um die Durchsatzrate zu erhöhen.
    • Für TCP wurde Unterstützung für den RACK-TLP-Algorithmus zur Erkennung von Paketverlusten hinzugefügt.
    • Ein neuer sysctl-Parameter tcp_tw_reuse_delay wurde hinzugefügt, der im Zusammenhang mit dem Namensraum (network namespace) funktioniert und eine Verzögerung definiert, bevor das System die Portnummer nach Schließen eines TCP-Sockets erneut verwenden kann.
    • Die Möglichkeit zur Auswahl eines Zeitdienstanbieters (PTP) zur Erstellung von Zeitstempeln auf PHY- und MAC-Ebenen wurde hinzugefügt.
    • Für IPsec wurde Unterstützung für den Mechanismus zur Aggregation und Fragmentierung von gekapselten IP-Paketen — IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload) — implementiert.
    • Im Netzwerk-Socket-System wurde Unterstützung für die Übertragung von Prioritätsinformationen (SO_PRIORITY) in Form von Steuernachrichten (cmsg — control messages) hinzugefügt. Für Netzwerk-Sockets wurde die Option SO_RCVPRIORITY hinzugefügt, die in der Funktion recvmsg() die Übertragung von Prioritätsinformationen über den Socket ermöglicht.
  • Ausrüstung
    • Ein Treiber für amdxdna wurde hinzugefügt, der in die CPUs von AMD integrierte NPU-Beschleuniger (Neural Processing Unit) basierend auf der XDNA-Architektur unterstützt, die zur Beschleunigung von operationen im Zusammenhang mit maschinellem Lernen gedacht sind. NPU auf der Basis der XDNA-Architektur wird in den Prozessorserien 7040 und 8040 AMD Ryzen sowie in den Beschleunigern AMD Alveo V70 und SoC AMD Versal angeboten.
    • Im i915-Treiber wurden Identifikatoren neuer GPUs hinzugefügt, ein Fehlerbehandlungsmechanismus für die HDMI-Initialisierung implementiert und die Zuverlässigkeit des GPU-Engine-Reset auf Haswell und älteren Systemen verbessert.
    • Die Arbeiten am DRM-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur wurden fortgesetzt, die in den Intel Arc-Grafikkarten und der integrierten Grafik ab den Tiger-Lake-Prozessoren verwendet wird.
    • Im Nouveau-Treiber wurde die Möglichkeit hinzugefügt, GSP-RM-Logbuffer über debugfs zu übermitteln.
    • Im AMDGPU-Treiber wurde die Unterstützung für den DRM-Panic-Mechanismus implementiert, der eine Art «blauer Bildschirm des Todes» bei Fehlern anzeigt. Die Vorbereitung auf die Unterstützung zukünftiger Grafikarten der Radeon RX 9000-Serie auf Basis der RDNA4-Architektur wurde 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 Plattform Qualcomm SM6150 (QCS615) hinzugefügt.
    • Im DRM-Treiber panfrost wurde die Unterstützung des MediaTek MT8188 SoC mit Mali-G57 GPU hinzugefügt.
    • Im DRM-Treiber vc4 wurde die Unterstützung des Broadcom BCM2712 SoC (Raspberry Pi 5) hinzugefügt.
    • Im vfio-Treiber nvgrace-gpu wurde die Unterstützung für die NVIDIA Grace Blackwell 200-Chipsätze hinzugefügt.
    • Der Treiber für Intel THC (Touch Host Controller), der für die Interaktion mit Touchscreens und Touchpads auf einigen Laptops verwendet wird, wurde aufgenommen. Die Unterstützung für Wacom-Geräte mit PCI-Schnittstelle wurde hinzugefügt. Die Unterstützung für die Spielcontroller von QH Electronics wurde ebenfalls hinzugefügt.
    • Die Unterstützung für ARM-Plattformen, SoCs und Geräte wurde 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. Es wurde Unterstützung für die RISC-V-Architektur-basierte SoC SpacemiT K1 hinzugefügt.
    • Im ALSA-Audiosubsystem wurde die API rawmidi und der Sequencer für MIDI 2.0 erweitert. In der API zur Auslagerung von Kompressionsoperationen zur Soundkarte wurde die Unterstützung für ASRC (Asynchronous Sample Rate Conversion) hinzugefügt.
    • Die Unterstützung für Audiosysteme von Geräten wie Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 und 18i20 wurde hinzugefügt. Auch die Unterstützung für drahtlose Kopfhörer von SteelSeries Arctis 9 wurde hinzugefügt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4