Release des Linux-Kernels 6.3

Nach zwei Monaten Entwicklung stellte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.3 vor. Zu den auffälligsten Änderungen gehören die Bereinigung veralteter ARM-Plattformen und Grafikkartentreiber, die fortgesetzte Integration der Unterstützung für die Programmiersprache Rust, das Dienstprogramm hwnoise, die Unterstützung von rot-schwarzen Baumstrukturen in BPF, der BIG TCP-Modus für IPv4, ein eingebauter Dhrystone-Leistungstest, die Möglichkeit, Ausführungen in memfd zu verbieten, und die Unterstützung für die Erstellung von HID-Treibern unter Verwendung von BPF. In Btrfs wurden Änderungen zur Reduzierung der Fragmentierung von Blockgruppen angenommen.

In die neue Version wurden 15.637 Korrekturen von 2.055 Entwicklern aufgenommen; die Patchgröße beträgt 76 MB (Änderungen betrafen 14.296 Dateien, 1.023.183 Zeilen Code wurden hinzugefügt, 883.103 Zeilen entfernt). Zum Vergleich: In der vorherigen Version wurden 16.843 Korrekturen von 2.178 Entwicklern vorgeschlagen; die Patchgröße betrug 62 MB. Etwa 39 % aller Änderungen im Kernel 6.3 beziehen sich auf Gerätetreiber, etwa 15 % der Änderungen betreffen die Aktualisierung von architekturspezifischem Code, 10 % beziehen sich auf den Netzwerk-Stack, 5 % auf Dateisysteme und 3 % auf interne Subsysteme des Kernels.

Die wichtigsten Neuerungen im Kernel 6.3:

  • Speicher und Systemdienste
    • Es wurde eine umfassende Bereinigung des Codes durchgeführt, der mit alten und ungenutzten ARM-Plattformen verbunden ist, was zu einer Reduzierung der Größe des Kernel-Quelltexts um 150.000 Zeilen geführt hat. Über 40 alte ARM-Plattformen wurden entfernt.
    • Die Möglichkeit zur Erstellung von Treibern für Eingabegeräte mit HID (Human Interface Device) Schnittstelle wurde als BPF-Programme implementiert.
    • Die Übertragung zusätzlicher Funktionen aus dem Rust-for-Linux-Zweig, die die Verwendung von Rust als zweiter Sprache für die Entwicklung von Treibern und Kernmodulen betreffen, wurde fortgesetzt. Die Rust-Unterstützung ist standardmäßig nicht aktiv und führt nicht dazu, dass Rust zu den erforderlichen Buildabhängigkeiten des Kernels gehört. Die in früheren Veröffentlichungen vorgeschlagene Funktionalität wurde um Unterstützung für die Typen Arc (Implementierung von Zeigern mit Referenzzählung), ScopeGuard (durchgeführt zur Bereinigung beim Verlassen des Gültigkeitsbereichs) und ForeignOwnable (ermöglicht das Verschieben von Zeigern zwischen C- und Rust-Code) erweitert. Das Modul 'borrow' (Typ 'Cow' und Trait 'ToOwned') wurde aus dem Paket 'alloc' entfernt. Es wird festgestellt, dass der Stand der Rust-Unterstützung im Kernel bereits nahe daran ist, die ersten in Rust geschriebenen Module zu akzeptieren.
    • Im User-mode Linux (Ausführung des Kernels als Benutzerprozess) auf x86-64-Systemen wurde Unterstützung für in Rust geschriebene Codes implementiert. Die Unterstützung für den Aufbau von User-mode Linux mit clang wurde hinzugefügt, einschließlich Optimierungen während der Verlinkung (LTO).
    • Ein Werkzeug namens hwnoise wurde hinzugefügt, um Verzögerungen zu verfolgen, die durch die Spezifika der Hardware verursachten werden. Abweichungen der Ausführungszeiten (Jitter) werden bestimmt, die bei deaktivierter Interruptbearbeitung mehr als eine Mikrosekunde über 10 Minuten Berechnungen hinausgehen.
    • Ein Kernelmodul zur Durchführung des Dhrystone-Leistungstests wurde hinzugefügt, das zur Bewertung der CPU-Leistung in Konfigurationen ohne Benutzerraumkomponenten verwendet werden kann (z. B. in der Portierungsphase für neue SoCs, bei denen nur der Kernel geladen ist).
    • Ein Kernel-Befehlszeilenparameter „cgroup.memory=nobpf“ wurde hinzugefügt, der die Berücksichtigung 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, bei der kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) anstelle eines neuen Typen von Mapping verwendet werden.
    • Im Mechanismus der wiederherstellbaren Sequenzen (rseq, restartable sequences) wurde die Möglichkeit hinzugefügt, Prozessen Identifikatoren für parallele Ausführung (memory-map concurrency ID) zuzuweisen, die mit der CPU-Nummer identifiziert werden. Rseq bietet Mittel für die schnelle atomare Ausführung von Operationen, die im Falle einer Unterbrechung durch einen anderen Thread bereinigt und erneut versucht werden.
    • Für ARM-Prozessoren wird die Unterstützung für die SME 2 (Scalable Matrix Extension) Befehle gewährleistet.
    • Für die Architekturen s390x und RISC-V RV64 wurde die Unterstützung des Mechanismus 'BPF trampoline' implementiert, der die Kosten für die Übertragung von Aufrufen zwischen dem Kernel und BPF-Programmen minimiert.
    • Auf Systemen mit Prozessoren auf Basis der RISC-V Architektur wurde die Verwendung der 'ZBB' Befehle zur Beschleunigung von String-Operationen implementiert.
    • Für Systeme, die auf der LoongArch-Befehlssatzarchitektur basieren (verwendet in den Loongson 3 5000-Prozessoren und die einen neuen RISC ISA implementiert, der MIPS und RISC-V ähnlich ist), wurde Unterstützung für die Randomisierung des Adressraums des Kernels (KASLR), die Umplatzierung des Kernels im Speicher (Relocation), Hardware-Breakpoints und den kprobe-Mechanismus implementiert.
    • Im DAMOS-Mechanismus (Data Access Monitoring-based Operation Schemes), der es ermöglicht, Speicher basierend auf der Zugriffshäufigkeit freizugeben, wurde Unterstützung für Filter implementiert, um bestimmte Speicherbereiche von der Verarbeitung in DAMOS auszuschließen.
    • In der minimalen Standard-C-Bibliothek Nolibc wurde die Unterstützung für die s390-Architektur und die Arm Thumb1-Befehlssatzimplementierung hinzugefügt (neben der Unterstützung für ARM, AArch64, i386, x86_64, RISC-V und MIPS).
    • Objtool wurde optimiert, um die Kernelsammlung zu beschleunigen und den Spitzenverbrauch von Speicher während der Kompilierung zu reduzieren (bei der Kernelsammlung im „allyesconfig“-Modus treten nun keine Probleme mit dem erzwungenen Beenden von Prozessen auf Systemen mit 32 GB RAM mehr auf).
    • Die Unterstützung für die Kompilierung des Kernels mit dem Intel ICC-Compiler wurde eingestellt, da sie bereits seit längerer Zeit nicht mehr funktionierte und niemand Interesse gezeigt hat, dies zu beheben.
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • In tmpfs wird die Unterstützung für das Mapping von Benutzer-IDs an gemounteten Dateisystemen implementiert, welche verwendet wird, um Dateien eines bestimmten Benutzers auf einem gemounteten fremden Volume einem anderen Benutzer im aktuellen System zuzuordnen.
    • In Btrfs wurde zur Verringerung der Fragmentierung von Blockgruppen eine Trennung der Extents nach Größe beim Zuweisen von Blöcken sichergestellt, d.h. jede Blockgruppe wird nun auf kleine (bis zu 128 KB), mittlere (bis zu 8 MB) und große Extents beschränkt. Das RAID56-Implementierung wurde überarbeitet. Der Code zur Überprüfung von Prüfziffern wurde neu gestaltet. Es wurden Leistungsoptimierungen vorgenommen, die die Send-Operation bis zu 10-mal beschleunigen, indem utime für Verzeichnisse zwischengespeichert wird und Befehle nur bei Bedarf ausgeführt werden. Die Ausführung von fiemap-Operationen wurde um das Dreifache beschleunigt, indem Überprüfungen von Rückverweisen für gemeinsam genutzte Daten (Snapshots) übersprungen werden. Die Metadatenoperationen wurden um 10 % schneller durch Optimierung der Schlüsselsuche in b-tree-Strukturen.
    • Die Leistung des ext4-Dateisystems wurde erhöht, indem mehreren Prozessen die gleichzeitige Durchführung direkter E/A-Operationen auf zuvor zugewiesenen Blöcken ermöglicht wurde, und zwar mit gemeinsamen Inode-Sperren anstelle von exklusiven Sperren.
    • Im f2fs wurde die Lesbarkeit des Codes verbessert. Wichtige Probleme, die mit atomaren Schreibvorgängen und einem neuen Extent-Cache verbunden sind, wurden gelöst.
    • Im EROFS-Dateisystem (Enhanced Read-Only File System), das für die Verwendung in schreibgeschützten Partitionen vorgesehen ist, wurde die Möglichkeit implementiert, die Entpackungsoperationen von komprimierten Datei-Inhalten an CPUs zu binden, um Verzögerungen beim Datenzugriff zu reduzieren.
    • Der BFQ-I/O-Planer wurde um die Unterstützung fortschrittlicher Speicherlösungen wie solche mit mehreren separat gesteuerten Kopfantrieben (Multi Actuator) erweitert.
    • In die Client- und Server NFS-Implementierung wurde die Unterstützung für die Datenverschlüsselung unter Verwendung des AES-SHA2-Algorithmus hinzugefügt.
    • Im FUSE (Filesystems In User Space) Subsystem wurde die Unterstützung für eine Erweiterungsanfrage-Mechanismus hinzugefügt, der es ermöglicht, zusätzliche Informationen in die Anfrage einzufügen. Auf Basis dieser Möglichkeit wurde das Hinzufügen von Gruppen-IDs zur FS-Anfrage implementiert, die für die Berücksichtigung von Zugriffsrechten bei der Erstellung von Objekten im FS (create, mkdir, symlink, mknod) erforderlich sind.
  • Virtualisierung und Sicherheit
    • Im KVM-Hypervisor für x86-Systeme wurde die Unterstützung für erweiterte Hyper-V-Hypercalls hinzugefügt und deren Durchleitung an einen im Host-Umfeld laufenden Handler ermöglicht. Diese Änderung brachte die Unterstützung für die verschachtelte Ausführung des Hyper-V-Hypervisors mit sich.
    • Im KVM wurde der Zugriff der Gastmaschine auf PMU (Performance Monitor Unit)-Ereignisse, die mit der Leistungsmessung verbunden sind, vereinfacht.
    • Im memfd-Mechanismus, der es ermöglicht, einen Speicherbereich über einen zwischen Prozessen übergebenen Dateideskriptor zu identifizieren, wurde die Möglichkeit hinzugefügt, Bereiche zu erstellen, in denen die Ausführung von Code verboten ist (nicht ausführbare memfd) und in denen es in Zukunft unmöglich ist, Ausführungsrechte zu gewähren.
    • Eine neue prctl-Operation PR_SET_MDWE wurde hinzugefügt, die Versuche blockiert, Zugriffsrechte auf Speicher zu aktivieren, die sowohl Schreib- als auch Ausführungsrechte gleichzeitig erlauben.
    • Der Schutz vor Spectre-Angriffen wurde standardmäßig hinzugefügt und aktiviert. Er basiert auf dem automatischen IBRS-Modus (Enhanced Indirect Branch Restricted Speculation), der in den AMD Zen 4-Prozessoren implementiert ist und es ermöglicht, spekulatives Ausführen von Instruktionen während der Verarbeitung von Unterbrechungen, Systemaufrufen und Kontextwechseln adaptiv zu erlauben oder zu verbieten. Der vorgeschlagene Schutz führt zu geringeren Overhead-Kosten im Vergleich zum Retpoline-Schutz.
    • Eine Schwachstelle wurde beseitigt, die es ermöglichte, den Schutz vor Spectre v2-Angriffen bei gleichzeitiger Anwendung der Simultaneous Multithreading-Technologie (SMT oder Hyper-Threading) zu umgehen. Dies geschah durch das Deaktivieren des STIBP-Mechanismus (Single Thread Indirect Branch Predictors) im IBRS-Schutzmodus.
    • Für Systeme, die auf der ARM64-Architektur basieren, wurde ein neues Build-Ziel "virtconfig" hinzugefügt, das nur die minimalen Kernkomponenten aktiviert, die zum Booten in Virtualisierungssystemen erforderlich sind.
    • 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, die auf der Microsoft Pluton-Technologie basieren, wurde hinzugefügt.
  • Netzwerksubsystem
    • Ein netlink-Interface wurde hinzugefügt, um die PLCA (Physical Layer Collision Avoidance)-Unterebene zu konfigurieren, die in der IEEE 802.3cg-2019-Spezifikation definiert ist und in den Ethernet-Netzen 802.3cg (10Base-T1S) verwendet wird, die für die Verbindung von Internet-of-Things-Geräten und industriellen Systemen optimiert sind. Die Anwendung von PLCA ermöglicht eine Steigerung der Leistung in Ethernet-Netzen mit gemeinsam genutztem Medium.
    • Die Unterstützung der API „wireless extensions“ zur Verwaltung der WiFi 7 (802.11be) Wireless-Interfaces wurde eingestellt, da diese API nicht alle erforderlichen Einstellungen umfasst. Bei der Verwendung der „wireless extensions“-API, die weiterhin als emulierte Schicht unterstützt wird, wird nun für die meisten aktuellen Geräte eine Warnung ausgegeben.
    • Eine ausführliche Dokumentation zu der netlink-API wurde vorbereitet (für Kernel-Entwickler und für Entwickler von Anwendungen im Benutzerspeicher). Ein ynl-gen-c-Tool zur Generierung von C-Code auf Basis der YAML-Spezifikationen des Netlink-Protokolls wurde implementiert.
    • Die Unterstützung der IP_LOCAL_PORT_RANGE-Option wurde zu den Netzwerksockets hinzugefügt, um die Konfiguration von ausgehenden Verbindungen über Adressübersetzer ohne die Verwendung von SNAT zu erleichtern. Bei der Verwendung eines IP-Adressen Auf mehreren Hosts ermöglicht IP_LOCAL_PORT_RANGE die Verwendung eines eigenen Bereichs ausgehender Netzwerkports auf jedem Host, während am Gateway Pakete basierend auf den Portnummern umgeleitet werden.
    • Für MPTCP (MultiPath TCP) wurde die Möglichkeit zur Verarbeitung gemischter Ströme implementiert, in denen die Protokolle IPv4 und IPv6 verwendet werden. MPTCP ist eine Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen über mehrere Routen gleichzeitig über verschiedene Netzwerkinterfaces zu realisieren, die an unterschiedliche IP-Adressen gebunden sind.
    • Für IPv4 wurde die Verwendung der BIG TCP-Erweiterung implementiert, die die maximale Größe von TCP-Paketen auf 4 GB erhöht, um die Leistung hochgeschwindigkeitsinternen Datacenter-Netzwerke zu optimieren. Eine derartige Erhöhung der Paketgröße bei einer 16-Bit-Headerfeldgröße wird durch die Implementierung 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 RPS-Konfiguration (Receive Packet Steering) festgelegt werden kann, die für die Verteilung der Verarbeitung eingehender Datenströme auf CPU-Kerne auf Interrupt-Handler-Ebene verantwortlich ist.
    • Die Unterstützung für die Warteschlangenbearbeitungsdisziplinen 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 sind seit geraumer Zeit veraltet und es gab keine Interessierten, die deren Wartung fortsetzen wollten.
  • Ausrüstung
    • Alle Grafiktreiber basierend auf DRI1 wurden entfernt: i810 (alte integrierte Intel 8xx-Grafikkarten), 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 in Mesa unterstützt werden.
    • Veraltete Framebuffer-Treiber (fbdev) omap1, s3c2410, tmiofb und w100fb wurden entfernt.
    • Ein DRM-Treiber wurde für die in die Intel Meteor Lake (14. Generation) CPU integrierten VPU (Versatile Processing Unit) Blöcke hinzugefügt, um Operationen im Zusammenhang mit Computer Vision und maschinellem Lernen zu beschleunigen. Der Treiber wurde unter Verwendung des „accel“-Subsystems implementiert, das darauf abzielt, die Unterstützung von Rechenbeschleunigern zu gewährleisten, die sowohl in Form von separaten ASICs als auch als IP-Blöcke innerhalb von SoCs und GPUs bereitgestellt werden können.
    • Der i915-Treiber (Intel) hat die Unterstützung für diskrete Intel Arc-Grafikkarten (DG2/Alchemist) erweitert, die vorläufige Unterstützung für GPUs der Meteor Lake-Serie implementiert und die Unterstützung für GPU Intel Xe HP 4tile hinzugefügt.
    • Im amdgpu-Treiber wurde die Unterstützung für die AdaptiveSync-Technologie sowie die Möglichkeit zur Nutzung des Secure Display-Modus mit mehreren Bildschirmen hinzugefügt. 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.
    • Im msm-Treiber (GPU Qualcomm Adreno) wurde die Unterstützung für die Plattformen SM8350, SM8450, SM8550, SDM845 und SC8280XP hinzugefügt.
    • 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.
    • Der pata_parport-Treiber für IDE-Laufwerke, die über den parallelen Port angeschlossen werden, wurde implementiert. Der 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 gleichzeitig ein Drucker und eine Festplatte über den parallelen Port nicht angeschlossen werden können.
    • Der ath12k-Treiber für drahtlose Karten mit Qualcomm-Chips, die Wi-Fi 7 unterstützen, wurde hinzugefügt. Die Unterstützung für drahtlose Karten mit RealTek RTL8188EU-Chips wurde ebenfalls eingeführt.
    • Die Unterstützung für 46 Boards mit Prozessoren auf ARM64-Architektur wurde hinzugefügt, darunter 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 Qualcomm SoC MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 und SDM632, Rockchip RK3128 TV-Box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 und RK3328, TI K3 (AM642/AM654/AM68/AM69).

Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Kernel-Version 6.3 — Linux-libre 6.3-gnu — veröffentlicht, die von Firmware- und Treiberelementen befreit ist, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der Version 6.3 wurden Blobs in den neuen Treibern ath12k, aw88395 und peb2466 bereinigt, sowie in neuen Device-Tree-Dateien für QCOM-Geräte auf Basis der Architektur AArch64. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110 sowie in den Treibern für DVB-Karten mit Software-Dekodierung und in vorcompilierten BPF-Dateien wurde aktualisiert. Die Bereinigung in den Treibern mga, r128, tm6000, cpia2 und r8188eu wurde eingestellt, da sie aus dem Kernel entfernt wurden. Die Bereinigung von Blobs im Treiber i915 wurde verbessert.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster