Linux 6.14

Linux 6.14

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor Die Veröffentlichung des Linux-Kernels 6.14. Zu den bemerkenswertesten Änderungen gehören: der ntsync-Treiber mit Synchronisierungsprimtiven für Windows NT, die Anpassung der Lastverteilung von Lesevorgängen in Btrfs RAID1, Unterstützung für Reflink in XFS im Echtzeitmodus, die Möglichkeit von nicht zwischengespeichertem, gepuffertem Ein-/Ausgabe, dmem-Cgroup zur Begrenzung des GPU-Speichers, die Nutzung 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 Scriptausführungsrechte, Unterstützung für Qualcomm Snapdragon 8 Elite-Chips, Treiber für NPU AMD.

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

Haupt- Neuheiten:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Im Btrfs-Dateisystem ein Unterstützung neuer Methoden zur Lastverteilung von Lesevorgängen zwischen den in das RAID1-Array eingebundenen Speicherlaufwerken. Neben der bisherigen Lastverteilung basierend auf Prozess-IDs (pid) werden in der neuen Version drei neue Lastverteilungsmodi angeboten: „rotation“ (gleichmäßige Lastverteilung über alle Speicher, dieser Modus ist standardmäßig aktiviert); „latency“ (Verteilung unter Berücksichtigung der Latenzen, kann bei Ausfällen oder instabiler Leistung der Speicher nützlich sein); devid (manuelle Steuerung). Für die Änderung des Lastverteilungsmodus wurde hinzugefügt Schnittstelle /sys/fs/btrfs//read_policy. Zu den weiteren Änderungen in Btrfs gehören die Implementierung ioctl FS_IOC_READ_VERITY_METADATA.
    • Hinzugefügt Modus der nicht zwischengespeicherten, gepufferten Ein-/Ausgabe, bei dem Daten sofort aus dem Seiten-Cache entfernt werden, nachdem die Lese- oder Schreiboperationen abgeschlossen sind. Diese Änderung kann nützlich sein, wenn sehr schnelle Speichergeräte verwendet werden, deren Caching in RAM überflüssig ist. Für solche Geräte ermöglicht der neue Modus, übermäßigen Speicherverbrauch durch den Seiten-Cache zu vermeiden, ohne auf die komplizierte API der direkten Ein-/Ausgabe (Direct I/O) zurückgreifen zu müssen.
    • In fsnotify, dem Mechanismus zur Überwachung von Änderungen im Dateisystem, hinzugefügt Neues Ereignis FS_PRE_ACCESS, 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 empfangen wird, wird die Operation ausgeführt; bei einem Fehler gibt der Systemaufruf einen Fehlercode an den Benutzerraum zurück. Mit FS_PRE_ACCESS kann im Benutzerraum beispielsweise das Füllen einer Datei organisiert werden, wenn die Daten im langsamen Speicher bereitstehen.
    • In das FUSE-Subsystem, das die Implementierung von Dateisystemen im Benutzerraum ermöglicht, wurde hinzugefügt unterstützt der Datenaustausch zwischen dem Kernel und dem Handler im Benutzerraum unter Verwendung des io_uring-I/O-Mechanismus. Die Änderung ermöglicht eine höhere FUSE-Leistung durch Reduzierung der Kontextwechsel zwischen Kernel und Benutzerraum.
    • Im XFS-Dateisystem wurde hinzugefügt die Möglichkeit die Nutzung von Reverse-Mapping (rmap, Rückwärtige Abbildung) im Betrieb mit vorhersehbaren Latenzen ("Realtime-Gerät"). Mit Reverse-Mapping kann bestimmt werden, welche Datei in einem bestimmten Block auf dem Speichermedium abgelegt ist. Mit rmap wurde im XFS für den Realtime-Modus die Unterstützung der reflink-Operation implementiert, die das Erstellen von Datei-Kopien durch Klonen der Metadaten der Datei und das Erstellen eines Links zu bereits vorhandenen Daten ohne deren tatsächliche Kopie ermöglicht.
    • Im VFS wurde implementiert die Zwischenspeicherung der Größe von symbolischen Links, die die Ausführung der Operation readlink um 1,5 % beschleunigte (im Test mit /initrd.img in ext4). Die Zwischenspeicherung ist in den Dateisystemen ext4 und tmpfs aktiviert.
    • In die Implementierung von NFSv4.2 wurde die Unterstützung für die Delegierung von Datei-Attributen, die es ermöglicht, solche Datei-Attribute wie Änderungszeit (mtime) zur Seite des NFS-Clients zu verwalten, ohne die Änderungen auf den Server zurücksetzen zu müssen. In NFS wurde auch die Unterstützung des Protokolls "LOCALIO“, das feststellt, ob der NFS-Client und der NFS-Server auf demselben Host sind, um entsprechende Optimierungen zu nutzen, wie die Nutzung von Direct I/O durch den Client.
    • Die Leistung von Leseoperationen in den Dateisystemen NETFS, CIFS und AFS (Andrew File System) wurde verbessert.
    • In Squashfs ein neuer Display-Engine (DC) für AMD APU der Serie HD 7000 (Sea Islands, GCN 1.1) hinzugefügt. Betriebsmodus für das direkte Laden von Blöcken in den Seiten-Cache (SQUASHFS_FILE_DIRECT), der es ermöglicht, ohne separaten Cache read_page auszukommen. Diese Änderung hat den Speicherbedarf bei der Arbeit mit Squashfs reduziert.
    • Im Systemaufruf statx() wurde implementiert der FLAG STATX_DIO_READ_ALIGN, um das erforderliche Alignment für Leseoperationen aus einer Datei zu bestimmen.
    • Im Dateisystem Bcachefs wurde aktualisiert und stabilisiert das Format der Datenträgerstrukturen. Alle weiteren Änderungen am Format werden als optional eingestuft und sollen in Form von optionalen Ergänzungen umgesetzt werden. Die Geschwindigkeit der Integritätsprüfungen des Dateisystems wurde erheblich erhöht. Darüber hinaus wurde die Funktionalität im Nur-Lese-Modus in Bcachefs verbessert; Probleme, die zu Zugriffen auf Speicher nach dessen Freigabe führten (Use after free), wurden behoben; Probleme mit Reflink-Zeigern in fsck wurden gelöst; die Verarbeitung von Transaktionsneustarts wurde korrigiert.
    • Wurde wiederhergestellt das Modul md-linear, das für die Zusammenführung von Blockgeräten vorgesehen ist. Dieses Modul wurde zuvor als veraltet erklärt und aus dem Kernel 6.8 entfernt, stellte sich jedoch als gefragt heraus und wurde daher nun wiederhergestellt.
    • Die Dateisysteme F2FS und SQUASHFS wurden auf die Verwendung von von Seitenfeldern (folios) anstelle der buffer_head-Struktur. Der neue Treiber implementiert ein verzögertes Blockzuweisungsverfahren, das hohe Schreibgeschwindigkeiten und eine Verringerung der Fragmentierung ermöglicht. Für gepufferte Lese-/Schreiboperationen, direkten I/O, Extent-Mapping und Seitenlese-/schreiboperationen wird die Bibliothek (Seiten-Folios) umgestellt.
    • Im Treiber null_blk wurde das Attribut „rotational“ implementiert, das über configfs gesetzt wird und die Simulation der Arbeit mit einem Gerät auf Basis von Rotationsdisketten ermöglicht, um die Tests von Kernel-Funktionen zu erleichtern.
    • Im Device-Mapper-System und in den Modulen dm-mirror, dm-io, dm-table, dm-linear, dm-stripe und dm-raid1 wurde wurde die Unterstützung für atomare Schreibvorgänge hinzugefügt.
  • Speicher und Systemdienste
    • Mechanismus wurde abgeschlossen, Die Integration des Treibers ntsync, der das Zeichengerät /dev/ntsync und eine Sammlung von Synchronisationsprimitive implementiert, die im Windows NT-Kernel verwendet werden. Die Implementierung solcher Primitive auf der Kernel-Ebene kann die Leistung von Windows-Spielen erheblich steigern, die mithilfe von Wine ausgeführt werden. Die Leistungssteigerung wird durch den Wegfall von Overhead-Kosten erreicht, die mit der Verwendung von RPC im Benutzerspeicher verbunden sind. Die Schaffung eines separaten Treibers für den Linux-Kernel erklärt sich aus den Schwierigkeiten bei der korrekten Implementierung des NT-Synchronisations-APIs über bestehende Primitive im Kernel.
    • Ein neuer cgroup-Controller wurde hinzugefügt DMEM für die separate Buchhaltung von Speicherbereichen von Geräten wie GPUs. DMEM ermöglicht es, separate cgroups für verschiedene Aufgaben zu erstellen, die mit der GPU arbeiten, damit sie unabhängig voneinander ausgeführt werden können. Die neue Funktion löst das Problem des erzwungenen Abbruchs von GPU-Operationen bei Erschöpfung des verfügbaren Speichers, indem der Speicher, der von der GPU und von den Treibern der CPU verwendet wird, in separaten cgroups berücksichtigt wird.
    • Optimierungen für die Skalierung der Flush-Operation des TLB (Translation Lookaside Buffer), das zur Beschleunigung der Umwandlung virtueller Adressen in physische Adressen verwendet wird, wurden implementiert. Die hinzugefügten Optimierungen beschränken sich auf die verzögerte Aktualisierung bestimmter Datenstrukturen während des Kontextwechsels, was die Leistung bei einigen Tests verbessert.
    • Die Leistung des Mechanismus MGLRU (Multi-Generational LRU), das zur Bestimmung verwendet wird, welche Speicherseiten verwendet werden und welche in den Auslagerungsbereich verschoben werden können.
    • Fortgesetzt Übertragung von Änderungen aus dem Branch Rust-for-Linux, die mit der Verwendung der Programmiersprache Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen verbunden sind (Rust-Unterstützung ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den zwingenden Build-Abhängigkeiten des Kerns gehört). Die Möglichkeit wurde bereitgestellt, im Kerncode das Makro „derive(CoercePointee)“ zu verwenden, das die Verwendung von Smart-Pointern mit Trait-Objekten ermöglicht. In den Kern aufgenommen Rust-Wraps für PCI, Plattformen, Open Firmware, symbolische Geräte und einige Eingabe-/Ausgabefunktionen. Greg Kroah-Hartman, der für die Unterstützung der stabilen Kernel-Version des Linux-Kerns verantwortlich ist, charakterisierte den aktuellen Stand als „fast bereit, einen echten Treiber in Rust zu schreiben“.
    • In den Build-Szenarien vorgeschlagen neuer Code zur Generierung von Versionen von Debug-Symbolen für ladbare Module, der jetzt Informationen aus den Debug-Einträgen im DWARF-Format verwendet, anstatt den Quellcode direkt zu analysieren. 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 Unterstützung des Modus für das lästige Aussetzen von Aufgaben (PREEMPT_LAZY, lazy preemption), der dem Modus des vollständigen Aussetzens („full preemption“) für Echtzeit-Aufgaben (RR/FIFO/DEADLINE) entspricht, jedoch das Aussetzen normaler Aufgaben (SCHED_NORMAL) bis zur Taktgrenze verzögert.
    • In das Leistung-Profilierungssystem perf hinzugefügt Unterstützung für Energieverbrauchszähler von AMD-Prozessoren. Hinzugefügt Möglichkeit, auf Systemen mit bis zu 2048 CPU-Kernen zu arbeiten.
    • Bereitgestellt Möglichkeit zur Verwendung des sysctl-Parameters pid_max mit Prozess-ID-Namensräumen (ID namespace). Der pid_max-Parameter dient zur Begrenzung des maximalen Wertes von Prozess-IDs (PID) und kann jetzt verwendet werden, um die maximal mögliche Anzahl von Prozessen, die in dem angegebenen Namensraum ausgeführt werden, zu beschränken. Die Verarbeitung des Parameters erfolgt hierarchisch, d. h. Einschränkungen in äußeren Namensräumen gelten für geschachtelte Namensräume.
    • Bei der Verwendung des Systemaufrufs execveat wird in der Dateisystem-/proc nun der Name der gestarteten Datei angezeigt, anstelle der Nummer des Dateideskriptors.
    • Im Quellcode des Kernels (im Verzeichnis samples) wurde das Tool mountinfo hinzugefügt, das die Verwendung der Systemaufrufe statmount() und listmount() demonstriert.
    • Im BPF-Subsystem angeboten Neue Funktionen bpf_local_irq_save() und bpf_local_irq_restore() zum vorübergehenden Deaktivieren von Interrupts auf der lokalen CPU. Die Funktionen können zur Implementierung von Strukturen verwendet werden, deren Verarbeitung nicht durch Interrupts unterbrochen wird.
    • Im Systemaufruf madvise() bei Verwendung der Flags MADV_DONTNEED und MADV_FREE sichergestellt wird der Seiten-Speichertabelle, die mit dem freigegebenen Adressbereich verbunden ist, freigegeben, da in einigen Situationen leere Seiten genügend Speicherplatz belegen können.
    • Für die OpenRISC-Architektur wurde die Unterstützung für das Mechanismus der erneut startbaren Sequenzen (rseq, restartable sequences), das für die schnelle atomare Ausführung von Operationen gedacht ist, die im Falle einer Unterbrechung durch einen anderen Thread gelöscht werden und ein erneuter Versuch der Ausführung unternommen wird.
    • 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.
    • In das System für asynchrone Eingabe/Ausgabe io_uring wurde hinzugefügt Schnittstelle zur Übertragung zusätzlicher Metadaten zur Integrität bei Lese- und Schreiboperationen.
  • Virtualisierung und Sicherheit
    • Im Systemaufruf execveat wurde hinzugefügt Flag AT_EXECVE_CHECK, das es erlaubt eine Überprüfung der Zulässigkeit der Dateiausführung durchzuführen, ohne die Datei tatsächlich auszuführen, jedoch unter Berücksichtigung von Sicherheitsrichtlinien, Zugriffsrechten und aktiven LSM-Modulen. Für die Verwendung zusammen mit AT_EXECVE_CHECK 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 interpretierbaren Programmiersprachen eingesetzt werden können. Das Flag SECBIT_EXEC_RESTRICT_FILE weist Compiler und Interpreter an, die Option AT_EXECVE_CHECK zur Überprüfung der Zugänglichkeit zu verwenden, während das Flag SECBIT_EXEC_DENY_INTERACTIVE die Verarbeitung interaktiver Befehle verbietet. Die Hauptidee der Änderung besteht darin, Sicherheitsrichtlinien nicht nur auf traditionelle ausführbare Dateien, sondern auch auf Textdateien mit Skripten anzuwenden, die durch das Starten eines Interpreters geladen werden können (d. h. das Ausführungsverbot kann nicht nur beim Ausführen von './script.sh' sondern auch in der Form 'sh script.sh' umgesetzt werden).
    • Auf x86-Systemen wurde Unterstützung für geschützte Zeitgeber für Gastbetriebssysteme implementiert, die es nicht erlauben, die Systemuhren des Gastbetriebssystems aus der Hostumgebung zu ändern. Diese Fähigkeit basiert auf dem Mechanismus AMD SEV (Secure Encrypted Virtualization), der in Virtualisierungssystemen verwendet wird, um virtuelle Maschinen vor Eingriffen durch den Hypervisor oder den Administrator des Hostsystems zu schützen.
    • In das SELinux-Mandatory Access Control-System hinzugefügt unterstützt xperm-Regeln, die es ermöglichen, SELinux-Richtlinien an bestimmte Aufrufe von ioctl() oder netlink-Nachrichten zu binden.
    • Für die digitale Signatur von Kernelmodulen wird standardmäßig anstelle von SHA1 wurde der Algorithmus SHA512 verwendet.
    • In den Treibern für Gastbetriebssysteme von VirtualBox eingeschlossen wurde Unterstützung für die ARM64-Architektur implementiert.
    • Im Hypervisor KVM wird fortgesetzt Arbeit unter Nutzung des Intel TDX (Trusted Domain Extensions) Mechanismus zur Verschlüsselung des Speichers von Gastbetriebssystemen.
    • In virtio_blk hinzugefügt wurde Unterstützung für den Fehlerwiederherstellungsmodus hinzugefügt.
  • Netzwerksubsystem
    • In der Implementierung des Protokolls RxRPC ein wurde die Nutzung großer UDP-Frames zur Steigerung der Bandbreite ermöglicht.
    • Für TCP wurde Unterstützung für den Algorithmus RACK-TLP zur Erkennung von Paketverlusten hinzugefügt.
    • Hinzugefügt neuer sysctl-Parameter tcp_tw_reuse_delay, der im Zusammenhang mit dem Namensraum (network namespace) wirkt und es ermöglicht, die Verzögerung zu definieren, bevor das System die Nummer eines Netzwerkports nach der Schließung eines TCP-Sockets erneut verwenden kann.
    • Hinzugefügt Möglichkeit zur Auswahl eines Zeitgeberanbieters (PTP) zur Bildung von Zeitstempeln auf PHY- und MAC-Ebenen.
    • Für IPsec wurde Unterstützung des Aggregations- und Fragmentierungsmechanismus für inkapsulierte IP-Pakete - IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
    • In das Netzwerksocketsystem hinzugefügt unterstützt Übermittlung von Informationen zur Priorität (SO_PRIORITY) in Form von Steuer-Nachrichten (cmsg — control messages). Für Netzwerksockets hinzugefügt Option SO_RCVPRIORITY, die in den Funktionen recvmsg() die Übermittlung von Informationen zur Priorität des Sockets aktiviert.
  • Ausrüstung
    • Hinzugefügt Treiber amdxdna für integrierte NPU (Neural Processing Unit) Beschleuniger in AMD CPUs, basierend auf der Architektur XDNA, die zur Beschleunigung von operationen im Bereich des maschinellen Lernens verwendet werden. NPU auf Basis der Architektur XDNA wird in den Serien 7040 und 8040 von AMD Ryzen-Prozessoren, AMD Alveo V70-Beschleunigern und SoCs von AMD Versal angeboten.
    • In den i915-Treibern Methoden text(), arrayBuffer() und stream() hinzugefügt, um bestimmte Datentypen zu lesen; Identifikatoren neuer GPUs, ein Fehlerbehandlungsmechanismus für die HDMI-Initialisierung wurde implementiert, die Zuverlässigkeit des Neustarts von GPU-Engines auf Haswell und älteren Systemen wurde verbessert.
    • Fortgesetzt Arbeiten am drm-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe Architektur, die in Intel Grafikkarten der Arc-Familie und in integrierter Grafik ab 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 des DRM-Panikmechanismus realisiert, der eine Art "blauer Bildschirm des Todes" bei Abstürzen anzeigt. Die Vorbereitungen zur Unterstützung der bevorstehenden Radeon RX 9000 Grafikkartenserie auf 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 der Qualcomm SM6150-Plattform (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 hinzugefügt unterstützt der NVIDIA Grace Blackwell 200 Chips.
    • Umfang ein neuer Display-Engine (DC) für AMD APU der Serie HD 7000 (Sea Islands, GCN 1.1) hinzugefügt. Treiber für Intel THC (Touch Host Controller), der zur Interaktion mit Touchscreens und Touchpads auf bestimmten Laptops verwendet wird. Unterstützung für Wacom-Geräte mit PCI-Schnittstelle wurde hinzugefügt. Hinzugefügt Unterstützung für Gaming-Controller von QH Electronics.
    • Hinzugefügt unterstützt ARM-Plattform, SoC und Geräte: 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 SoC hinzugefügt SpacemiT K1 basierend auf der RISC-V-Architektur.
    • Im Audiounterstützungssystem ALSA für MIDI 2.0 wurden die API rawmidi und Sequencer. Im API für das Auslagern von Komprimierungsoperationen zur Soundkarte wurde die Unterstützung für ASRC (Asynchronous Sample Rate Conversion) hinzugefügt.
    • Unterstützung für Audiosysteme von Geräten Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4. Generation 16i16, 18i16 und 18i20 hinzugefügt. Hinzugefügt Unterstützung für drahtlose Kopfhörer SteelSeries Arctis 9.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4