Linux 5.19-Kernel-Release

Nach zweimonatiger Entwicklungszeit präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.19. Zu den bemerkenswertesten Änderungen gehören: Unterstützung der LoongArch-Prozessorarchitektur, Integration von „BIG TCP“-Patches, On-Demand-Modus in fscache, Codeentfernung zur Unterstützung des a.out-Formats, die Möglichkeit, ZSTD für die Firmware-Komprimierung zu verwenden, eine Schnittstelle für Verwaltung der Speicherentfernung aus dem Benutzerbereich, Erhöhung der Zuverlässigkeit und Leistung des Pseudozufallszahlengenerators, Unterstützung für Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) und ARM SME-Erweiterungen (Scalable Matrix Extension).

In der Ankündigung sagte Linus, dass die nächste Kernel-Version höchstwahrscheinlich die Nummer 6.0 haben wird, da der 5.x-Zweig genügend Versionen angesammelt hat, um die erste Nummer in der Versionsnummer zu ändern. Die Änderung der Nummerierung erfolgt aus ästhetischen Gründen und ist ein formaler Schritt, der die Unannehmlichkeiten aufgrund der Anhäufung einer großen Anzahl von Ausgaben in der Serie lindert.

Linus erwähnte auch, dass er zur Erstellung der Veröffentlichung einen Apple-Laptop auf Basis der ARM64-Architektur (Apple Silicon) mit einer Linux-Umgebung auf Basis der Asahi-Linux-Distribution verwendet habe. Es ist nicht Linus‘ primäre Workstation, aber er nutzte die Plattform, um ihre Eignung für Kernel-Arbeiten zu testen und um sicherzustellen, dass er Kernel-Releases erstellen konnte, während er mit einem leichten Laptop unterwegs war. Zuvor, vor vielen Jahren, hatte Linus Erfahrung mit der Verwendung von Apple-Geräten für die Entwicklung – er nutzte einmal einen PC mit ppc970-CPU und einen MacBook Air-Laptop.

Die neue Version enthält 16401 Fixes von 2190 Entwicklern (im letzten Release waren es 16206 Fixes von 2127 Entwicklern), die Patchgröße beträgt 90 MB (die Änderungen betrafen 13847 Dateien, 1149456 Zeilen Code wurden hinzugefügt, 349177 Zeilen wurden gelöscht). Etwa 39 % aller in 5.19 eingeführten Änderungen beziehen sich auf Gerätetreiber, etwa 21 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 11 % beziehen sich auf den Netzwerkstapel, 4 % beziehen sich auf Dateisysteme und 3 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Wichtige Neuerungen im Kernel 5.19:

  • Festplattensubsystem, E/A und Dateisysteme
    • Das EROFS-Dateisystem (Enhanced Read-Only File System), das für die Verwendung auf schreibgeschützten Partitionen gedacht ist, wurde so konvertiert, dass es das fscache-Subsystem verwendet, das Daten-Caching ermöglicht. Durch die Änderung wurde die Leistung von Systemen, in denen eine große Anzahl von Containern von einem EROFS-basierten Image gestartet wird, erheblich verbessert.
    • Dem fscache-Subsystem wurde ein On-Demand-Lesemodus hinzugefügt, der zur Optimierung von EROFS verwendet wird. Mit dem neuen Modus können Sie das Lese-Caching von FS-Bildern organisieren, die sich im lokalen System befinden. Im Gegensatz zum ursprünglich verfügbaren Betriebsmodus, der sich auf das Zwischenspeichern von über Netzwerkdateisysteme übertragenen Daten im lokalen Dateisystem konzentriert, delegiert der „On-Demand“-Modus die Funktionen des Abrufens von Daten und des Schreibens in den Cache an einen separaten Hintergrundprozess, der im Benutzerbereich ausgeführt wird.
    • XFS bietet die Möglichkeit, Milliarden erweiterter Attribute in einem I-Node zu speichern. Die maximale Anzahl von Extents für eine Datei wurde von 4 Milliarden auf 247 erhöht. Es wurde ein Modus implementiert, um mehrere erweiterte Dateiattribute gleichzeitig atomar zu aktualisieren.
    • Das Btrfs-Dateisystem hat die Arbeit mit Sperren optimiert, was eine Leistungssteigerung von ca. 7 % beim direkten Schreiben im Nowait-Modus ermöglichte. Die Leistung von Vorgängen im NOCOW-Modus (ohne Copy-on-Write) wird um etwa 3 % gesteigert. Die Belastung des Seitencaches beim Ausführen des „senden“-Befehls wurde reduziert. Die Mindestgröße der Unterseiten wurde von 64 KB auf 4 KB reduziert (es können Unterseiten verwendet werden, die kleiner als Kernelseiten sind). Es wurde ein Übergang von der Verwendung eines Basisbaums zum XArrays-Algorithmus vollzogen.
    • Dem NFS-Server wurde ein Modus hinzugefügt, um die Beibehaltung des Sperrstatus zu verlängern, der von einem Client festgelegt wurde, der nicht mehr auf Anfragen reagiert. Mit dem neuen Modus können Sie das Löschen der Sperre um bis zu einen Tag verzögern, es sei denn, ein anderer Client fordert eine konkurrierende Sperre an. Im Normalmodus wird die Blockierung 90 Sekunden, nachdem der Client nicht mehr reagiert, aufgehoben.
    • Das Ereignisverfolgungs-Subsystem im fanotify FS implementiert das Flag FAN_MARK_EVICTABLE, mit dem Sie das Anheften von Ziel-I-Nodes im Cache deaktivieren können, um beispielsweise Unterzweige zu ignorieren, ohne ihre Teile im Cache anzuheften.
    • Der Treiber für das FAT32-Dateisystem bietet Unterstützung für den Erhalt von Informationen über den Zeitpunkt der Dateierstellung durch den statx-Systemaufruf durch die Implementierung einer effizienteren und funktionaleren Version von stat(), die erweiterte Informationen über die Datei zurückgibt.
    • Am exFAT-Treiber wurden erhebliche Optimierungen vorgenommen, um das gleichzeitige Löschen einer Gruppe von Sektoren zu ermöglichen, wenn der „Dirsync“-Modus aktiv ist, anstelle des sequentiellen Löschens Sektor für Sektor. Durch die Reduzierung der Anzahl der Blockanfragen nach der Optimierung stieg die Leistung beim Erstellen einer großen Anzahl von Verzeichnissen auf der SD-Karte je nach Clustergröße um mehr als 73–85 %.
    • Der Kernel enthält das erste Korrekturupdate für den NTFS3-Treiber. Da ntfs3 letzten Oktober in den 5.15-Kernel aufgenommen wurde, wurde der Treiber nicht aktualisiert und die Kommunikation mit den Entwicklern ist verloren gegangen, aber die Entwickler haben nun wieder mit der Veröffentlichung von Änderungen begonnen. Die vorgeschlagenen Patches beseitigten Fehler, die zu Speicherlecks und Abstürzen führten, lösten Probleme bei der Ausführung von xfstests, bereinigten nicht verwendeten Code und korrigierten Tippfehler.
    • Für OverlayFS wurde die Möglichkeit implementiert, Benutzer-IDs von gemounteten Dateisystemen zuzuordnen, die verwendet wird, um die Dateien eines bestimmten Benutzers auf einer gemounteten Fremdpartition mit einem anderen Benutzer auf dem aktuellen System abzugleichen.
  • Speicher- und Systemdienste
    • Erste Unterstützung für die in den Loongson 3 5000-Prozessoren verwendete LoongArch-Befehlssatzarchitektur hinzugefügt, die das neue RISC ISA implementiert, ähnlich wie MIPS und RISC-V. Die LoongArch-Architektur ist in drei Varianten erhältlich: abgespecktes 32-Bit (LA32R), reguläres 32-Bit (LA32S) und 64-Bit (LA64).
    • Code zur Unterstützung des ausführbaren Dateiformats a.out entfernt, das in Version 5.1 veraltet war. Das a.out-Format ist auf Linux-Systemen seit langem veraltet und die Generierung von a.out-Dateien wird von modernen Tools in Standard-Linux-Konfigurationen nicht unterstützt. Der Loader für a.out-Dateien kann vollständig im Userspace implementiert werden.
    • Die Unterstützung für x86-spezifische Boot-Optionen wurde eingestellt: nosp, nosmap, nosmep, noexec und noclflush.
    • Die Unterstützung für die veraltete CPU-h8300-Architektur (Renesas H8/300), die lange Zeit ohne Unterstützung war, wurde eingestellt.
    • Erweiterte Funktionen im Zusammenhang mit der Reaktion auf die Erkennung von geteilten Sperren („Split Locks“), die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, da die Daten bei der Ausführung einer atomaren Anweisung zwei CPU-Cache-Zeilen überschreiten. Solche Blockaden führen zu einem erheblichen Leistungsabfall. Während der Kernel zuvor standardmäßig eine Warnung mit Informationen über den Prozess ausgab, der die Blockierung verursacht hat, wird der problematische Prozess nun weiter verlangsamt, um die Leistung des restlichen Systems zu erhalten.
    • Unterstützung für den in Intel-Prozessoren implementierten IFS-Mechanismus (In-Field Scan) hinzugefügt, der es Ihnen ermöglicht, CPU-Diagnosetests auf niedriger Ebene durchzuführen, die Probleme identifizieren können, die von Standardtools basierend auf Fehlerkorrekturcodes (ECC) oder Paritätsbits nicht erkannt werden . Die durchgeführten Tests erfolgen in Form herunterladbarer Firmware, die ähnlich wie Mikrocode-Updates konzipiert ist. Testergebnisse sind über sysfs verfügbar.
    • Es wurde die Möglichkeit hinzugefügt, eine Bootconfig-Datei in den Kernel einzubetten, die es zusätzlich zu Befehlszeilenoptionen ermöglicht, die Parameter des Kernels über eine Einstellungsdatei zu bestimmen. Die Einbettung erfolgt über die Assembly-Option „CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»“. Bisher wurde die Bootconfig durch Anhängen an das initrd-Image ermittelt. Durch die Integration in den Kernel kann bootconfig in Konfigurationen ohne initrd verwendet werden.
    • Die Möglichkeit, mit dem Zstandard-Algorithmus komprimierte Firmware herunterzuladen, wurde implementiert. Eine Reihe von Steuerdateien /sys/class/firmware/* wurde zu sysfs hinzugefügt, mit denen Sie das Laden der Firmware aus dem Benutzerbereich initiieren können.
    • Die asynchrone E/A-Schnittstelle io_uring bietet ein neues Flag, IORING_RECVSEND_POLL_FIRST, das, wenn es gesetzt ist, zuerst einen Netzwerkvorgang zur Verarbeitung per Polling sendet, was in Situationen, in denen die Verarbeitung des Vorgangs mit einer gewissen Verzögerung akzeptabel ist, Ressourcen sparen kann. io_uring fügte außerdem Unterstützung für den Systemaufruf socket() hinzu, schlug neue Flags zur Vereinfachung der Verwaltung von Dateideskriptoren vor, fügte einen „Multi-Shot“-Modus zum gleichzeitigen Akzeptieren mehrerer Verbindungen im Accept()-Aufruf hinzu und fügte Operationen zur Weiterleitung von NVMe hinzu Befehle direkt an das Gerät.
    • Die Xtensa-Architektur bietet Unterstützung für das Debugging-Tool KCSAN (Kernel Concurrency Sanitizer), das zur dynamischen Erkennung von Race Conditions im Kernel entwickelt wurde. Außerdem wurde Unterstützung für den Schlafmodus und Coprozessoren hinzugefügt.
    • Für die m68k-Architektur (Motorola 68000) wurde eine virtuelle Maschine (Plattformsimulator) basierend auf dem Android Goldfish-Emulator implementiert.
    • Für die AArch64-Architektur wurde Unterstützung für Armv9-A SME-Erweiterungen (Scalable Matrix Extension) implementiert.
    • Das eBPF-Subsystem ermöglicht das Speichern typisierter Zeiger in Kartenstrukturen und fügt außerdem Unterstützung für dynamische Zeiger hinzu.
    • Es wird ein neuer proaktiver Speicherrückgewinnungsmechanismus vorgeschlagen, der die Benutzerraumsteuerung mithilfe der Datei „memory.reclaim“ unterstützt. Durch das Schreiben einer Zahl in die angegebene Datei wird versucht, die entsprechende Anzahl von Bytes aus dem mit der cgroup verknüpften Satz zu entfernen.
    • Verbesserte Genauigkeit der Speichernutzung beim Komprimieren von Daten in der Swap-Partition mithilfe des Zswap-Mechanismus.
    • Für die RISC-V-Architektur wird Unterstützung für die Ausführung von ausführbaren 32-Bit-Dateien auf 64-Bit-Systemen bereitgestellt, ein Modus hinzugefügt, um restriktive Attribute an Speicherseiten zu binden (z. B. um das Caching zu deaktivieren) und die Funktion kexec_file_load() implementiert .
    • Die Implementierung der Unterstützung für 32-Bit-Armv4T- und Armv5-Systeme ist für die Verwendung in universellen Multiplattform-Kernel-Builds angepasst, die für verschiedene ARM-Systeme geeignet sind.
  • Virtualisierung und Sicherheit
    • Das EFI-Subsystem implementiert die Möglichkeit, geheime Informationen vertraulich an Gastsysteme zu übertragen, ohne sie dem Hostsystem preiszugeben. Die Daten werden über das Verzeichnis security/coco in securityfs bereitgestellt.
    • Der Lockdown-Schutzmodus, der den Root-Benutzerzugriff auf den Kernel einschränkt und UEFI Secure Boot-Umgehungspfade blockiert, hat eine Lücke geschlossen, die es ermöglichte, den Schutz durch Manipulation des Kernel-Debuggers zu umgehen.
    • Enthalten sind Patches zur Verbesserung der Zuverlässigkeit und Leistung des Pseudozufallszahlengenerators.
    • Beim Erstellen mit Clang 15 wird die Unterstützung für den Mechanismus zur Randomisierung von Kernelstrukturen implementiert.
    • Der Landlock-Mechanismus, der es Ihnen ermöglicht, die Interaktion einer Gruppe von Prozessen mit der externen Umgebung einzuschränken, bietet Unterstützung für Regeln, mit denen Sie die Ausführung von Dateiumbenennungsvorgängen steuern können.
    • Das IMA-Subsystem (Integrity Measurement Architecture), das die Integrität von Betriebssystemkomponenten mithilfe digitaler Signaturen und Hashes überprüfen soll, wurde auf die Verwendung des fs-verity-Moduls zur Dateiüberprüfung umgestellt.
    • Die Aktionslogik beim Deaktivieren des unprivilegierten Zugriffs auf das eBPF-Subsystem wurde geändert – bisher waren alle mit dem Systemaufruf bpf() verbundenen Befehle deaktiviert, und ab Version 5.19 bleibt der Zugriff auf Befehle, die nicht zur Erstellung von Objekten führen, nicht mehr möglich . Dieses Verhalten erfordert, dass ein privilegierter Prozess ein BPF-Programm lädt, aber dann können nichtprivilegierte Prozesse mit dem Programm interagieren.
    • Unterstützung für die AMD SEV-SNP-Erweiterung (Secure Nested Paging) hinzugefügt, die sicheres Arbeiten mit verschachtelten Speicherseitentabellen ermöglicht und vor „undeSErVed“- und „SEVerity“-Angriffen auf AMD EPYC-Prozessoren schützt, die die Umgehung von AMD SEV (Secure Encrypted Virtualization) ermöglichen ) Schutzmechanismus.
    • Unterstützung für den Intel TDX-Mechanismus (Trusted Domain Extensions) hinzugefügt, der es Ihnen ermöglicht, Versuche Dritter zu blockieren, auf den verschlüsselten Speicher virtueller Maschinen zuzugreifen.
    • Der virtio-blk-Treiber, der zum Emulieren von Blockgeräten verwendet wird, bietet zusätzliche Unterstützung für I/O mithilfe von Polling, was Tests zufolge die Latenz um etwa 10 % reduziert hat.
  • Netzwerk-Subsystem
    • Das Paket enthält eine Reihe von BIG TCP-Patches, mit denen Sie die maximale Paketgröße eines TCP-Pakets auf 4 GB erhöhen können, um den Betrieb interner Hochgeschwindigkeits-Rechenzentrumsnetzwerke zu optimieren. Eine ähnliche Erhöhung der Paketgröße bei einer Header-Feldgröße von 16 Bit wird durch die Implementierung von „Jumbo“-Paketen erreicht, deren Größe im IP-Header auf 0 gesetzt ist und die tatsächliche Größe in einem separaten 32-Bit-Format übertragen wird Feld in einem separaten angehängten Header. Bei Leistungstests steigerte die Einstellung der Paketgröße auf 185 KB den Durchsatz um 50 % und reduzierte die Latenz bei der Datenübertragung erheblich.
    • Die Arbeit an der Integration von Tools in den Netzwerkstapel zur Verfolgung der Gründe für das Verwerfen von Paketen (Ursachencodes) wurde fortgesetzt. Der Ursachencode wird gesendet, wenn der mit dem Paket verbundene Speicher freigegeben wird, und berücksichtigt Situationen wie das Verwerfen von Paketen aufgrund von Header-Fehlern, die Erkennung von rp_filter-Spoofing, eine ungültige Prüfsumme, nicht genügend Speicher, ausgelöste IPSec-XFRM-Regeln, eine ungültige TCP-Sequenznummer usw.
    • Unterstützung für das Zurücksetzen von MPTCP-Verbindungen (MultiPath TCP) auf die Verwendung von regulärem TCP hinzugefügt, in Situationen, in denen bestimmte MPTCP-Funktionen nicht verwendet werden können. MPTCP ist eine Erweiterung des TCP-Protokolls zum Organisieren des Betriebs einer TCP-Verbindung mit der gleichzeitigen Zustellung von Paketen auf mehreren Routen über verschiedene Netzwerkschnittstellen, die unterschiedlichen IP-Adressen zugeordnet sind. API zur Steuerung von MPTCP-Streams aus dem Benutzerbereich hinzugefügt.
  • Ausrüstung
    • Über 420 Zeilen Code im Zusammenhang mit dem amdgpu-Treiber hinzugefügt, davon etwa 400 Zeilen automatisch generierte Header-Dateien für ASIC-Registerdaten im AMD-GPU-Treiber, und weitere 22.5 Zeilen bieten eine erste Implementierung der Unterstützung für den AMD SoC21. Die Gesamtgröße der Treiber für AMD-GPUs überstieg 4 Millionen Codezeilen. Zusätzlich zu SoC21 umfasst der AMD-Treiber Unterstützung für SMU 13.x (System Management Unit), aktualisierte Unterstützung für USB-C und GPUVM sowie Vorbereitungen für die Unterstützung der nächsten Generationen der Plattformen RDNA3 (RX 7000) und CDNA (AMD Instinct). .
    • Der i915-Treiber (Intel) verfügt über erweiterte Funktionen im Zusammenhang mit der Energieverwaltung. Identifikatoren für Intel DG2 (Arc Alchemist) GPUs, die auf Laptops verwendet werden, hinzugefügt, anfängliche Unterstützung für die Intel Raptor Lake-P (RPL-P)-Plattform bereitgestellt, Informationen zu Arctic Sound-M-Grafikkarten hinzugefügt), ABI für Compute Engines implementiert, hinzugefügt für DG2-Karten unterstützen das Tile4-Format; für Systeme, die auf der Haswell-Mikroarchitektur basieren, ist DisplayPort HDR-Unterstützung implementiert.
    • Der Nouveau-Treiber ist auf die Verwendung des drm_gem_plane_helper_prepare_fb-Handlers umgestiegen; auf einige Strukturen und Variablen wurde eine statische Speicherzuweisung angewendet. Was den Einsatz von Open-Source-Kernelmodulen von NVIDIA im Nouveau angeht, besteht die Arbeit bisher darin, Fehler zu identifizieren und zu beseitigen. Zukünftig soll die veröffentlichte Firmware zur Verbesserung der Treiberleistung eingesetzt werden.
    • Ein Treiber für den NVMe-Controller hinzugefügt, der in Apple-Computern verwendet wird, die auf dem M1-Chip basieren.

Gleichzeitig hat die Latin American Free Software Foundation eine Version des völlig kostenlosen Kernels 5.19 – Linux-libre 5.19-gnu – erstellt, die von Firmware- und Treiberelementen befreit ist, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang ist vom Hersteller begrenzt. Die neue Version bereinigt die Treiber für pureLiFi X/XL/XC und TI AMx3 Wkup-M3 IPC. Aktualisierter Blob-Reinigungscode in Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu-Treibern und Subsystemen. Die Verarbeitung von Qualcomm AArch64-Gerätebaumdateien wurde implementiert. Unterstützung für das neue Benennungsschema für Sound Open Firmware-Komponenten hinzugefügt. Die Bereinigung des ATM Ambassador-Treibers, der aus dem Kernel entfernt wurde, wurde gestoppt. Die Verwaltung der Blob-Bereinigung in HDCP und Mellanox Core wurde auf separate kconfig-Tags verschoben.

Source: opennet.ru

Kommentar hinzufügen