Nach zwei Monaten Entwicklung stellte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.3 vor. Zu den bemerkenswertesten Änderungen gehören: Bereinigung veralteter ARM-Plattformen und Grafiktreiber, Fortsetzung der Integration der Unterstützung der Programmiersprache Rust, das Tool hwnoise, Unterstützung für rot-schwarze Baumstrukturen in BPF, der BIG TCP-Modus für IPv4, integrierter Leistungstest Dhrystone, die Möglichkeit, die Ausführung in memfd zu verbieten, Unterstützung für die Erstellung von HID-Treibern unter Verwendung von BPF, Änderungen in Btrfs zur Reduzierung der Fragmentierung von Blockgruppen.
In die neue Version gingen 15637 Korrekturen von 2055 Entwicklern ein; die Patchgröße beträgt 76 MB (Änderungen betrafen 14296 Dateien, hinzugefügt wurden 1023183 Codezeilen, 883103 Codezeilen wurden entfernt). Zum Vergleich: In der vorherigen Version wurden 16843 Korrekturen von 2178 Entwicklern vorgeschlagen; die Patchgröße betrug 62 MB. Etwa 39% aller im Kernel 6.3 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 15% der Änderungen beziehen sich auf Updates von architecturespezifischem Code, 10% sind mit dem Netzwerk-Stack verbunden, 5% mit Dateisystemen und 3% mit internen KernSubsystemen.
Wesentliche Neuerungen im Kernel 6.3:
- Speicher und Systemdienste
- Eine bedeutende Bereinigung des Codes, der mit alten und unbenutzten ARM-Plattformen verbunden ist, hat die Größe der Quelltexte des Kernels um 150000 Zeilen verkleinert. Mehr als 40 alte ARM-Plattformen wurden entfernt.
- Die Möglichkeit, Treiber für Eingabegeräte mit HID (Human Interface Device)-Schnittstelle zu erstellen, wurde implementiert, die in Form von BPF-Programmen realisiert wird.
- Der Transfer zusätzlicher Funktionalitäten aus dem Rust-for-Linux-Branch, die die Verwendung der Sprache Rust als zweite Sprache zur Entwicklung von Treibern und Kernmodulen betrifft, wurde fortgesetzt. Die Rust-Unterstützung ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört. Die in früheren Ausgaben vorgeschlagene Funktionalität wurde um die Unterstützung von Arc-Typen (Implementierung von Zeigern mit Referenzzähler), ScopeGuard (führt bei Verlassen des Gültigkeitsbereichs eine Bereinigung durch) und ForeignOwnable (ermöglicht das Verschieben von Zeigern zwischen C- und Rust-Code) erweitert. Das Modul 'borrow' aus dem Paket 'alloc' wurde entfernt (Typ 'Cow' und Typ 'ToOwned'). Es wird darauf hingewiesen, dass der Zustand der Rust-Unterstützung im Kernel bereits nahe daran ist, die ersten Module, die in Rust geschrieben sind, in den Kernel aufzunehmen.
- In User-mode Linux (das Starten des Kernels als Benutzerprozess) auf x86-64-Systemen wurde Unterstützung für Code, der in Rust geschrieben wurde, implementiert. Die Unterstützung zum Erstellen von User-mode Linux mit clang wurde hinzugefügt, einschließlich der Optimierungen während des Linkens (LTO).
- Ein neues Tool, hwnoise, wurde hinzugefügt, um Verzögerungen zu überwachen, die durch die Funktionsweise der Hardware verursacht werden. Es werden Abweichungen der Ausführungszeiten von Operationen (Jitter) festgestellt, die bei deaktivierter Interruptverarbeitung mehr als eine Mikrosekunde über 10 Minuten Berechnung überschreiten.
- Ein Kernelmodul mit der Implementierung des Performance-Tests Dhrystone wurde hinzugefügt, das zur Bewertung der CPU-Leistung in Konfigurationen ohne Benutzerraumkomponenten verwendet werden kann (zum Beispiel in der Portierungsphase für neue SoCs, bei denen nur der Kernel geladen wird).
- Ein Kernel-Argument "cgroup.memory=nobpf" wurde hinzugefügt, das die Erfassung des Speicherverbrauchs für BPF-Programme deaktiviert, was für Systeme mit isolierten Containern nützlich sein kann.
- Für BPF-Programme wurde eine Implementierung der Datenstruktur Rot-Schwarzbaum vorgeschlagen, die kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) anstelle der Hinzufügung eines neuen Typus der Zuordnung verwendet.
- Im Mechanismus der wiederherstellbaren Sequenzen (rseq, restartable sequences) wurde die Möglichkeit hinzugefügt, Prozessen Identifikatoren für parallele Ausführungen (memory-map concurrency ID) zu übermitteln, die mit der Nummer der CPU identifiziert werden. Rseq bietet Mittel für die schnelle atomare Ausführung von Operationen, die im Falle einer Unterbrechung durch einen anderen Thread zurückgesetzt werden und erneut versucht werden.
- Auf ARM-Prozessoren wurde Unterstützung für die SME 2 (Scalable Matrix Extension) implementiert.
- Für die Architekturen s390x und RISC-V RV64 wurde die Unterstützung des Mechanismus "BPF trampoline" implementiert, der die Kosten beim Aufruf von Funktionen zwischen Kernel und BPF-Programmen minimiert.
- Auf Systemen mit RISC-V-basierten Prozessoren wurde die Verwendung der "ZBB"-Befehle zur Beschleunigung von String-Operationen implementiert.
- Für Systeme, die auf der LoongArch-Befehlssatzarchitektur basieren (verwendet in Loongson 3 5000-Prozessoren und implementiert einen neuen RISC ISA, der MIPS und RISC-V ähnelt), wurde die Unterstützung für die Randomisierung des Kernel-Speicherbereichs (KASLR), die Änderung der Kernelplatzierung im Speicher (Relocation), hardwaregestützte Haltepunkte und den kprobe-Mechanismus implementiert.
- Im DAMOS-Mechanismus (Data Access Monitoring-basierte Betriebsschemata), der es ermöglicht, den Speicher unter Berücksichtigung der Zugriffshäufigkeit freizugeben, wurde die Unterstützung von Filtern implementiert, um bestimmte Speicherbereiche von der Verarbeitung in DAMOS auszuschließen.
- In der minimalen Standard-C-Bibliothek Nolibc wurde Unterstützung für die Architektur s390 und den Befehlssatz Arm Thumb1 implementiert (neben Unterstützung für ARM, AArch64, i386, x86_64, RISC-V und MIPS).
- Die Optimierung von objtool wurde durchgeführt, um den Kernel-Bau zu beschleunigen und den Spitzenverbrauch von RAM beim Bau zu reduzieren (beim Bau des Kernels im Modus "allyesconfig" gibt es nun keine Probleme mehr mit dem Zwingen zum Beenden von Prozessen auf Systemen mit 32 GB RAM).
- Die Unterstützung für den Bau des Kernels mit dem Intel ICC Compiler wurde eingestellt, da sie bereits längere Zeit nicht mehr funktionierte und niemand das Interesse hatte, dies zu beheben.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- In tmpfs wurde die Unterstützung für das Mapping von Benutzeridentifikatoren für gemountete Dateisysteme implementiert, das verwendet wird, um Dateien eines bestimmten Benutzers auf einem montierten fremden Partition mit einem anderen Benutzer im aktuellen System abzugleichen.
- In Btrfs wurde zur Verringerung der Fragmentierung von Blockgruppen die Trennung von Extents nach Größe bei der Zuweisung von Blöcken sichergestellt, d. h. jede Blockgruppe ist jetzt auf kleine (bis zu 128 KB), mittlere (bis zu 8 MB) und große Extents beschränkt. Das Raid56-Implementierung wurde refaktoriert. Der Code zur Überprüfung von Prüfziffern wurde überarbeitet. Es wurden Leistungsoptimierungen vorgenommen, die die send-Operation um bis zu das Zehnfache beschleunigten, indem utime für Verzeichnisse zwischengespeichert und Befehle nur bei Bedarf ausgeführt wurden. Die Ausführung von fiemap-Operationen wurde um das Dreißigfache beschleunigt, indem Überprüfungen von Rückverweisen für gemeinsam genutzte Daten (Snapshots) übersprungen wurden. Die Metadatenoperationen wurden um 10 % beschleunigt, indem die Schlüsselsuche in b-Baum-Strukturen optimiert wurde.
- Die Leistung des ext4-Dateisystems wurde verbessert, indem mehrere Prozesse gleichzeitig direkt auf zuvor zugewiesene Blöcke zugreifen können, unter Verwendung von gemeinsamen Inode-Sperren anstelle von exklusiven Sperren.
- In f2fs wurde an der Lesbarkeit des Codes gearbeitet. Wichtige Probleme im Zusammenhang mit atomaren Schreibvorgängen und dem neuen Extent-Cache wurden gelöst.
- Im EROFS-Dateisystem (Enhanced Read-Only File System), das für die Verwendung in nur lesbaren Partitionen vorgesehen ist, wurde die Möglichkeit implementiert, die CPU mit den Entpackungsoperationen von komprimierten Dateiinhalten zu verbinden, um die Zugriffsverzögerungen auf Daten zu verkürzen.
- Der I/O-Scheduler BFQ hat die Unterstützung für fortschrittliche Speichermedien auf rotierenden Festplatten hinzugefügt, zum Beispiel solche, die mehrere separat gesteuerte Kopftriebwerke (Multi Actuator) verwenden.
- In die Implementierung des Clients und Server NFS wurde die Unterstützung der Datenverschlüsselung unter Verwendung des AES-SHA2-Algorithmus hinzugefügt.
- In das FUSE-Unterstützungssystem (Filesystems In User Space) wurde die Unterstützung eines Mechanismus zur Erweiterung von Anfragen integriert, der es ermöglicht, zusätzliche Informationen in die Anfrage aufzunehmen. Auf der Grundlage dieser Möglichkeit wurde die Hinzufügung von Gruppenidentifikatoren zur FS-Anfrage realisiert, die erforderlich ist, um die Zugriffsrechte bei der Erstellung von Objekten im FS (create, mkdir, symlink, mknod) zu berücksichtigen.
- Virtualisierung und Sicherheit
- Im Hypervisor KVM für x86-Systeme wurde die Unterstützung erweiterter Hyper-V-Calls hinzugefügt, und deren Durchleitung an den Handler in der Host-Umgebung im Benutzermodus wurde sichergestellt. Diese Änderung ermöglicht die Unterstützung des verschachtelten Betriebs des Hyper-V-Hypervisors.
- In KVM wurde die Einschränkung des Zugriffs des Gastsystems auf PMU-Ereignisse (Performance Monitor Unit), die mit der Leistungsüberwachung verbunden sind, vereinfacht.
- In den memfd-Mechanismus, der es ermöglicht, einen Speicherbereich über einen zwischen Prozessen ausgetauschten Dateideskriptor zu identifizieren, wurde die Möglichkeit hinzugefügt, Bereiche zu erstellen, in denen die Ausführung von Code (non-executable memfd) nicht erlaubt ist und zukünftig keine Ausführungsrechte zugewiesen werden können.
- Eine neue prctl-Operation PR_SET_MDWE wurde hinzugefügt, die Versuche blockiert, Speicherschutzrechte zu aktivieren, die sowohl das Schreiben als auch das Ausführen erlauben.
- Ein Schutz gegen Angriffe der Spectre-Klasse wurde hinzugefügt und standardmäßig aktiviert, implementiert auf der Grundlage des in AMD-Prozessoren Zen 4 vorgeschlagenen automatischen Modus IBRS (Enhanced Indirect Branch Restricted Speculation), der adaptiv die spekulative Ausführung von Anweisungen während der Behandlung von Unterbrechungen, Systemaufrufen und Kontextwechseln erlaubt und verbietet. Der vorgeschlagene Schutz führt zu geringeren Overhead-Kosten im Vergleich zum Retpoline-Schutz.
- Eine Schwachstelle wurde behoben, die es ermöglichte, den Schutz gegen Spectre v2-Angriffe bei Verwendung der gleichzeitigen Multithreading-Technologie (SMT oder Hyper-Threading) zu umgehen. Dies wurde durch das Deaktivieren des STIBP-Mechanismus (Single Thread Indirect Branch Predictors) im IBRS-Sicherheitsmodus verursacht.
- Für Systeme mit ARM64-Architektur wurde das neue Build-Ziel „virtconfig“ hinzugefügt, bei dessen Auswahl nur ein minimales Set an Kernelkomponenten aktiviert wird, das für das Booten in Virtualisierungssystemen erforderlich ist.
- Für die m68k-Architektur wurde die Unterstützung für die Filterung von Systemaufrufen mithilfe des seccomp-Mechanismus hinzugefügt.
- Die Unterstützung für in AMD Ryzen-Prozessoren integrierte CRB TPM2 (Command Response Buffer)-Geräte, basierend auf Microsoft Pluton-Technologie, wurde hinzugefügt.
- Netzwerksubsystem
- Ein netlink-Interface für die Konfiguration der PLCA (Physical Layer Collision Avoidance)-Unterebene wurde hinzugefügt, die in der IEEE 802.3cg-2019-Spezifikation definiert ist und in 802.3cg (10Base-T1S)-Ethernet-Netzwerken verwendet wird, die für die Verbindung von IoT-Geräten und industriellen Systemen optimiert sind. Die Verwendung von PLCA kann die Leistung in Ethernet-Netzwerken mit gemeinsamer Nutzung (shared media) verbessern.
- Die Unterstützung der API „Wireless Extensions“ zur Verwaltung von WiFi 7 (802.11be)-Schnittstellen wurde eingestellt, da diese API nicht alle erforderlichen Einstellungen abdeckt. Bei der Verwendung der weiterhin unterstützten, emulierten API „Wireless Extensions“ wird nun eine Warnung für die meisten aktuellen Geräte ausgegeben.
- Detaillierte Dokumentation zur netlink-API (für Kernelentwickler und Anwendungsentwickler im Benutzerspace) wurde vorbereitet. Ein Tool namens ynl-gen-c zur Generierung von C-Code basierend auf YAML-Spezifikationen des Netlink-Protokolls wurde implementiert.
- Die Unterstützung der Option IP_LOCAL_PORT_RANGE wurde zu Netzwerk-Sockets hinzugefügt, um die Konfiguration von ausgehenden Verbindungen über Adressübersetzer ohne Verwendung von SNAT zu vereinfachen. Bei Verwendung von einem IP-Adressen auf mehreren Hosts ermöglicht IP_LOCAL_PORT_RANGE die Verwendung eigener Bereiche ausgehender Netzwerkports für jeden Host, während am Gateway Pakete basierend auf den Portnummern umgeleitet werden.
- Für MPTCP (MultiPath TCP) wurde die Möglichkeit zur Verarbeitung gemischter Streams implementiert, in denen die Protokolle IPv4 und IPv6 verwendet werden. MPTCP ist eine Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen zu organisieren, bei denen Pakete gleichzeitig über mehrere Routen über verschiedene Netzwerkinterfaces, die an unterschiedliche IP-Adressen gebunden sind, geliefert werden.
- Für IPv4 wurde die Möglichkeit zur Verwendung der Erweiterung BIG TCP realisiert, die die maximale Größe von TCP-Paketen auf 4 GB erhöht, um die Leistung hochgeschwindigkeitsinterner Netzwerke von Rechenzentren zu optimieren. Eine solche Vergrößerung der Paketgröße bei 16-Bit-Feldern im Header wird durch die Verwendung von "Jumbo"-Paketen erreicht, deren Größe im IP-Header auf 0 gesetzt wird, während die tatsächliche Größe in einem separaten 32-Bit-Feld in einem angehängten Header übermittelt wird.
- Ein neuer sysctl-Parameter default_rps_mask wurde hinzugefügt, über den die standardmäßige Konfiguration von RPS (Receive Packet Steering) festgelegt werden kann, die für die Verteilung der Verarbeitung eingehenden Traffics auf CPU-Kerne auf der Ebene der Interrupt-Handler verantwortlich ist.
- Die Unterstützung für Warteschlangenmanagement-Diskussionen zur Verkehrsbegrenzung wie CBQ (class-based queuing), ATM (ATM virtuelle Schaltungen), dsmark (differentiated service marker), tcindex (traffic-control index) und RSVP (resource reservation protocol) wurde eingestellt. Diese Disziplinen waren lange Zeit vernachlässigt, und es fand sich niemand, der ihre Wartung fortsetzen wollte.
- Ausrüstung
- Alle grafischen Treiber auf Basis von DRI1 wurden entfernt: i810 (alte integrierte Intel-Grafikkarten 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, einschließlich Rage Fury-, XPERT 99- und XPERT 128-Karten), savage (S3 Savage GPU), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) und via (VIA IGP), die 2016 als veraltet erklärt wurden und seit 2012 nicht mehr von Mesa unterstützt werden.
- Veraltete Framebuffer-Treiber (fbdev) wie omap1, s3c2410, tmiofb und w100fb wurden entfernt.
- Ein DRM-Treiber für die in den Intel Meteor Lake-Prozessoren (14. Generation) integrierten VPU-Einheiten (Versatile Processing Unit) wurde hinzugefügt. Diese sind für die Beschleunigung von Vorgängen im Zusammenhang mit Computer Vision und maschinellem Lernen vorgesehen. Der Treiber wurde unter Verwendung des "accel"-Subsystems realisiert, das darauf abzielt, die Unterstützung von Berechnungsbeschleunigern zu gewährleisten, die sowohl in Form von einzelnen ASICs als auch als IP-Blocks innerhalb von SoCs und GPUs bereitgestellt werden können.
- Im i915-Treiber (Intel) wurde die Unterstützung für diskrete Intel Arc-Grafikkarten (DG2/Alchemist) erweitert, die Vorabunterstützung für den Meteor Lake-GPU implementiert und die Unterstützung für die Intel Xe HP 4tile-GPU hinzugefügt.
- Der amdgpu-Treiber unterstützt jetzt die AdaptiveSync-Technologie und bietet die Möglichkeit, bei mehreren Bildschirmen den Secure Display-Modus zu verwenden, um die auf dem Bildschirm ausgegebenen Daten zu schützen. Die Unterstützung für DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x und DP 2.1 wurde aktualisiert.
- Der msm-Treiber (Qualcomm Adreno GPU) erhält Unterstützung für die Plattformen SM8350, SM8450, SM8550, SDM845 und SC8280XP.
- Im Nouveau-Treiber wurde die Unterstützung für alte ioctl-Aufrufe eingestellt.
- Im etnaviv-Treiber wurde experimentelle Unterstützung für den NPU-VerSilicon (VeriSilicon Neural Network Processor) hinzugefügt.
- Ein pata_parport-Treiber wurde für IDE-Laufwerke implementiert, die über den parallelen Port angeschlossen werden. Der neu hinzugefügte Treiber ermöglicht es, den alten PARIDE-Treiber aus dem Kernel zu entfernen und das ATA-Subsystem zu modernisieren. Eine Einschränkung des neuen Treibers ist, dass ein gleichzeitiger Anschluss eines Druckers und einer Festplatte über den parallelen Port nicht möglich ist.
- Ein ath12k-Treiber für drahtlose Karten mit Qualcomm-Chips, die Wi-Fi 7 unterstützen, wurde hinzugefügt. Außerdem wurde die Unterstützung für drahtlose Karten mit RealTek RTL8188EU-Chips hinzugefügt.
- Es wurde Unterstützung für 46 Platinen mit ARM64-basierten Prozessoren hinzugefügt, darunter das Samsung Galaxy Tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD sowie Geräte mit SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 und SDM632, Rockchips RK3128 TV-Box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 und RK3328, TI K3 (AM642/AM654/AM68/AM69).
Das lateinamerikanische Free Software Fund hat eine vollständig freie Kernel-Version 6.3 — Linux-libre 6.3-gnu, die von Firmware- und Treiberelementen, die nicht freie Komponenten oder Herstellerbeschränkungen enthalten, befreit wurde, erstellt. In der Version 6.3 wurden Blobs in den neuen Treibern ath12k, aw88395 und peb2466 sowie in den neuen Device Tree-Dateien für qcom-Geräte mit AArch64-Architektur bereinigt. Der Blob-Reinigungs-Code in den Treibern und Subsystemen amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110 wurde aktualisiert, ebenso wie in den Treibern für DVB-Karten mit softwarebasiertem Dekodieren und in vorkompilierten BPF-Dateien. Die Bereinigung in den Treibern mga, r128, tm6000, cpia2 und r8188eu wurde eingestellt, da sie aus dem Kernel entfernt wurden. Die Blob-Bereinigung im i915-Treiber wurde verbessert.
Quelle: opennet.ru
