Nach zwei Monaten der Entwicklung stellte Linus Torvalds den Die Veröffentlichung des Linux-Kernels 6.14 bringt bemerkenswerte Änderungen mit sich: den ntsync-Treiber mit Synchronisationsprimitiven für Windows NT, die Konfiguration der Lastverteilung von Lesevorgängen im Btrfs RAID1, Unterstützung von reflink in XFS im Echtzeitmodus, die Möglichkeit für nicht-cachable gepufferten Ein-/Ausgabe, 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, Geschwindigkeitsoptimierungen für symbolische Links, die Verwaltung von Skriptausführungsrechten und die Unterstützung von Qualcomm Snapdragon 8 Elite-Chips sowie einem Treiber für AMD NPU.
In die neue Version fließen 12.115 Korrekturen von 1.984 Entwicklern ein, die Patchgröße beträgt 39 MB (die Änderungen betreffen 10.170 Dateien, 531.586 Codezeilen wurden hinzugefügt und 235.999 entfernt). In der vorherigen Ausgabe wurden 14.172 Korrekturen von 2.086 Entwicklern registriert, die Patchgröße betrug 46 MB. Etwa 41 % aller in 6.14 vorgestellten Änderungen hängen mit Gerätetreibern zusammen, rund 13 % der Änderungen betreffen die Aktualisierung von architekturspezifischem Code, 14 % betreffen das Netzwerk-Stack, 7 % sind dateisystembezogen und 4 % beziehen sich auf interne Kernel-Subsysteme.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Dateisystem Btrfs wurde eingeführt Unterstützung neuer Methoden zur Lastverteilung von Leseoperationen zwischen den in das RAID1-Array integrierten Speicherlaufwerken. Neben der zuvor vorhandenen Lastverteilung auf Basis von Prozess-IDs (pid) wurden in der neuen Version drei neue Lastverteilungsmodi vorgeschlagen: „rotation“ (gleichmäßige Verteilung der Last auf alle Laufwerke, standardmäßig aktiviert); „latency“ (Verteilung unter Berücksichtigung der Latenzen, hilfreich bei Laufwerksfehlern oder instabilen Betrieb); devid (manuelle Steuerung). Um den Lastverteilungsmodus zu ändern. ein Schnittstelle /sys/fs/btrfs//read_policy. Zu den weiteren Änderungen in Btrfs gehören – eine Umsetzung ioctl FS_IOC_READ_VERITY_METADATA.
- Hinzugefügt Modus des nicht zwischengespeicherten, pufferten Ein- und Ausgabes, bei dem die Daten aus dem Seitencache entfernt werden, sobald 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, die übermäßige Nutzung des Seitencache zu vermeiden, ohne auf die Verwendung einer komplexen Direct I/O-API zurückzugreifen.
- In fsnotify, dem Mechanismus zur Überwachung von Änderungen im Dateisystem, wurde hinzugefügt wurde ein neues Ereignis FS_PRE_ACCESS eingeführt, das in der Phase vor dem Zugriff auf den Dateiinhalt generiert wird. Dieses Ereignis wird synchron verarbeitet, d. h. der Kernel sendet das Ereignis und wartet auf eine Antwort. Wenn die Antwort eingeht, wird die Operation durchgeführt; tritt ein Fehler auf, gibt der Systemaufruf einen Fehlercode an den Benutzerraum zurück. Mit FS_PRE_ACCESS kann beispielsweise der Benutzerprozess den Dateiinhalt schrittweise füllen, sobald die Daten in einem langsamen Speicher verfügbar sind.
- In das FUSE-Subsystem, das es ermöglicht, Dateisystemimplementierungen im Benutzerraum zu erstellen, wurde поддержка eine Datenübertragung zwischen dem Kernel und dem Benutzerraum-Handler unter Verwendung des I/O-Mechanismus io_uring implementiert. Diese Änderung verbessert die FUSE-Leistung, indem die Kontextwechsel zwischen Kernel und Benutzerraum reduziert werden.
- im XFS-Dateisystem hinzugefügt. die Möglichkeit Die Verwendung von Reverse-Mapping (rmap) im Betrieb mit vorhersehbaren Latenzen („Realtime-Gerät“) ermöglicht es, zu bestimmen, für welche Datei ein bestimmter Block auf dem Speichermedium verwendet wird. Mit rmap wird in XFS für den Realtime-Modus die Unterstützung für die Reflink-Operation bereitgestellt, die es ermöglicht, Datei-Kopien zu erstellen, indem die Metadaten der Datei geklont und ein Verweis auf bereits vorhandene Daten erstellt wird, ohne diese tatsächlich zu kopieren.
- In VFS wurde wird die Größenkettenspeicherung von symbolischen Links unterstützt, was die Ausführung der Operation readlink (im Test mit /initrd.img in ext4) um 1,5 % beschleunigt hat. Die Caching-Funktion ist in den Dateisystemen ext4 und tmpfs aktiviert.
- In die Implementierung von NFSv4.2 wurde die Unterstützung für Dateiattributdelegierunghinzugefügt, die es ermöglicht, solche Dateiattribute wie die Änderungszeit (mtime) auf der Seite des NFS-Clients zu verwalten, ohne Änderungen auf dem Server zurücksetzen zu müssen. Außerdem wurde die Unterstützung des Protokolls „LOCALIO“ verbessert, das es ermöglicht, festzustellen, ob sich Client und Server von NFS auf demselben Host befinden, um entsprechende Optimierungen wie die Verwendung von Direct I/O durch den Client zu aktivieren.
- Erhöht Leistung von Lesevorgängen in den Dateisystemen NETFS, CIFS und AFS (Andrew File System).
- In Squashfs ist Teil des Tools direkter Block-Lade-Modus in den Seiten-Cache (SQUASHFS_FILE_DIRECT), der es ermöglicht, ohne separaten read_page-Cache auszukommen. Diese Änderung hat den Speicherbedarf bei der Nutzung von Squashfs verringert.
- Im Systemaufruf statx() implementiert. Flagge STATX_DIO_READ_ALIGN, um die erforderliche Ausrichtung für Leseoperationen aus einer Datei zu bestimmen.
- Im Dateisystem Bcachefs aktualisiert и stabilisiert Format von Datenträgerstrukturen. Alle weiteren Änderungen am Format werden als optional eingestuft und sollen in Form von optionalen Erweiterungen umgesetzt werden. Die Geschwindigkeit der Integritätsprüfung des Dateisystems wurde erheblich verbessert. Außerdem wurde die Leistung im Nur-Lese-Modus von Bcachefs optimiert; Probleme, die zu Zugriffen auf den Speicher nach dessen Freigabe führten (use after free), wurden behoben; Probleme mit Reflink-Pointern in fsck wurden gelöst; die Verarbeitung von Transaktionsneustarts wurde verbessert.
- Wurde zurückgebracht das Modul md-linear, das zum Zusammenfassen von Blockgeräten gedacht ist. Dieses Modul wurde zuvor als veraltet erklärt und aus dem Kern 6.8 entfernt, stellte sich jedoch als gefragt heraus und wurde daher nun wiederhergestellt.
- Die Dateisysteme F2FS und SQUASHFS wurden auf die Verwendung umgestellt Seiten-Skripte (Seitenfolien).
- Im Treiber null_blk das Attribut 'rotational' wurde über configfs implementiert, mit dem simuliert werden kann, dass mit einem Gerät auf Basis rotierender Festplatten gearbeitet wird, um die Testfunktionen des Kernels zu erleichtern.
- Im Device Mapper-System sowie 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
- Abgeschlossen die Integration in den Kernel des Treibers ntsync, der das Zeichen-Gerät /dev/ntsync und eine Reihe von Synchronisationsprimitive bereitstellt, die im Windows NT-Kernel verwendet werden. Die Implementierung solcher Primitive auf der Kernel-Ebene ermöglicht eine signifikante Leistungssteigerung von Windows-Spielen, die mit Wine ausgeführt werden. Die Leistungssteigerung wird durch die Beseitigung von 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 Problematik, die NT-Synchronisations-API korrekt über vorhandene Primitive im Kernel zu implementieren.
- Ein neuer cgroup-Controller wurde hinzugefügt DMEM für die separate Verwaltung des Speichers von Geräten wie GPU. DMEM ermöglicht es, separate cgroups für verschiedene Aufgaben zu erstellen, die mit GPU arbeiten, sodass sie unabhängig voneinander ausgeführt werden können. Diese neue Funktion löst das Problem des erzwungenen Abbruchs von GPU-Operationen, wenn der verfügbare Speicher erschöpft ist, indem der von der GPU verwendete Speicher und der von den CPU-Treibern verwendete Speicher in separaten cgroups berücksichtigt werden.
- Es wurden Optimierungen zur Skalierung der Flush-Operation (Leeren) des TLB (Translation Lookaside Buffer) implementiert, der verwendet wird, um die Umwandlung von virtuellen Adressen in physische Adressen zu beschleunigen. Die hinzugefügten Optimierungen bestehen darin, bestimmte Datenstrukturen während des Kontextwechsels verzögert zu aktualisieren, was die Leistung bei einigen Tests verbessert.
- Erhöht Leistung des Mechanismus MGLRU (Multi-Generational LRU), der verwendet wird, um zu bestimmen, welche Speicherseiten genutzt werden und welche in den Auslagerungsbereich verschoben werden können.
- Die Übertragung von Änderungen aus dem Branch Rust-for-Linux , die mit der Nutzung, die die Verwendung von Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen betrifft (die Unterstützung von Rust ist standardmäßig nicht aktiv und führt nicht dazu, dass Rust zu den erforderlichen Build-Abhängigkeiten des Kernels gehört). Es wurde die Möglichkeit geschaffen, im Kernelcode das Makro „derive(CoercePointee)“ zu verwenden, das die Nutzung von Smart-Pointern mit Trait-Objekten ermöglicht. Im Rahmen des Kernels sind Rust-Bindings für PCI, Plattformen, Open Firmware, symbolische Geräte und einige Ein- und Ausgabe-Funktionen. Greg Kroah-Hartman, der für die Pflege des stabilen Kernel-Zweigs von Linux verantwortlich ist, beschrieb den aktuellen Zustand als „fast bereit für die Entwicklung eines echten Treibers in Rust“.
- In Build-Szenarien wurde angeboten wurde neuer Code zur Generierung von Versionen für Debug-Symbole für ladbare Module eingeführt, der nun Informationen aus Debug-Einträgen im DWARF-Format verwendet, anstatt den Quellcode direkt zu analysieren. Diese Änderung ermöglicht die Versionskontrolle von Debug-Symbolen für Module, die in Rust geschrieben sind. Die alte Implementierung bleibt ebenfalls im Kernel erhalten, und der Generator wird auf der Ebene der Build-Optionen ausgewählt.
- Für die PowerPC-Architektur wurde Unterstützung des lazy Preemption-Modus (PREEMPT_LAZY), der dem vollständigen Preemption-Modus („full preemption“) für Echtzeitanwendungen (RR/FIFO/DEADLINE) entspricht, jedoch die Preemption normaler Aufgaben (SCHED_NORMAL) bis zur Tick-Grenze verzögert.
- Im Performance-Profilierungssystem perf hinzugefügt Unterstützung von Leistungszähler für AMD-Prozessoren. Hinzugefügt Fähigkeit, auf Systemen mit bis zu 2048 CPU-Kernen zu operieren.
- Es wurde Möglichkeit, den sysctl-Parameter pid_max mit Prozessen in Namensräumen (ID namespace) zu verwenden. Der pid_max-Parameter dient der Begrenzung des maximalen Werts von Prozessidentifikatoren (PID) und kann nun verwendet werden, um die maximal mögliche Anzahl von Prozessen, die in dem angegebenen Namensraum ausgeführt werden, zu begrenzen. 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 system calls zur Prozessausführung execveat wird im Dateisystem /proc der Name der gestarteten Datei und nicht die Nummer des Dateideskriptors angezeigt.
- Im Quellcode des Kernels (im Verzeichnis samples) wurde das Dienstprogramm mountinfo hinzugefügt, das die Verwendung der Systemaufrufe statmount() und listmount() demonstriert.
- Im BPF-Subsystem werden wurden die neuen 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 zur Implementierung von Strukturen verwendet werden, deren Verarbeitung nicht durch Unterbrechungen unterbrochen wird.
- Im Systemaufruf madvise() wird beim Einsatz der Flags MADV_DONTNEED und MADV_FREE sind gewährleistet die Freigabe von Speichertabellen, die mit dem freizugebenden Adressbereich verbunden sind, ermöglicht, da in bestimmten Situationen leere Speicherseiten viel Speicher beanspruchen können.
- Für die Architektur OpenRISC wurde die Unterstützung für den Mechanismus der wiederherstellbaren Sequenzen (rseq, restartable sequences) implementiert, der für die schnelle atomare Durchführung von Vorgängen vorgesehen ist, die im Falle einer Unterbrechung durch einen anderen Thread zurückgesetzt werden und ein erneuter Versuch der Ausführung unternommen 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 I/O-System io_uring ein wurde ein Interface zur Übertragung zusätzlicher Metadaten zur Integrität bei Lese- und Schreiboperationen hinzugefügt.
- Virtualisierung und Sicherheit
- Im Systemaufruf execveat ein Flag AT_EXECVE_CHECK, das es ermöglicht, eine Überprüfung durchzuführen Die Erlaubnis zur Ausführung einer Datei ohne deren tatsächliche Ausführung, unter Berücksichtigung von Sicherheitsrichtlinien, Zugriffsrechten und aktiven LSM-Modulen. Für die Verwendung in Verbindung mit AT_EXECVE_CHECK werden 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 verlangt von Compilern und Interpretern, die Option AT_EXECVE_CHECK zur Überprüfung der Ausführungsberechtigung zu verwenden, während das Flag SECBIT_EXEC_DENY_INTERACTIVE die Verarbeitung interaktiver Befehle untersagt. Die Hauptidee der Änderung besteht darin, Sicherheitsrichtlinien nicht nur auf traditionelle ausführbare Dateien, sondern auch auf Textdateien mit Skripten anzuwenden, die über den Interpreter gestartet werden können (d.h. das Verbot der Ausführung kann nicht nur bei der Ausführung von './script.sh', sondern auch bei der Ausführung in Form von 'sh script.sh' durchgesetzt werden).
- Auf x86-Systemen wird Unterstützung für sichere Zeitstempelzähler für Gastsysteme bereitgestellt, die es nicht zulassen, die Systemuhr des Gastsystems aus der Hostumgebung zu ändern. Diese Möglichkeit basiert auf einem Mechanismus AMD SEV (Sichere verschlüsselte Virtualisierung), die in Virtualisierungssystemen verwendet wird, um virtuelle Maschinen vor Eingriffen des Hypervisors oder des Administrators des Host-Systems zu schützen.
- In das System der mandatorischen Zugriffskontrolle SELinux hinzugefügt поддержка xperm-Regeln, die es ermöglichen, SELinux-Richtlinien an bestimmten ioctl()-Aufrufen oder netlink-Nachrichten zu binden.
- Für die digitale Signierung von Kernelmodulen standardmäßig anstelle von SHA1 wurde der Algorithmus SHA512.
- In Treibern für Gast-Systeme von VirtualBox wurde hinzugefügt unterstützt die Architektur ARM64.
- Im Hypervisor KVM wurde fortgesetzt die Arbeit wird der Mechanismus Intel TDX (Trusted Domain Extensions) zur Verschlüsselung des Gastbetriebssystems verwendet.
- In virtio_blk hinzugefügt wurde die Unterstützung für den Fehlerbehebungsmodus hinzugefügt.
- Netzwerksubsystem
- In der Implementierung des Protokolls RxRPC wurde eingeführt die Möglichkeit zur Verwendung von großen UDP-Frames zur Steigerung der Bandbreite.
- Für TCP wurde die Unterstützung des Algorithmus RACK-TLP zur Erkennung von Paketverlusten hinzugefügt.
- Hinzugefügt Ein neuer sysctl-Parameter tcp_tw_reuse_delay, der im Zusammenhang mit dem Namensraum (Network Namespace) wirkt und es ermöglicht, die Verzögerung zu bestimmen, bevor das System die Portnummer nach dem Schließen des TCP-Sockets erneut verwenden kann.
- Hinzugefügt Möglichkeit, einen präzisen Zeitgeber (PTP) für die Erstellung von Zeitstempeln auf PHY- und MAC-Ebenen auszuwählen.
- Für IPsec wurde Unterstützung für Mechanismen zur Aggregation und Fragmentierung von gekapselten IP-Paketen – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode für Encapsulating Security Payload).
- In das System der Netzwerksockets hinzugefügt поддержка Übertragung von Prioritätsinformationen (SO_PRIORITY) in Form von Steuer-Nachrichten (cmsg — Control Messages). Für Netzwerksockets hinzugefügt Die Option SO_RCVPRIORITY, die bei der Funktion recvmsg() die Übertragung von Informationen über die Priorität des Sockets umfasst.
- Ausrüstung
- Hinzugefügt Treiber amdxdna für in die AMD-CPU integrierte NPU (Neural Processing Unit) Beschleuniger auf der Basis der Architektur XDNA, die zur Beschleunigung von Vorgängen im Zusammenhang mit maschinellem Lernen bestimmt sind. NPU auf Basis der XDNA-Architektur ist in den Serien 7040 und 8040 der AMD Ryzen-Prozessoren sowie in den AMD Alveo V70-Beschleunigern und SoC AMD Versal verfügbar.
- Im Treiber i915 wurden hinzugefügt wurden Identifikatoren neuer GPUs implementiert, ein Handler für HDMI-Initialisierungsfehler hinzugefügt und die Zuverlässigkeit des Rebootens von GPUs in Haswell- und älteren Systemen verbessert.
- Fortsetzung der Arbeiten am drm-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur, die in den Intel-Grafikkarten der Arc-Serie sowie in integrierter Grafik ab den Tiger Lake-Prozessoren verwendet wird.
- 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 Fehlern anzeigt. Zudem wurde die Vorbereitung auf die Unterstützung der kommenden Radeon RX 9000 Grafikartenserie auf Basis der RDNA4-Architektur 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 hinzugefügt поддержка für NVIDIA Grace Blackwell 200 Chips.
- Im Rahmen von ist Teil des Tools Treiber für Intel THC (Touch Host Controller), der zur Interaktion mit Touchscreens und Touchpads auf einigen Laptops verwendet wird. Die 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 поддержка ARM-Plattformen, SoCs 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 SoCs wurde hinzugefügt. SpacemiT K1 auf Basis der RISC-V-Architektur.
- Im ALSA-Audiosystem für MIDI 2.0 wurden erweitert wurde die API rawmidi und sequencer entwickelt. In der API zur Auslagerung von Kompressionsoperationen auf die Soundkarte wurde die Unterstützung für ASRC (Asynchronous Sample Rate Conversion) hinzugefügt.
- Unterstützung für Audiosysteme von Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 und 18i20 wurde hinzugefügt. Hinzugefügt Unterstützung für SteelSeries Arctis 9 Wireless Kopfhörer.
Quelle: linux.org.ru
