Release des Linux-Kernels 5.19

Nach zwei Monaten Entwicklung stellte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.19 vor. Zu den bemerkenswertesten Änderungen gehören: Unterstützung der Prozessorarchitektur LoongArch, Integration von „BIG TCP“-Patches, der „On-Demand“-Modus in fscache, die Entfernung des Codes zur Unterstützung des a.out-Formats, die Möglichkeit, ZSTD zur Kompression von Firmware zu verwenden, ein Interface für das Management von Speicherverdrängung aus dem Benutzerspeicher, Verbesserung der Zuverlässigkeit und Leistung des Zufallszahlengenerators sowie Unterstützung für Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) und ARM SME (Scalable Matrix Extension).

In der Ankündigung teilte Linus mit, dass der nächsten Kernel-Version voraussichtlich die Nummer 6.0 zugewiesen wird, da im Branch 5.x ausreichend Versionen angesammelt wurden, um die erste Zahl der Versionsnummer zu ändern. Die Änderung der Nummerierung erfolgt aus ästhetischen Gründen und stellt einen formellen Schritt dar, der das Unbehagen aufgrund der Ansammlung vieler Veröffentlichungen in dieser Serie mindert.

Linus erwähnte auch, dass er für die Erstellung des Releases ein Apple Notebook auf ARM64-Basis (Apple Silicon) mit einem Linux-Umfeld auf der Grundlage der Distribution Asahi Linux verwendet hat. Dies ist nicht Linus' Hauptarbeitsstation, aber er nutzte diese Plattform, um deren Eignung für die Arbeit am Kernel zu testen und sicherzustellen, dass er in der Lage ist, Kernel-Releases auf Reisen zu erstellen, während er ein leichtes Notebook zur Hand hat. Vor vielen Jahren hatte Linus bereits Erfahrung mit Apple-Hardware für die Entwicklung — einmal arbeitete er mit einem Computer auf Basis des CPU ppc970 und einem Macbook Air.

In die neue Version flossen 16.401 Korrekturen von 2.190 Entwicklern ein (in der vorherigen Version waren es 16.206 Korrekturen von 2.127 Entwicklern), die Größe des Patches beträgt 90 MB (die Änderungen betreffen 13.847 Dateien, es wurden 1.149.456 Codezeilen hinzugefügt und 349.177 Zeilen entfernt). Etwa 39 % aller Änderungen in 5.19 betreffen Treiber, ungefähr 21 % der Änderungen beziehen sich auf die Aktualisierung von architekturspezifischem Code, 11 % sind mit dem Netzwerk-Stack verbunden, 4 % mit Dateisystemen und 3 % mit internen Subsystemen des Kernels.

Die wichtigsten Neuerungen im Kernel 5.19:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Das EROFS-Dateisystem (Enhanced Read-Only File System), das für den Einsatz auf Partitionen gedacht ist, die nur im Nur-Lese-Modus verfügbar sind, wurde auf die Nutzung des fscache-Subsystems umgestellt, welches eine Datenkürzung ermöglicht. Diese Änderung hat die Leistungssysteme erheblich gesteigert, wenn eine große Anzahl von Containern aus einem EROFS-basierten Image gestartet wird.
    • Im fscache-Subsystem wurde ein On-Demand-Lesemodus eingeführt, der zur Optimierung von EROFS eingesetzt wird. Dieser neue Modus ermöglicht das Caching von Lesevorgängen aus Dateisystem-Images, die sich im lokalen System befinden. Im Gegensatz zum zuvor verfügbaren Arbeitsmodus, der auf das Caching in lokalen Dateisystemen ausgerichtet war und über Netzwerklaufwerke übertragene Daten nutzte, delegiert der On-Demand-Modus die Funktionen zum Abrufen von Daten und deren Speicherung im Cache an einen separaten Hintergrundprozess, der im Benutzerspeicher ausgeführt wird.
    • XFS bietet die Möglichkeit, Milliarden erweiterter Attribute im i-node zu speichern. Die maximale Anzahl an Extents für eine Datei wurde von 4 Milliarden auf 247 erhöht. Es wurde ein Modus für atomare Aktualisierungen mehrerer erweiterter Dateiattribute gleichzeitig implementiert.
    • Im Dateisystem Btrfs wurde die Handhabung von Sperren optimiert, wodurch die Leistung bei direktem Schreiben im nowait-Modus um etwa 7 % gesteigert werden konnte. Die Leistung von Operationen im NOCOW-Modus (ohne Copy-on-Write) wurde um etwa 3 % erhöht. Die Belastung des Seiten-Cache bei Verwendung des Befehls „send“ wurde verringert. Die minimale Größe der Unterseiten wurde von 64K auf 4K reduziert (es können Unterseiten verwendet werden, die kleiner sind als die Kernelseiten). Der Übergang von der Nutzung des Basisbaums (radix tree) zu dem Algorithmus XArrays wurde vollzogen.
    • Im NFS-Server wurde ein Modus zur Verlängerung des Sperrzustands hinzugefügt, der von einem Client gesetzt wurde, der auf Anfragen nicht mehr reagiert. Dieser neue Modus ermöglicht es, die Freigabe der Sperre bis zu einem Tag zu verzögern, sofern kein anderer Client eine konkurrierende Sperre anfordert. Im Standardmodus wird die Sperre 90 Sekunden nachdem der Client nicht mehr reagiert hat, freigegeben.
    • Im Ereignisverfolgungssystem in der Datei­systemeinstellung fanotify wurde das Flag FAN_MARK_EVICTABLE implementiert, mit dem das Fixieren von Ziel-i-Nodes im Cache deaktiviert werden kann, um beispielsweise Unterverzeichnisse zu ignorieren, ohne Teile davon im Cache zu fixieren.
    • Im Treiber für das FAT32-Dateisystem wurde die Unterstützung für das Abfragen von Informationen über das Erstellungsdatum einer Datei über den Systemaufruf statx hinzugefügt, mit der Implementierung einer effektiveren und funktionaleren Version von stat(), die erweiterte Informationen über die Datei zurückgibt.
    • Es wurden erhebliche Optimierungen am exFAT-Treiber vorgenommen, um die gleichzeitige Bereinigung einer Gruppe von Sektoren im aktiven ‘dirsync’-Modus anstelle der sequentiellen sektorweisen Bereinigung zu gewährleisten. Durch die Reduzierung der Blockanforderungen nach diesen Optimierungen wurde die Leistung beim Erstellen einer großen Anzahl von Verzeichnissen auf der SD-Karte um mehr als 73-85% je nach Clustergröße gesteigert.
    • Das Kernel-Update enthält das erste Korrekturupdate für den ntfs3-Treiber. Seit der Aufnahme von ntfs3 in den Kernel 5.15 im Oktober letzten Jahres wurde der Treiber nicht aktualisiert, und der Kontakt zu den Entwicklern ging verloren. Jetzt haben die Entwickler jedoch die Veröffentlichung von Änderungen wieder aufgenommen. In den vorgeschlagenen Patches wurden Fehler behoben, die zu Speicherlecks und Abstürzen führten, Probleme mit der Ausführung von xfstests gelöst, ungenutzter Code bereinigt und Schreibfehler korrigiert.
    • Für OverlayFS wurde die Möglichkeit implementiert, Identifikatoren von Benutzern auf gemounteten Dateisystemen zuzuordnen, die verwendet wird, um Dateien eines bestimmten Benutzers auf einer fremden Partition in der aktuellen Systemumgebung einem anderen Benutzer zuzuordnen.
  • Speicher und Systemdienste
    • Die anfängliche Unterstützung für die LoongArch-Befehlssatzarchitektur, die in den Loongson 3 5000-Prozessoren verwendet wird und ein neues RISC-ISA implementiert, das Ähnlichkeiten mit MIPS und RISC-V aufweist, wurde hinzugefügt. Die LoongArch-Architektur ist in drei Varianten verfügbar: beschränktes 32-Bit (LA32R), reguläres 32-Bit (LA32S) und 64-Bit (LA64).
    • Der Code zur Unterstützung des a.out-Executable-Formats wurde entfernt, das in der Version 5.1 als veraltet eingestuft wurde. Das a.out-Format wird seit langem nicht mehr auf Linux-Systemen verwendet, und die Generierung von a.out-Dateien wird von modernen Werkzeugen in den standardmäßigen Linux-Konfigurationen nicht unterstützt. Der Loader für a.out-Dateien kann vollständig im Benutzerspeicher implementiert werden.
    • Die Unterstützung spezifischer Boot-Optionen für die x86-Architektur (nosep, nosmap, nosmep, noexec und noclflush) wurde eingestellt.
    • Die Unterstützung für die veraltete CPU-Architektur h8300 (Renesas H8/300), die seit langem nicht mehr gepflegt wird, wurde eingestellt.
    • Die Möglichkeiten zur Reaktion auf die Erkennung von "Split Lock"-Sperren wurden erweitert, die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, da die Daten bei der Ausführung einer atomaren Anweisung zwei CPU-Cache-Linien überqueren. Solche Sperren führen zu einem erheblichen Leistungsabfall. Während das Kernsystem zuvor standardmäßig eine Warnung mit Informationen über den den Lock verursachenden Prozess ausgegeben hat, wird der problematische Prozess jetzt zusätzlich verlangsamt, um die Leistung des restlichen Systems zu erhalten.
    • Die Unterstützung des in Intel-Prozessoren implementierten IFS (In-Field Scan)-Mechanismus wurde hinzugefügt, der es ermöglicht, niedrigstufige diagnostische CPU-Tests auszuführen, die Probleme erkennen können, die von den Standardmitteln nicht identifiziert werden, basierend auf Fehlerkorrekturcodes (ECC) oder Paritätsbits. Die ausgeführten Tests werden in Form eines ladbaren Firmware-Updates bereitgestellt, ähnlich wie bei Mikrocode-Updates. Die Testergebnisse sind über sysfs verfügbar.
    • Die Möglichkeit, die bootconfig-Datei in den Kernel einzubetten, wurde hinzugefügt. Damit können neben den Befehlszeilenoptionen auch die Kernel-Betriebsparameter über eine Konfigurationsdatei definiert werden. Die Einbettung erfolgt über die Build-Option 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Zuvor wurde die bootconfig über das Anbinden an das initrd-Image definiert. Die Einbettung im Kernel ermöglicht die Verwendung von bootconfig in Konfigurationen ohne initrd.
    • Die Möglichkeit, Firmware zu laden, die mit dem Zstandard-Algorithmus komprimiert wurde, wurde implementiert. In sysfs wurde eine Reihe von Steuerdateien /sys/class/firmware/* hinzugefügt, die das Initiieren des Ladens von Firmware aus dem Benutzerspeicher erlaubt.
    • Im Interface des asynchronen Ein- und Ausgabemechanismus io_uring wurde ein neuer Flag IORING_RECVSEND_POLL_FIRST eingeführt. Wenn dieser gesetzt ist, wird die Netzwerkoperation zuerst zur Verarbeitung unter Verwendung von Polling übergeben, was Ressourcen in Situationen sparen kann, in denen eine verzögerte Verarbeitung der Operation zulässig ist. In io_uring wurde ebenfalls die Unterstützung für den Systemaufruf socket() hinzugefügt, neue Flags zur Vereinfachung der Verwaltung von Dateideskriptoren vorgeschlagen, ein 'Multi-Shot'-Modus für die Annahme mehrerer Verbindungen im accept()-Aufruf hinzugefügt und Operationen zur direkten Durchleitung von NVMe-Befehlen an das Gerät eingeführt.
    • Für die Xtensa-Architektur wurde die Unterstützung des Debugging-Tools KCSAN (Kernel Concurrency Sanitizer) implementiert, das zur dynamischen Erkennung von Race Conditions im Kernel dient. Außerdem wurde die Unterstützung des Schlafmodus und von Koprozessoren hinzugefügt.
    • Für die m68k-Architektur (Motorola 68000) wurde virtuelle Maschine (eine Plattform-Simulation), basierend auf dem Emulator Android Goldfish, realisiert.
    • Für die AArch64-Architektur wurde die Unterstützung für die Erweiterungen Armv9-A SME (Scalable Matrix Extension) implementiert.
    • Im eBPF-Subsystem wurden typisierte Zeiger in Map-Strukturen für die Speicherung aktiviert, und es wurde Unterstützung für dynamische Zeiger hinzugefügt.
    • Ein neuer proaktiver Mechanismus zur Speicherverdrängung wurde vorgeschlagen, der die Verwaltung aus dem Benutzerspeicher über die Datei memory.reclaim unterstützt. Das Schreiben einer Zahl in die angegebene Datei führt zu einem Versuch, die entsprechende Anzahl von Bytes aus der mit der cgroup verbundenen Menge zu verdrängen.
    • Die Genauigkeit der Speichernutzungserfassung bei der Datenkompression im Swap-Bereich wurde mithilfe des zswap-Mechanismus verbessert.
    • Die Architektur RISC-V unterstützt nun die Ausführung von 32-Bit-Executables auf 64-Bit-Systemen. Es wurde ein Modus hinzugefügt, um begrenzende Attribute an Speicherseiten zu binden (z.B. um das Caching zu verbieten), und die Funktion kexec_file_load() wurde implementiert.
    • Die Unterstützung von 32-Bit-Systemen Armv4T und Armv5 wurde für die Verwendung in universellen plattformübergreifenden Kernel-Builds angepasst, die für verschiedene ARM-Systeme geeignet sind.
  • Virtualisierung und Sicherheit
    • Im EFI-Subsystem wurde die Möglichkeit der vertraulichen Übertragung vertraulicher Informationen an Gästesysteme umgesetzt, ohne dass diese dem Host-System offengelegt werden. Die Daten werden über das Verzeichnis security/coco im securityfs bereitgestellt.
    • Im Lockdown-Schutzmodus, der den Zugriff des Benutzerkontos root auf den Kernel einschränkt und Umgehungen des UEFI Secure Boot blockiert, wurde eine Sicherheitslücke beseitigt, die eine Umgehung des Schutzes durch Manipulationen am Kernel-Debugger erlaubte.
    • Es wurden Patches implementiert, die darauf abzielen, die Zuverlässigkeit und Leistung des Generators für Pseudo-Zufallszahlen zu verbessern.
    • Beim Zusammenbau mit Clang 15 wurde Unterstützung für den Mechanismus zur Randomisierung von Kernelstrukturen implementiert.
    • Im Landlock-Mechanismus, der die Interaktion einer Gruppe von Prozessen mit der Außenwelt einschränkt, wurde Unterstützung für Regeln eingeführt, die die Ausführung von Datei-Umbenennungen kontrollieren.
    • Die IMA-Subsystem (Integrity Measurement Architecture), die zur Überprüfung der Integrität von Betriebssystemkomponenten über digitale Signaturen und Hashes dient, wurde auf die Verwendung des fs-verity-Moduls zur Verifizierung von Dateien umgestellt.
    • Die Logik für den Zugriff auf die eBPF-Subsysteme wurde geändert – zuvor wurden alle Befehle, die mit dem Systemaufruf bpf() verbunden sind, deaktiviert. Seit Version 5.19 haben wir jedoch den Zugriff auf Befehle beibehalten, die keine Objekte erstellen. In diesem Verhalten ist ein privilegierter Prozess erforderlich, um ein BPF-Programm zu laden, aber anschließend können privilegierte Prozesse mit diesem Programm interagieren.
    • Die Unterstützung für die AMD SEV-SNP-Erweiterung (Secure Nested Paging) wurde hinzugefügt, die einen sicheren Umgang mit verschachtelten Seitentabellen ermöglicht und vor den Angriffen „undeSErVed“ und „SEVerity“ auf AMD EPYC-Prozessoren schützt, die den Schutzmechanismus von AMD SEV (Secure Encrypted Virtualization) umgehen können.
    • Die Unterstützung für den Intel TDX-Mechanismus (Trusted Domain Extensions) wurde hinzugefügt, der versucht, den Zugriff durch Dritte auf den verschlüsselten Speicher zu blockieren. virtuellen Maschinen.
    • Im virtio-blk-Treiber, der zur Emulation von Blockgeräten verwendet wird, wurde die Unterstützung für die Eingabe/Ausgabe durch Polling hinzugefügt, was in durchgeführten Tests zu einer Verringerung der Latenz um etwa 10 % führte.
  • Netzwerksubsystem
    • Im Lieferumfang enthalten ist eine Reihe von BIG TCP-Patches, die es ermöglichen, die maximale TCP-Paketgröße auf 4 GB zu erhöhen, um die Leistung hochgeschwindigkeitsinterner Netzwerke in Rechenzentren zu optimieren. Diese Erhöhung der Paketgröße bei einer 16-Bit-Feldgröße im Header 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. Bei Leistungstests führte eine Paketgröße von 185 KB zu einer Steigerung der Durchsatzrate um 50 % und einer erheblichen Reduzierung der Latenzzeiten.
    • Die Integration von Mitteln zur Überwachung der Gründe für das Paket-Discarding (Reason-Codes) wird im Netzwerk-Stack fortgesetzt. Der Grundcode wird beim Freigeben des mit dem Paket verbundenen Speichers übertragen und ermöglicht die Berücksichtigung von Situationen wie Paketdiscarding aufgrund von Header-Feldfüllfehlern, der Erkennung von Spoofing durch den rp_filter, falsche Prüfziffern, Speicherengpässe, Auslösung von IPSec XFRM-Regeln, falsche TCP-Folge-Nummern usw.
    • Die Unterstützung für den Rückfall von MPTCP (MultiPath TCP) auf die Verwendung von normalem TCP wurde hinzugefügt, wenn bestimmte Funktionen von MPTCP nicht genutzt werden können. MPTCP ist eine Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen mit gleichzeitiger Paketlieferung über mehrere Routen, die verschiedenen Netzwerkinterfaces mit unterschiedlichen IP-Adressen zugeordnet sind, zu organisieren. Eine API zur Verwaltung von MPTCP-Streams aus dem Benutzerraum wurde ergänzt.
  • Ausrüstung
    • Über 420.000 Zeilen Code wurden im Zusammenhang mit dem amdgpu-Treiber hinzugefügt, von denen etwa 400.000 Zeilen automatisch generierte Headerdateien mit Daten zu ASIC-Registern im Treiber für AMD-GPUs sind. Weitere 22.500 Zeilen stellen die grundlegende Implementierung der Unterstützung für AMD SoC21 bereit. Die Gesamtgröße des Treibers für AMD-GPUs hat 4 Millionen Zeilen Code überschritten. Neben SoC21 bietet der AMD-Treiber Unterstützung für SMU 13.x (System Management Unit), aktualisierte Unterstützung für USB-C und GPUVM und bereitet die Unterstützung der nächsten Plattformgenerationen RDNA3 (RX 7000) und CDNA (AMD Instinct) vor.
    • Im i915 (Intel) Treiber wurden die Funktionen zur Verwaltung des Energieverbrauchs erweitert. Es wurden GPU-Identifikatoren für die Intel DG2 (Arc Alchemist) Grafikkarten, die in Laptops eingesetzt werden, hinzugefügt, erste Unterstützung für die Intel Raptor Lake-P (RPL-P) Plattform bereitgestellt und Informationen über die Arctic Sound-M Grafikkarten integriert. Zudem wurde ein ABI für Rechenmodule implementiert, die Unterstützung für das Tile4-Format zu den DG2 Karten hinzugefügt und DisplayPort HDR Unterstützung für Systeme auf Basis der Haswell Mikroarchitektur realisiert.
    • Im Nouveau Treiber wurde der Wechsel zur Verwendung des drm_gem_plane_helper_prepare_fb Handlers vollzogen, und für einige Strukturen sowie Variablen wurde statische Speicherzuweisung verwendet. Was den Einsatz der von NVIDIA veröffentlichten Open-Source Kernel-Module betrifft, so besteht die Arbeit bislang darin, Fehler zu identifizieren und zu beheben. In der Zukunft wird die veröffentlichte Firmware zur Verbesserung der Treiberleistung eingesetzt werden.
    • Ein Treiber für den NVMe-Controller, der in Apple-Computern mit M1-Chip verwendet wird, wurde hinzugefügt.

Parallel dazu hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 5.19 – Linux-libre 5.19-gnu – erstellt, die von Elementen aus Firmware und Treibern befreit ist, die nicht-freie Komponenten oder Codestellen enthalten, deren Nutzung vom Hersteller eingeschränkt ist. In dieser neuen Version wurden Treiber für pureLiFi X/XL/XC und TI AMx3 Wkup-M3 IPC bereinigt. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu wurde aktualisiert. Die Verarbeitung von Device-Tree-Dateien für Qualcomm AArch64 wurde implementiert. Unterstützung für das neue Benennungsschema von Komponenten des Sound Open Firmware wurde hinzugefügt. Die Bereinigung des Treibers ATM Ambassador, der aus dem Kernel entfernt wurde, wurde eingestellt. Die Verwaltung der Blob-Bereinigung in HDCP und Mellanox Core wurde in separate kconfig-Tags übertragen.

Quelle: opennet.ru

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