Nach zwei Monaten Entwicklung präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.19. Zu den auffälligsten Änderungen gehören: Unterstützung der Prozessorarchitektur LoongArch, Integration von 'BIG TCP'-Patches, 'On-Demand'-Modus in fscache, Entfernung des Codes zur Unterstützung des Formats a.out, Möglichkeit zur Anwendung von ZSTD zur Kompression von Firmware, Schnittstelle zur Verwaltung des Speicherauslagerung aus dem Benutzerspeicher, Verbesserung der Zuverlässigkeit und Leistung des Generators von Pseudo-Zufallszahlen, Unterstützung von Erweiterungen wie Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) und ARM SME (Scalable Matrix Extension).
Im Ankündigung erwähnte Linus, dass die nächste Kernel-Version wahrscheinlich die Nummer 6.0 erhalten wird, da im Branch 5.x genügend Versionen angesammelt wurden, um die erste Ziffer der Versionsnummer zu ändern. Der Wechsel der Nummerierung erfolgt aus ästhetischen Gründen und stellt einen formalen Schritt dar, der den Unbehagen durch die Ansammlung einer großen Anzahl von Veröffentlichungen in der Serie abbaut.
Linus erwähnte außerdem, dass er ein Apple-Laptop auf Basis der ARM64-Architektur (Apple Silicon) mit einer Linux-Umgebung auf Basis der Asahi Linux-Distribution zur Erstellung des Releases verwendet hat. Dies ist nicht die Hauptarbeitsstation von Linus, aber er nutzte diese Plattform, um ihre Eignung für die Arbeit am Kernel zu überprüfen und sicherzustellen, dass er Kernel-Releases während Reisen erstellen kann, indem er einen leichten Laptop zur Hand hat. Vor vielen Jahren hatte Linus bereits Erfahrung mit Apple-Hardware bei der Entwicklung — einmal verwendete er einen Computer mit CPU ppc970 und ein Macbook Air.
In die neue Version wurden 16401 Korrekturen von 2190 Entwicklern aufgenommen (in der vorherigen Version waren es 16206 Korrekturen von 2127 Entwicklern), die Patch-Größe beträgt 90 MB (die Änderungen betrafen 13847 Dateien, 1149456 Zeilen Code wurden hinzugefügt, 349177 Zeilen wurden entfernt). Etwa 39 % aller in 5.19 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 21 % der Änderungen stehen im Zusammenhang mit der Aktualisierung von hardwarebezogenem Code, 11 % betreffen den Netzwerk-Stack, 4 % zu Dateisystemen und 3 % zu 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 die Verwendung auf Partitionen gedacht ist, die im Nur-Lese-Modus verfügbar sind, wurde auf die Nutzung des fscache-Subsystems umgestellt, das die Datencache-Funktionen bereitstellt. Diese Änderung hat die Leistung der Systeme, in denen eine große Anzahl von Containern aus einem EROFS-basierten Abbild gestartet wird, erheblich verbessert.
- Das fscache-Subsystem hat einen On-Demand-Lese-Modus hinzugefügt, der zur Optimierung von EROFS eingesetzt wird. Dieser neue Modus ermöglicht die Organisation der Lesecache von Dateisystemabbildern, die sich im lokalen System befinden. Im Gegensatz zum ursprünglich verfügbaren Betriebsmodus, der auf das Caching von Daten in einem lokalen Dateisystem abzielte, die über Netzwerkdateisysteme übertragen werden, delegiert der On-Demand-Modus die Funktionen zum Abrufen von Daten und deren Schreiben in den Cache an einen separaten Hintergrundprozess, der im Benutzerspeicherraum ausgeführt wird.
- In XFS wurde die Speicherung von Milliarden von erweiterten Attributen im i-Node ermöglicht. Die maximale Anzahl von Extents für eine Datei wurde von 4 Milliarden auf 247 erhöht. Ein Modus für atomare Aktualisierungen mehrerer erweiterter Dateiattribute wurde implementiert.
- Im Btrfs-Dateisystem wurde die Arbeit mit Sperren optimiert, was eine Leistungssteigerung von etwa 7 % beim direkten Schreiben im Nowait-Modus ermöglicht hat. Die Leistung von Vorgängen im NOCOW-Modus (ohne Copy-on-Write) wurde um etwa 3 % erhöht. Die Belastung des Seiten-Caches bei der Ausführung des Befehls "send" wurde reduziert. Die minimale Größe der Unterseiten wurde von 64K auf 4K verringert (Unterseiten kleiner als die Seiten des Kernels können verwendet werden). Der Übergang von der Verwendung des Basisbäume (radix tree) zu dem Algorithmus XArrays hat stattgefunden.
- Im NFS-Server wurde ein Modus zur Verlängerung des von einem Client gesetzten Sperrzustands hinzugefügt, der nicht mehr auf Anfragen antwortet. Der neue Modus ermöglicht es, die Bereinigung der Sperre bis zu einem Tag zu verzögern, wenn kein anderer Client eine konkurrierende Sperre anfordert. Im Normalmodus wird die Sperre 90 Sekunden nach der letzten Antwort des Clients aufgehoben.
- Im Fanotify-Dateisystem-Subsystem wurde die Kennzeichnung FAN_MARK_EVICTABLE implementiert, mit der die Fixierung der Ziel-i-Nodes im Cache deaktiviert werden kann, zum Beispiel um Unterzweige ohne Fixierung ihrer Teile im Cache zu ignorieren.
- Der FAT32-Treiber unterstützt nun das Abrufen von Informationen zum Erstellungszeitpunkt einer Datei über den Systemaufruf statx, der eine effizientere und funktionalere Variante von stat() implementiert, die erweiterte Informationen über die Datei zurückgibt.
- Es wurden erhebliche Optimierungen im exFAT-Treiber vorgenommen, um die gleichzeitige Bereinigung einer Gruppe von Sektoren im aktiven 'dirsync'-Modus anstelle einer sequenziellen sektorweisen Bereinigung zu ermöglichen. Durch die Reduzierung der Anzahl der Blockanforderungen nach diesen Optimierungen ist die Leistung bei der Erstellung einer großen Anzahl von Verzeichnissen auf der SD-Karte um mehr als 73-85 % je nach Clustergröße gestiegen.
- Das erste Korrektur-Update für den ntfs3-Treiber wurde in den Kernel aufgenommen. 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, aber nun haben die Entwickler 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, nicht verwendeter Code bereinigt und Tippfehler korrigiert.
- Für OverlayFS wurde die Möglichkeit implementiert, Benutzer-IDs von eingehängten Dateisystemen zu mappen, die zur Zuordnung von Dateien eines bestimmten Benutzers auf einer eingehängten Fremdpartition zu einem anderen Benutzer im aktuellen System verwendet wird.
- Speicher und Systemdienste
- Die anfängliche Unterstützung der LoongArch-Befehlssatzarchitektur wurde hinzugefügt, die in den Loongson 3 5000-Prozessoren verwendet wird und ein neues RISC ISA implementiert, das MIPS und RISC-V ähnelt. Die LoongArch-Architektur ist in drei Varianten verfügbar: beschnittenes 32-Bit (LA32R), normales 32-Bit (LA32S) und 64-Bit (LA64).
- Der Code zur Unterstützung des a.out-Binärdateiformats wurde entfernt, das als veraltet in Version 5.1 eingestuft wurde. Das a.out-Format wird auf Linux-Systemen seit langem nicht mehr verwendet, und die Generierung von a.out-Dateien wird von modernen Werkzeugen in Standardkonfigurationen für Linux nicht unterstützt. Ein Loader für a.out-Dateien kann vollständig im Benutzerspeicher realisiert werden.
- Die Unterstützung für architekturspezifische Boot-Optionen für x86 wurde eingestellt: nosep, nosmap, nosmep, noexec und noclflush).
- Die Unterstützung der veralteten CPU-Architektur h8300 (Renesas H8/300), die lange Zeit ohne Unterstützung geblieben ist, wurde eingestellt.
- Die Möglichkeiten zur Reaktion auf das Erkennen von Split-Locks wurden erweitert. Diese treten auf, wenn auf nicht ausgerichtete Daten im Speicher zugegriffen wird, da beim Ausführen einer atomaren Anweisung die Daten zwei Cache-Linien der CPU überschreiten. Solche Locks führen zu einem erheblichen Leistungsabfall. Während das System zuvor standardmäßig eine Warnung mit Informationen über den die Sperre verursachenden Prozess ausgab, wird der problematische Prozess nun zusätzlich verlangsamt, um die Leistung des restlichen Systems zu erhalten.
- Die Unterstützung des in Intel-Prozessoren integrierten Mechanismus IFS (In-Field Scan) wurde hinzugefügt. Dieser ermöglicht es, niedrigstufige Diagnosetests für die CPU durchzuführen, die Probleme erkennen können, die mit den Standardmethoden basierend auf Fehlerkorrekturcodes (ECC) oder Paritätsbits nicht identifiziert werden. Die durchgeführten Tests werden in Form eines ladbaren Firmware-Pakets bereitgestellt, ähnlich wie Mikrokodupdates. Die Testergebnisse sind über sysfs zugänglich.
- Die Möglichkeit zur Einbettung der Bootconfig-Datei in den Kernel wurde hinzugefügt, um neben den Optionen der Kommandozeile die Kernelbetriebsparameter über eine Konfigurationsdatei festzulegen. Die Einbettung erfolgt über die Build-Option ‘CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"‘. Zuvor wurde die Bootconfig durch Anheften an das initrd-Abbild bestimmt. Die Einbettung im Kernel ermöglicht die Verwendung von Bootconfig in Konfigurationen ohne initrd.
- Die Möglichkeit zur Nutzung von Firmware, die mit dem Zstandard-Algorithmus komprimiert ist, wurde implementiert. In sysfs wurden eine Reihe von Steuerdateien in /sys/class/firmware/* hinzugefügt, die die Initiierung des Ladens von Firmwares aus dem Benutzerspeicher ermöglichen.
- Im Interface für asynchrone Ein- / Ausgaben 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 Verarbeitung der Operation mit einer gewissen Verzögerung zulässig ist. Zudem wurde die Unterstützung des Systemaufrufs socket() in io_uring hinzugefügt, ebenso wie neue Flags zur Vereinfachung der Verwaltung von Dateideskriptoren, ein ‘multi-shot’-Modus für die Annahme mehrerer Verbindungen in einem accept()-Aufruf eingeführt sowie Operationen zum direkten Durchleiten von NVMe-Befehlen an das Gerät ergänzt.
- Für die Xtensa-Architektur wird das Debugging-Tool KCSAN (Kernel Concurrency Sanitizer) unterstützt, das zur dynamischen Identifizierung von Race Conditions im Kernel dient. Außerdem wurde der Energiesparmodus und die Unterstützung für Co-Prozessoren hinzugefügt.
- Für die m68k-Architektur (Motorola 68000) wurde implementiert eine virtuelle Maschine (Plattform-Simulator), basierend auf dem Android Goldfish Emulator.
- Für die AArch64-Architektur wurde die Unterstützung für die Armv9-A SME (Scalable Matrix Extension) Erweiterungen implementiert.
- Im eBPF-Subsystem wurde die Speicherung typisierter Zeiger in map-Strukturen erlaubt, und die Unterstützung für dynamische Zeiger wurde hinzugefügt.
- Ein neuer präventiver Mechanismus zur Speicherverdrängung wurde vorgeschlagen, der die Verwaltung aus dem Benutzerspeicher über die Datei memory.reclaim unterstützt. Das Schreiben einer Zahl in diese Datei führt zu dem Versuch, die entsprechende Anzahl von Bytes aus der mit cgroup verbundenen Menge zu verdrängen.
- Die Genauigkeit der Speichernutzung bei der Datenkompression im Swap-Bereich wurde durch den Mechanismus zswap erhöht.
- Für die RISC-V-Architektur wird die Unterstützung für die Ausführung von 32-Bit-Executable-Dateien auf 64-Bit-Systemen sichergestellt, ein Modus zur Bindung von Begrenzungsattributen an Speicherseiten (z.B. zum Verhindern von Caching) hinzugefügt und die Funktion kexec_file_load() implementiert.
- Die Implementierung der Unterstützung für 32-Bit-Systeme Armv4T und Armv5 wurde für die Verwendung in universellen plattformübergreifenden Kernel-Bauten angepasst, die für verschiedene ARM-Systeme geeignet sind.
- Virtualisierung und Sicherheit
- Im EFI-Subsystem wurde die Möglichkeit zur vertraulichen Übertragung sensibler Informationen an Gast-Systeme ohne deren Offenlegung an das Host-System implementiert. Die Daten werden über das Verzeichnis security/coco in securityfs bereitgestellt.
- Im Lockdown-Schutzmodus, der den Zugang des Root-Benutzers zum Kernel einschränkt und Umgehungswege für den UEFI Secure Boot blockiert, wurde eine Sicherheitslücke beseitigt, die eine Umgehung des Schutzes durch Manipulationen am Kernel-Debugger erlaubte.
- Patches zur Verbesserung der Zuverlässigkeit und Leistung des Zufallszahlengenerators wurden eingefügt.
- Bei der Erstellung mit Clang 15 wurde die 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 die Unterstützung für Regeln bereitgestellt, die die Ausführung von Datei-Umbenennungsoperationen steuern.
- Das IMA-Subsystem (Integrity Measurement Architecture), das zur Überprüfung der Integrität von Komponenten des Betriebssystems anhand digitaler Signaturen und Hashes vorgesehen ist, wurde auf die Verwendung des fs-verity-Moduls zur Verifizierung von Dateien umgestellt.
- Die Logik der Aktionen beim Deaktivieren des unprivilegierten Zugriffs auf das eBPF-Subsystem wurde geändert – zuvor wurden alle mit dem Systemaufruf bpf() verbundenen Befehle deaktiviert, während ab Version 5.19 der Zugang zu Befehlen, die keine Objekterstellung verursachen, erhalten bleibt. Bei diesem Verhalten ist ein privilegierter Prozess erforderlich, um ein BPF-Programm zu laden, aber anschließend können unprivilegierte Prozesse mit diesem Programm interagieren.
- Die Unterstützung für die AMD SEV-SNP-Erweiterung (Secure Nested Paging), die eine sichere Arbeit mit verschachtelten Speicherseitentabellen ermöglicht und vor den Angriffen "undeSErVed" und "SEVerity" auf AMD EPYC-Prozessoren schützt, die den Schutzmechanismus AMD SEV (Secure Encrypted Virtualization) umgehen könnte, wurde hinzugefügt.
- Die Unterstützung für den Intel TDX-Mechanismus (Trusted Domain Extensions), der versucht, den Zugriff auf verschlüsselte Speicherbereiche von Dritten zu blockieren, wurde hinzugefügt. virtuelle Maschinen.
- Im virtio-blk-Treiber, der zur Emulation von Blockgeräten verwendet wird, wurde die Unterstützung für die Ein-/Ausgabe mit Polling hinzugefügt, wodurch, wie Tests gezeigt haben, die Latenzen um etwa 10 % reduziert werden konnten.
- Netzwerksubsystem
- Eine Reihe von BIG TCP-Patches, die es ermöglichen, die maximale Größe eines TCP-Pakets auf 4 GB zu erhöhen, wurde integriert, um die Leistung von Hochgeschwindigkeitsinternen Netzwerken in Rechenzentren zu optimieren. Eine solche Erhöhung der Paketgröße bei einer 16-Bit-Feldgröße im Header wird durch die Implementierung "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 die Einstellung der Paketgröße auf 185 KB zu einer Erhöhung der Durchsatzrate um 50 % und zu einer erheblichen Verringerung der Datenübertragungszeit.
- Es wurde weiterhin an der Integration von Mitteln zur Verfolgung der Gründe für den Paketabwurf (reason-codes) im Netzwerk-Stack gearbeitet. Der Grundcode wird beim Freigeben des mit dem Paket verbundenen Speichers übermittelt und ermöglicht die Berücksichtigung von Situationen wie dem Abwurf von Paketen aufgrund von Fehlern bei der Felderfüllung im Header, das Erkennen von Spoofing durch den rp_filter, falsche Prüfziffern, Speichermangel, das Auslösen von IPSec XFRM-Regeln, falsche TCP-Folge-Nummern usw.
- Unterstützung für den Rückfall auf eine reguläre TCP-Verbindung bei MPTCP (MultiPath TCP) hinzugefügt, wenn bestimmte Funktionen von MPTCP nicht genutzt werden können. MPTCP ist eine Erweiterung des TCP-Protokolls zur Realisierung von TCP-Verbindungen mit der gleichzeitigen Übertragung von Paketen über mehrere Routen durch verschiedene Netzwerkinterfaces, die an unterschiedliche IP-Adressen gebunden sind. Eine API zur Verwaltung von MPTCP-Streams aus dem Benutzerspeicherplatz wurde hinzugefügt.
- Ausrüstung
- Mehr als 420.000 Zeilen Code, die mit dem amdgpu-Treiber verbunden sind, wurden hinzugefügt, davon entfallen etwa 400.000 Zeilen auf automatisch generierte Header-Dateien mit Daten zu ASIC-Registern im Treiber für AMD-GPUs, und weitere 22.500 Zeilen stellen die erste Implementierung der Unterstützung für AMD SoC21 sicher. Die Gesamtgröße des Treibers für AMD-GPUs hat 4 Millionen Zeilen Code überschritten. Neben SoC21 enthält der AMD-Treiber Unterstützung für SMU 13.x (System Management Unit), aktualisierte Unterstützung für USB-C und GPUVM, und es wurden Vorbereitungen für die Unterstützung der nächsten Generation von RDNA3 (RX 7000) und CDNA (AMD Instinct) Plattformen getroffen.
- Im i915-Treiber (Intel) wurden die Funktionen zur Energienutzung erweitert. GPU-IDs für Intel DG2 (Arc Alchemist), die in Laptops verwendet werden, wurden hinzugefügt, erste Unterstützung für die Plattform Intel Raptor Lake-P (RPL-P) bereitgestellt, Informationen zu Grafikprozessoren Arctic Sound-M hinzugefügt, ABI für Rechenmotoren implementiert, Unterstützung für das Format Tile4 für DG2-Grafikarten hinzugefügt und Unterstützung für DisplayPort HDR für Systeme auf Basis der Mikroarchitektur Haswell implementiert.
- Im Nouveau-Treiber wurde der Übergang zur Nutzung des Handlers drm_gem_plane_helper_prepare_fb vollzogen, und für einige Strukturen und Variablen wurde die statische Speicherzuweisung angewendet. Was die Verwendung öffentlicher Quellcodes von NVIDIA für Kernel-Module in Nouveau betrifft, so beschränkt sich die Arbeit derzeit auf die Identifizierung und Behebung von Fehlern. Künftig wird die veröffentlichte Firmware genutzt, um die Leistung des Treibers zu steigern.
- Ein Treiber für den NVMe-Controller, der in Apple-Computern mit dem M1-Chip verwendet wird, wurde hinzugefügt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation eine vollständig freie Kernel-Variante 5.19 — Linux-libre 5.19-gnu, die von Firmware-Elementen und Treibern befreit ist, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Nutzung vom Hersteller eingeschränkt ist, erstellt. In der neuen Version wurden die 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 und pu3-imgu wurde aktualisiert. Die Verarbeitung von Device-Tree-Dateien für Qualcomm AArch64 wurde implementiert. Unterstützung für ein neues Benennungsschema für die Komponenten von 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
