Linux 6.3-Kernel-Release

Nach zweimonatiger Entwicklungszeit hat Linus Torvalds den Linux 6.3-Kernel veröffentlicht. Zu den bemerkenswertesten Änderungen gehören: Bereinigen veralteter ARM-Plattformen und Grafiktreiber, fortgesetzte Integration der Rust-Sprachunterstützung, Hwnoise-Dienstprogramm, Unterstützung für rot-schwarze Baumstrukturen in BPF, BIG TCP-Modus für IPv4, integrierter Dhrystone-Benchmark, Möglichkeit zur Deaktivierung Ausführung in memfd, Unterstützung für die Erstellung von HID-Treibern mit BPF, Änderungen wurden an Btrfs vorgenommen, um die Blockgruppenfragmentierung zu reduzieren.

Die neue Version akzeptierte 15637 Korrekturen von 2055 Entwicklern; Patchgröße - 76 MB (Änderungen betrafen 14296 Dateien, 1023183 hinzugefügte Codezeilen, 883103 gelöschte Zeilen). Zum Vergleich: In der Vorgängerversion wurden 16843 Korrekturen von 2178 Entwicklern vorgeschlagen; Patchgröße - 62 MB. Ungefähr 39 % aller im 6.3-Kernel eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 15 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 10 % beziehen sich auf den Netzwerkstapel, 5 % auf Dateisysteme und 3 % zu internen Kernel-Subsystemen.

Wichtige Neuerungen im Kernel 6.3:

  • Speicher- und Systemdienste
    • Es wurde eine erhebliche Bereinigung des Codes im Zusammenhang mit alten und ungenutzten ARM-Boards durchgeführt, wodurch die Größe der Kernel-Quellen um 150 Zeilen reduziert wurde. Über 40 alte ARM-Plattformen entfernt.
    • Implementierung der Möglichkeit, Treiber für Eingabegeräte mit der in Form von BPF-Programmen implementierten HID-Schnittstelle (Human Interface Device) zu erstellen.
    • Fortsetzung der Portierung zusätzlicher Funktionen im Zusammenhang mit der Verwendung von Rust als Zweitsprache für die Entwicklung von Treibern und Kernelmodulen aus dem Rust-für-Linux-Zweig. Die Rust-Unterstützung ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust als obligatorische Kernel-Build-Abhängigkeit enthalten ist. Die in früheren Versionen angebotene Funktionalität wurde um Unterstützung für die Arc-Typen (eine Implementierung von Zeigern mit einem Referenzzähler), ScopeGuard (Bereinigung wird durchgeführt, wenn der Gültigkeitsbereich verlassen wird) und ForeignOwnable (ermöglicht Zeigerbewegung zwischen C- und Rust-Code) erweitert. . Modul „borrow“ aus Paket „alloc“ entfernt (Typ „Cow“ und Merkmal „ToOwned“). Es wird darauf hingewiesen, dass der Stand der Unterstützung für Rust im Kernel bereits kurz davor steht, die ersten in Rust geschriebenen Module in den Kernel zu akzeptieren.
    • Linux im Benutzermodus (Ausführung des Kernels als Benutzerprozess) auf x86-64-Systemen unterstützt in Rust geschriebenen Code. Unterstützung für die Erstellung von Linux im Benutzermodus mithilfe von Clang mit aktivierten Link-Time-Optimierungen (LTO) hinzugefügt.
    • Das Dienstprogramm „hwnoise“ wurde hinzugefügt, um durch Hardwareverhalten verursachte Verzögerungen zu verfolgen. Abweichungen in der Ausführungszeit von Operationen (Jitter) werden festgestellt, wenn die Interrupt-Verarbeitung deaktiviert ist und eine Mikrosekunde in 10 Minuten Berechnungen überschreitet.
    • Es wurde ein Kernelmodul mit einer Dhrystone-Benchmark-Implementierung hinzugefügt, das zur Bewertung der CPU-Leistung in Konfigurationen ohne User-Space-Komponenten verwendet werden kann (z. B. in der Portierungsphase für neue SoCs, die nur das Laden des Kernels implementieren).
    • Kernel-Befehlszeilenoption „cgroup.memory=nobpf“ hinzugefügt, um die Speicherverbrauchsabrechnung für BPF-Programme zu deaktivieren, was für Systeme mit isolierten Containern nützlich sein kann.
    • Für BPF-Programme wird eine Implementierung der rot-schwarzen Baumdatenstruktur vorgeschlagen, die kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) verwendet, anstatt einen neuen Zuordnungstyp hinzuzufügen.
    • Im Mechanismus neustartbarer Sequenzen (rseq, restartable sequences) wurde den Prozessen die Möglichkeit hinzugefügt, parallele Ausführungskennungen (Memory-Map-Parallelitäts-ID) zu übergeben, die mit der CPU-Nummer identifiziert werden. Rseq bietet eine Möglichkeit zur schnellen, atomaren Ausführung von Vorgängen, die bei einer Unterbrechung durch einen anderen Thread bereinigt und erneut versucht werden.
    • ARM-Prozessoren unterstützen SME 2-Anweisungen (Scalable Matrix Extension).
    • Für die s390x- und RISC-V RV64-Architekturen ist Unterstützung für den „BPF-Trampolin“-Mechanismus implementiert, der eine Minimierung des Overheads bei der Übertragung von Aufrufen zwischen dem Kernel und BPF-Programmen ermöglicht.
    • Auf Systemen mit Prozessoren, die auf der RISC-V-Architektur basieren, wurde die Verwendung von „ZBB“-Anweisungen implementiert, um String-Operationen zu beschleunigen.
    • Für Systeme, die auf der LoongArch-Befehlssatzarchitektur basieren (die in den Loongson 3 5000-Prozessoren verwendet wird und eine neue RISC-ISA ähnlich wie MIPS und RISC-V implementiert), Unterstützung für die Kernel-Adressraum-Randomisierung (KASLR) und die Verschiebung des Kernels im Speicher (Relocation). ), Hardware-Punktestopp und Kprobe-Mechanismus.
    • Der DAMOS-Mechanismus (Data Access Monitoring-based Operation Schemes), der es Ihnen ermöglicht, Speicher basierend auf der Häufigkeit des Speicherzugriffs freizugeben, unterstützt Filter, um bestimmte Speicherbereiche von der Verarbeitung in DAMOS auszuschließen.
    • Die minimale Standard-C-Bibliothek Nolibc implementiert Unterstützung für die s390-Architektur und den Arm Thumb1-Befehlssatz (zusätzlich zur Unterstützung für ARM, AArch64, i386, x86_64, RISC-V und MIPS).
    • Objtool wurde optimiert, um Kernel-Builds zu beschleunigen und den Spitzenspeicherverbrauch während Builds zu reduzieren (beim Erstellen des Kernels im „allyesconfig“-Modus gibt es keine Probleme mit erzwungener Beendigung von Prozessen auf Systemen mit 32 GB RAM).
    • Die Unterstützung für die Assemblierung des Kernels durch den Intel ICC-Compiler wurde eingestellt, was schon lange nicht mehr möglich war und niemand den Wunsch geäußert hat, das Problem zu beheben.
  • Festplattensubsystem, E/A und Dateisysteme
    • tmpfs unterstützt die Benutzer-ID-Zuordnung eines gemounteten Dateisystems, die dazu verwendet wird, die Dateien eines bestimmten Benutzers auf einer gemounteten Fremdpartition einem anderen Benutzer auf dem aktuellen System zuzuordnen.
    • Um in Btrfs die Fragmentierung von Blockgruppen zu reduzieren, werden die Extents bei der Zuweisung von Blöcken nach Größe unterteilt, d. h. Jede Blockgruppe ist jetzt auf kleine (bis zu 128 KB), mittlere (bis zu 8 MB) und große Bereiche beschränkt. Die Raid56-Implementierung wurde überarbeitet. Neu gestalteter Code zur Überprüfung von Prüfsummen. Es wurden Leistungsoptimierungen vorgenommen, um den Sendevorgang um das Zehnfache zu beschleunigen, indem Utime für Verzeichnisse zwischengespeichert und Befehle nur bei Bedarf ausgeführt werden. 10x schnellere Fiemap-Vorgänge durch Überspringen von Backlink-Prüfungen für geteilte Daten (Snapshots). Durch die Optimierung der Suche nach Schlüsseln in B-Tree-Strukturen werden Vorgänge mit Metadaten um 10 % beschleunigt.
    • Verbesserte Leistung von ext4 FS, indem es mehreren Prozessen ermöglicht wird, gleichzeitig direkte E/A-Vorgänge an vorab zugewiesenen Blöcken mithilfe gemeinsamer Inode-Sperren anstelle exklusiver Sperren durchzuführen.
    • In f2fs wurde daran gearbeitet, die Lesbarkeit des Codes zu verbessern. Wichtige Probleme im Zusammenhang mit atomarem Schreiben und dem neuen Extent-Cache wurden behoben.
    • Das EROFS (Enhanced Read-Only File System), das für die Verwendung auf schreibgeschützten Partitionen entwickelt wurde, implementiert die Möglichkeit, Dekomprimierungsvorgänge für komprimierte Dateien an die CPU zu binden, um Verzögerungen beim Datenzugriff zu reduzieren.
    • Der BFQ-I/O-Scheduler bietet jetzt Unterstützung für erweiterte rotierende Festplattenlaufwerke, beispielsweise solche, die mehrere separat gesteuerte Laufwerke verwenden (Multi Actuator).
    • Der Implementierung des NFS-Clients und -Servers wurde Unterstützung für die Datenverschlüsselung mithilfe des AES-SHA2-Algorithmus hinzugefügt.
    • Das Subsystem FUSE (Filesystems In User Space) hat Unterstützung für den Abfrageerweiterungsmechanismus hinzugefügt, der es Ihnen ermöglicht, zusätzliche Informationen in die Abfrage einzufügen. Basierend auf dieser Funktion wird das Hinzufügen von Gruppenkennungen zur FS-Anfrage implementiert, die notwendig sind, um Zugriffsrechte beim Erstellen von Objekten im FS zu berücksichtigen (create, mkdir, symlink, mknod).
  • Virtualisierung und Sicherheit
    • Der KVM-Hypervisor für x86-Systeme bietet Unterstützung für erweiterte Hyper-V-Hypercalls und ermöglicht deren Weiterleitung an einen Handler, der in einer User-Space-Hostumgebung ausgeführt wird. Die Änderung ermöglichte die Implementierung der Unterstützung für den verschachtelten Start des Hyper-V-Hypervisors.
    • KVM erleichtert die Einschränkung des Gastsystemzugriffs auf PMU-Ereignisse (Performance Monitor Unit) im Zusammenhang mit der Leistungsmessung.
    • Dem Memfd-Mechanismus, mit dem Sie einen Speicherbereich anhand eines zwischen Prozessen übergebenen Dateideskriptors identifizieren können, wurde die Möglichkeit hinzugefügt, Bereiche zu erstellen, in denen die Codeausführung verboten ist (nicht ausführbares Memfd) und in denen keine Ausführungsrechte festgelegt werden können Zukunft.
    • Eine neue prctl-Operation PR_SET_MDWE wurde hinzugefügt, um Versuche zu blockieren, Speicherzugriffsrechte einzubeziehen, die gleichzeitiges Schreiben und Ausführen ermöglichen.
    • Der Schutz vor Angriffen der Spectre-Klasse wurde hinzugefügt und standardmäßig aktiviert, basierend auf dem automatischen IBRS-Modus (Enhanced Indirect Branch Restricted Speculation), der in AMD Zen 4-Prozessoren vorgeschlagen wird und es Ihnen ermöglicht, die spekulative Ausführung von Anweisungen während der Interrupt-Verarbeitung adaptiv zu aktivieren und zu deaktivieren , Systemaufrufe und Kontextwechsel. Der vorgeschlagene Schutz führt im Vergleich zum Retpoline-Schutz zu einem geringeren Overhead.
    • Behebt eine Schwachstelle, die den Spectre v2-Angriffsschutz umgehen könnte, wenn simultane Multithreading-Technologie (SMT oder Hyper-Threading) verwendet wird und durch die Deaktivierung des STIBP-Mechanismus (Single Thread Indirect Branch Predictors) bei Auswahl des IBRS-Schutzmodus verursacht wird.
    • Für ARM64-basierte Systeme wurde ein neues Build-Ziel „virtconfig“ hinzugefügt, das bei Auswahl nur den Mindestsatz an Kernel-Komponenten aktiviert, der zum Booten in Virtualisierungssystemen erforderlich ist.
    • Unterstützung für das Filtern von Systemaufrufen mithilfe des Seccomp-Mechanismus für die m68k-Architektur hinzugefügt.
    • Unterstützung für die integrierten CRB TPM2-Geräte (Command Response Buffer) von AMD Ryzen-Prozessoren hinzugefügt, die auf der Microsoft Pluton-Technologie basieren.
  • Netzwerk-Subsystem
    • Es wurde eine Netlink-Schnittstelle hinzugefügt, um die PLCA-Unterschicht (Physical Layer Collision Vermeidung) zu konfigurieren, die in der Spezifikation IEEE 802.3cg-2019 definiert ist und in 802.3cg (10Base-T1S) Ethernet-Netzwerken verwendet wird, die für die Verbindung von IoT-Geräten und Industriesystemen optimiert sind. Der Einsatz von PLCA verbessert die Leistung in Ethernet-Netzwerken mit gemeinsam genutzten Medien.
    • Die Unterstützung für die API „Wireless Extensions“ zur Verwaltung von WiFi 7 (802.11be) Wireless-Schnittstellen wurde eingestellt, da diese API nicht alle notwendigen Einstellungen abdeckt. Beim Versuch, die API „Wireless Extensions“ zu verwenden, die weiterhin als emulierte Ebene unterstützt wird, wird nun für die meisten aktuellen Geräte eine Warnung angezeigt.
    • Eine ausführliche Dokumentation zur Netlink-API wurde erstellt (für Kernel-Entwickler und für Entwickler von User-Space-Anwendungen). Das Dienstprogramm ynl-gen-c wurde implementiert, um C-Code basierend auf den YAML-Spezifikationen des Netlink-Protokolls zu generieren.
    • Den Netzwerk-Sockets wurde Unterstützung für die Option IP_LOCAL_PORT_RANGE hinzugefügt, um die Konfiguration ausgehender Verbindungen über Adressübersetzer ohne Verwendung von SNAT zu vereinfachen. Wenn Sie dieselbe IP-Adresse auf mehreren Hosts verwenden, ermöglicht IP_LOCAL_PORT_RANGE jedem Host, seinen eigenen Bereich ausgehender Netzwerkports zu verwenden und auf dem Gateway Pakete basierend auf Portnummern weiterzuleiten.
    • Für MPTCP (MultiPath TCP) ist die Möglichkeit implementiert, gemischte Streams zu verarbeiten, die die Protokolle IPv4 und IPv6 verwenden. MPTCP ist eine Erweiterung des TCP-Protokolls zur Organisation des Betriebs einer TCP-Verbindung mit der gleichzeitigen Zustellung von Paketen auf mehreren Routen über verschiedene Netzwerkschnittstellen, die an unterschiedliche IP-Adressen gebunden sind.
    • Für IPv4 ist die Möglichkeit der Verwendung der BIG TCP-Erweiterung implementiert, die es ermöglicht, die maximale TCP-Paketgröße auf bis zu 4 GB zu erhöhen, um den Betrieb interner Hochgeschwindigkeitsnetzwerke von Rechenzentren zu optimieren. Diese Erhöhung der Paketgröße mit einem 16-Bit-Header-Feld wird durch die Implementierung von „Jumbo“-Paketen erreicht, deren IP-Header-Größe auf 0 gesetzt ist und deren tatsächliche Größe in einem separaten 32-Bit-Feld in einem separaten angehängten Header übertragen wird.
    • Es wurde ein neuer sysctl-Parameter default_rps_mask hinzugefügt, über den Sie die Standard-RPS-Konfiguration (Receive Packet Steering) festlegen können, die für die Verteilung der Verarbeitung des eingehenden Datenverkehrs auf CPU-Kerne auf Interrupt-Handler-Ebene verantwortlich ist.
    • Die Unterstützung für Warteschlangendisziplinen wurde eingestellt, um den Datenverkehr von CBQ (klassenbasierte Warteschlangen), ATM (ATM Virtual Circuits), dsmark (differenzierter Servicemarker), tcindex (Verkehrskontrollindex) und RSVP (Ressourcenreservierungsprotokoll) einzuschränken. Diese Disziplinen wurden lange Zeit aufgegeben und niemand war bereit, sie weiterhin zu unterstützen.
  • Ausrüstung
    • Alle DRI1-basierten Grafiktreiber 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 veraltet waren und seit 2012 in Mesa nicht mehr unterstützt werden.
    • Veraltete Framebuffer-Treiber (fbdev) omap1, s3c2410, tmiofb und w100fb entfernt.
    • Für die in die Intel Meteor Lake-CPUs (14. Generation) integrierte VPU (Versatile Processing Unit) wurde ein DRM-Treiber hinzugefügt, der Computer Vision und maschinelle Lernvorgänge beschleunigen soll. Der Treiber wird mithilfe des Subsystems „accel“ implementiert, das Rechenbeschleuniger unterstützen soll, die sowohl in Form separater ASICs als auch als IP-Blöcke innerhalb des SoC und der GPU bereitgestellt werden können.
    • Der i915 (Intel)-Treiber erweitert die Unterstützung für separate Intel Arc (DG2/Alchemist)-Grafikkarten, führt vorläufige Unterstützung für Meteor Lake-GPUs ein und beinhaltet Unterstützung für Intel Xe HP 4tile-GPUs.
    • Der amdgpu-Treiber bietet Unterstützung für die AdaptiveSync-Technologie und die Möglichkeit, Secure Display mit mehreren Displays zu verwenden. Aktualisierte Unterstützung für DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x und DP 2.1.
    • Unterstützung für die Plattformen SM8350, SM8450, SM8550, SDM845 und SC8280XP zum MSM-Treiber (GPU Qualcomm Adreno) hinzugefügt.
    • Der Nouveau-Treiber hat die Unterstützung für alte ioctl-Aufrufe eingestellt.
    • Dem etnaviv-Treiber wurde experimentelle Unterstützung für NPU VerSilicon (VeriSilicon Neural Network Processor) hinzugefügt.
    • Der pata_parport-Treiber für IDE-Laufwerke, die über einen parallelen Port angeschlossen sind, wurde implementiert. Der hinzugefügte Treiber ermöglichte es, den alten PARIDE-Treiber aus dem Kernel zu entfernen und das ATA-Subsystem zu aktualisieren. Eine Einschränkung des neuen Treibers besteht darin, dass nicht gleichzeitig ein Drucker und eine Festplatte über einen parallelen Anschluss angeschlossen werden können.
    • Ath12k-Treiber für WLAN-Karten hinzugefügt, die auf Qualcomm-Chips mit Wi-Fi 7-Unterstützung basieren. Unterstützung für WLAN-Karten hinzugefügt, die auf RealTek RTL8188EU-Chips basieren.
    • Unterstützung für 46 Boards basierend auf der ARM64-Architektur 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 und auch Geräte Basierend auf 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/AM 654/AM 68 / AM69).

Gleichzeitig schuf die Latin American Free Software Foundation eine Variante des völlig freien Kernels 6.3 – Linux-libre 6.3-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang durch begrenzt ist der Hersteller. In Version 6.3 wurden Blobs in den neuen Treibern ath12k, aw88395 und peb2466 sowie in den neuen Devicetree-Dateien für AArch64-basierte qcom-Geräte bereinigt. Aktualisierter Blob-Reinigungscode in den Treibern und Subsystemen amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110 sowie in Treibern für DVB-Karten mit Software-Dekodierung und in vorkompilierten BPF-Dateien. Die Bereinigung der Treiber mga, r128, tm6000, cpia2 und r8188eu wurde gestoppt, da sie aus dem Kernel entfernt wurden. Verbesserte Blob-Bereinigung des i915-Treibers.

Source: opennet.ru

Kommentar hinzufügen