Veröffentlichung des Linux-Kernels 5.7

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor die Kernel-Version Linux 5.7. Zu den auffälligsten Änderungen gehören: die neue Implementierung des exFAT-Dateisystems, das BareUDP-Modul zur Erstellung von UDP-Tunneln, pointerbasierte Authentifizierungssicherheit für ARM64, die Möglichkeit, BPF-Programme an LSM-Handler anzuhängen, eine neue Implementierung von Curve25519, der "Split-Lock"-Detektor, die BPF-Kompatibilität mit PREEMPT_RT, die Aufhebung der 80-Zeichen-Beschränkung im Code, die Berücksichtigung der CPU-Temperaturwerte im Task-Scheduler, die Möglichkeit, clone() zur Erzeugung von Prozessen in einer anderen cgroup zu verwenden, und der Schutz vor Schreibzugriffen im Speicher mithilfe von userfaultfd.

In die neue Version wurden 15033 Korrekturen von 1961 Entwicklern aufgenommen,
die Patchgröße beträgt 39 MB (Änderungen betrafen 11590 Dateien, 570560 Zeilen Code wurden hinzugefügt,
297401 Zeilen wurden gelöscht). Etwa 41 % aller Änderungen in 5.7
beziehen sich auf Gerätetreiber, etwa 16 % der Änderungen betreffen
beziehen sich auf die Aktualisierung von kodera spezifisch für Hardwarearchitekturen, 13%
den Netzwerkstack, 4 % auf Dateisysteme und 4 % auf interne
Subsystemen des Kernels.

Haupt- Neuheiten:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Eine neue Implementierung des exFAT-Treibers wurde hinzugefügt, die basiert auf dem aktuellen Code der "sdfat" (2.x), die von Samsung für seine Android-Smartphones entwickelt wird. Der zuvor ins Kernel hinzugefügte Treiber basierte auf veraltetem Samsung-Code (Version 1.2.9) und fiel hinsichtlich der Leistung gegenüber dem neuen Treiber um etwa 10 % zurück. Es sei daran erinnert, dass die Unterstützung von exFAT im Kernel möglich wurde, nachdem Microsoft veröffentlicht öffentlich zugängliche Spezifikationen bereitgestellt und die kostenlose Nutzung von Patenten für exFAT in Linux ermöglicht hat.
    • In Btrfs wurde ein neuer ioctl()-Befehl - BTRFS_IOC_SNAP_DESTROY_V2 - implementiert, der das Löschen von Unterverzeichnissen anhand ihrer ID ermöglicht. Vollständige Unterstützung für die Klonierung von Inline-Extents wurde gewährleistet. Die Anzahl der Rollback-Punkte bei Umverteilungsoperationen wurde erweitert, was zu verkürzten Wartezeiten bei der Ausführung des Befehls 'balance cancel' führte. Die Bestimmung von Rückverweisen auf Extents wurde beschleunigt (z. B. reduzierte sich die Ausführungszeit des Testszenarios von einer Stunde auf mehrere Minuten). Es wurde die Möglichkeit hinzugefügt, an jedem Inode des Datei-Extent-Baums angehängt zu werden. Das Sperrschema, das bei Schreibvorgängen auf Unterverzeichnisse und beim Ausschluss von NOCOW verwendet wird, wurde überarbeitet. Die Effizienz von fsync für Bereiche wurde erhöht.
    • In XFS wurde die Metadatenüberprüfung und die Ausführung von fsck für aktive Partitionen verbessert. Eine Bibliothek zum Wiederaufbau von Bäumen (btree) wurde vorgeschlagen, die in Zukunft für die Überarbeitung von xfs_repair verwendet werden soll und die Möglichkeit der Wiederherstellung ohne Abmontierung der Partition umsetzt.
    • In CIFS wurde die experimentelle Unterstützung für das Anlegen einer Swap-Partition in SMB3-Speichern hinzugefügt. POSIX-Erweiterungen in readdir, die in der Spezifikation SMB3.1.1 definiert sind, wurden implementiert. Die Schreibgeschwindigkeit für Seiten mit einer Größe von 64 KB wurde bei aktivem Modus cache=strict und Verwendung von Protokollversionen 2.1+ verbessert.
    • Das EXT4-Dateisystem wurde von bmap und iopoll auf die Nutzung von iomap umgestellt.
    • In F2FS wurde optionale Unterstützung für die Datenkompression mittels des zstd-Algorithmus implementiert. Standardmäßig wird der LZ4-Algorithmus zur Kompression verwendet. Die Unterstützung des Kommandos „chattr -c commit“ wurde hinzugefügt. Die Anzeige der Montagezeit wurde sichergestellt. Der ioctl F2FS_IOC_GET_COMPRESS_BLOCKS wurde hinzugefügt, um Informationen über die Anzahl der komprimierten Blöcke abzurufen. Kompressionsdaten werden nun über statx ausgegeben.
    • In der Ceph-Dateisystem wurde die Möglichkeit hinzugefügt, Dateioperationen (Erstellung und Löschung (unlink)) lokal auszuführen, ohne auf die Antwort des Servers zu warten (asynchroner Betrieb). Diese Änderung verbessert beispielsweise signifikant die Leistung des Tools rsync.
    • In OVERLAYFS wurde die Möglichkeit hinzugefügt, virtiofs als oberstes Dateisystem zu verwenden.
    • Neu geschrieben wurde der Code zur Pfadnavigation in VFS, der Code zum Parsen von symbolischen Links umgeschrieben und die Navigation von Einhängepunkten vereinheitlicht.
    • Im SCSI-Subsystem ist die Verwendung dürfen unprivilegierte Benutzer Kommandos ZBC ausführen.
    • In dm_writecache wurde wurde die Möglichkeit zur schrittweisen Bereinigung des Caches basierend auf dem Parameter max_age, der die maximale Lebensdauer eines Blocks angibt, hinzugefügt.
    • In dm_integrity hinzugefügt wurde die Unterstützung für den Befehl „discard“ hinzugefügt.
    • In null_blk hinzugefügt wurde die Unterstützung für Fehlerinjektionen zur Simulation von Ausfällen während der Tests hinzugefügt.
    • Hinzugefügt Es besteht die Möglichkeit, udev-Benachrichtigungen über Änderungen der Größe des Blockgeräts zu senden.
  • Netzwerksubsystem
    • In Netfilter wurden ÄnderungenFunktionen hinzugefügt, die die Verarbeitung großer Zuordnungsliste (nftables set), in denen eine Überprüfung von Subnetzen, Netzwerkports, Protokollen und MAC-Adressen erforderlich ist, erheblich beschleunigen.
      Optimierungen wurden Im Modul nft_set_pipapo (PIle PAcket POlicies), das die Zuordnung des Paketinhalts zu den in den Filterregeln verwendeten beliebigen Zustandsbereichen, wie IP-Bereichen und Netzwerkports, behandelt (nft_set_rbtree und nft_set_hash manipulieren die Zuordnung von Intervallen und das direkte Spiegeln von Werten). Die mit 256-Bit AVX2-Instruktionen vektorisierte Version von pipapo auf einem AMD Epyc 7402-Prozessor zeigte eine Leistungssteigerung von 420 % beim Parsen von 30.000 Einträgen, die Port-Protokoll-Bindungen umfassen. Die Steigerung bei der Zuordnung von Subnetz- und Portnummernbindungen beim Parsen von 1.000 Einträgen betrug 87 % für IPv4 und 128 % für IPv6.
    • Hinzugefügt Das bareudp-Modul ermöglicht die Kapselung verschiedener L3-Protokolle wie MPLS, IP und NSH in einem UDP-Tunnel.
    • Die Integration von MPTCP (MultiPath TCP)-Komponenten wurde fortgesetzt, eine Erweiterung des TCP-Protokolls zur Organisation von TCP-Verbindungen, die Pakete gleichzeitig über mehrere Routen durch verschiedene Netzwerk Schnittstellen mit unterschiedlichen IP-Adressen liefern.
    • Hinzugefügt Unterstützung für Hardwarebeschleunigungsmechanismen zur Kapselung von Ethernet-Frames in 802.11 (Wi-Fi).
    • Beim Verschieben eines Geräts von einem Netzwerk-Namespace in einen anderen wurde die Anpassung der Zugriffsrechte und des Eigentümers der entsprechenden Dateien in sysfs sichergestellt.
    • Nutzern ohne Root-Rechte wurde die Verwendung des Flags SO_BINDTODEVICE ermöglicht.
    • Der dritte Teil der Patches wurde angenommen, der das Werkzeug ethtool von ioctl() auf eine Verwendung der Netlink-Schnittstelle umstellt. Die neue Schnittstelle vereinfacht das Hinzufügen von Erweiterungen, verbessert das Fehlermanagement, ermöglicht die Versendung von Benachrichtigungen bei Statusänderungen, vereinfacht die Interaktion zwischen Kernel und Benutzerspace und verringert die Anzahl synchronisierter benannter Listen.
    • Die Möglichkeit zur Nutzung spezieller Hardwarebeschleuniger für Verbindungsverfolgungsoperationen wurde hinzugefügt.
    • In netfilter wurde hinzugefügt wurde ein Hook für die Anschlussclassifizierung ausgehender Pakete (egress) hinzugefügt, der den zuvor vorhandenen Hook für eingehende Pakete (ingress) ergänzt.
  • Virtualisierung und Sicherheit
    • Eine hardwarebasierte Implementierung der Zeigerauthentifizierung wurde hinzugefügt (Pointer Authentication), die spezielle ARM64-CPU-Anweisungen verwendet, um Angriffe abzuwehren, die auf Rücksprungorientiertem Programmieren (ROP) basieren, bei denen der Angreifer nicht versucht, eigenen Code im Speicher zu platzieren, sondern mit bereits in geladenen Bibliotheken vorhandenen Maschinenanweisungen arbeitet, die mit einer Rücksprunganweisung enden. Der Schutz besteht in der Verwendung digitaler Signaturen zur Überprüfung von Rücksprungadressen auf Kernel-Ebene. Die Signatur wird in den ungenutzten oberen Bits des Zeigers gespeichert. Im Gegensatz zu softwarebasierten Implementierungen werden die Erstellung und Überprüfung digitaler Signaturen mit speziellen CPU-Anweisungen durchgeführt.
    • Hinzugefügt die Möglichkeit, einen Speicherbereich vor Schreibzugriffen mit dem Systemaufruf userfaultfd() zu schützen, der zur Verarbeitung von Seitenfehlern (Zugriff auf nicht zugewiesene Speicherseiten) im Benutzerspeicher gedacht ist. Die Idee besteht darin, userfaultfd() auch zur Verfolgung von Zugriffsverletzungen auf als schreibgeschützt markierte Seiten zu nutzen und einen Handler aufzurufen, der auf solche Schreibversuche reagieren kann (zum Beispiel zur Verarbeitung von Änderungen beim Erstellen von Live-Snapshots aktiver Prozesse, zur Fixierung des Zustands beim Speichern von Speicherabbildern auf die Festplatte, zur Implementierung von gemeinsamem Speicher, zur Überwachung von Änderungen im Speicher). Die Funktionalität ist äquivalent zur Anwendung von mprotect() in Verbindung mit dem Signalhandler SIGSEGV, arbeitet jedoch deutlich schneller.
    • In SELinux wurde die Option «checkreqprot», die die Überprüfung des Speicherschutzes bei der Verarbeitung von Regeln deaktivierte (was die Verwendung ausführbarer Speicherbereiche unabhängig von den in den Regeln festgelegten Anforderungen erlaubte), als veraltet erklärt. Symbolischen Links in kernfs ist das Vererben des Kontexts von übergeordneten Verzeichnissen erlaubt.
    • Umfang ein neuer Display-Engine (DC) für AMD APU der Serie HD 7000 (Sea Islands, GCN 1.1) hinzugefügt. Modul KRSI, das das Anheften von BPF-Programmen an beliebige LSM-Hooks im Kernel ermöglicht. Diese Änderung ermöglicht die Erstellung von LSM-Modulen (Linux Security Module) in Form von BPF-Programmen zur Lösung von Audit- und mandatorischen Zugriffskontrollaufgaben.
    • Durchgeführt wurde Optimierung der Leistung von /dev/random durch die paketweise Übertragung von CRNG-Werten anstelle einzelner RNG-Anweisungen. Die Funktionalität von getrandom und /dev/random auf ARM64-Systemen, die RNG-Anweisungen bereitstellen, wurde verbessert.
    • Implementierung der elliptischen Kurve Curve25519 ersetzt auf eine Variante aus der Bibliothek HACL, für die angegeben Mathematische Beweise der formalen Verifikation von Zuverlässigkeit.
    • Hinzugefügt Mechanismus zur Information über freie Speicherseiten. Mit diesem Mechanismus können Gast-Systeme der Host-System Informationen über Seiten übermitteln, die nicht mehr genutzt werden, und diese Seiten kann der Host zurückfordern.
    • In vfio/pci hinzugefügt Unterstützung von SR-IOV (Single-Root I/O Virtualization).
  • Speicher und Systemdienste
    • Von 80 bis 100 Zeichen erhöht Einschränkung für die maximale Länge von Zeilen in Quelltexten. Entwickler werden weiterhin empfohlen, sich an der Grenze von 80 Zeichen pro Zeile zu orientieren, aber dies ist jetzt kein striktes Limit mehr. Das Überschreiten des Zeilenlimits führt nun nur dann zu einer Warnung während des Builds, wenn das Tool checkpatch mit der Option "—strict" ausgeführt wird. Diese Änderung ermöglicht es den Entwicklern, sich weniger um das Manipulationen Spacing zu kümmern und sich freier bei der Ausrichtung des Codes zu fühlen, sowie zu verhindern, übermäßige Zeilenumbrüche, die das Verstehen des Codes und die Suche behindern.
    • Hinzugefügt Unterstützung des gemischten Bootmodus EFI, der es ermöglicht, einen 64-Bit-Kernel aus einer 32-Bit-Firmware, die auf einem 64-Bit-CPU läuft, ohne Verwendung eines spezialisierten Bootloaders zu laden.
    • Standardmäßig aktiviert System zur Erkennung und Debugging von Split-Locks («split lock«), die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, da bei der Ausführung atomarer Anweisungen Daten zwei CPU-Cache-Linien überschreiten. Solche Locks führen zu erheblichen Leistungseinbußen (bis zu 1000 Zyklen langsamer als atomare Operationen, bei denen die Daten in eine Cache-Linie fallen). Abhängig vom Bootparameter «split_lock_detect» kann der Kernel solche Locks zur Laufzeit erkennen und Warnungen ausgeben oder ein SIGBUS-Signal an die Anwendung senden, die den Lock verursacht hat.
    • Im Task-Scheduler wird die Überwachung der Temperaturen von Temperaturfühlern gewährleistet (Thermal Pressure) und die Überwachung der Überhitzung bei der Ausführung von Aufgaben wurde implementiert. Anhand der bereitgestellten Statistiken kann der Temperaturregler (thermal governor) die maximale CPU-Frequenz bei Überhitzung anpassen, und der Task-Scheduler berücksichtigt jetzt den Rückgang der Rechenleistung aufgrund einer solchen Frequenzreduzierung bei der Planung von Aufgabenausführungen (früher reagierte der Scheduler mit einer gewissen Verzögerung auf Frequenzänderungen und basierte eine Zeit lang auf überhöhten Annahmen über verfügbare Rechenressourcen).
    • Im Task-Scheduler werden invariante Kennzahlen zur Lastverfolgung eingesetzt, die eine korrekte Bewertung der Last unabhängig von der aktuellen CPU-Frequenz ermöglichen. Die Änderung ermöglicht eine genauere Vorhersage des Verhaltens von Aufgaben unter Bedingungen dynamischer Spannungs- und Frequenzänderungen der CPU. Zum Beispiel wird eine Aufgabe, die bei 1000 MHz 1/3 der CPU-Ressourcen verbrauchte, bei einer Frequenzreduzierung auf 500 MHz 2/3 der Ressourcen verbrauchen, was zuvor zu falschen Annahmen über eine totale Ausnutzung (d.h. Aufgaben für den Scheduler erschienen größer nur aufgrund der Frequenzsenkung, was zu falschen Entscheidungen im schedutil cpufreq governor führte) führte.
    • Der Intel P-state-Treiber, der für die Auswahl der Leistungsmodi verantwortlich ist, wurde auf die Nutzung schedutil.
    • Implementiert wurde die Möglichkeit, das BPF-Subsystem im Echtzeitkern (PREEMPT_RT) zu verwenden. Früher musste BPF beim Aktivieren von PREEMPT_RT deaktiviert werden.
    • Ein neuer Typ von BPF-Programmen wurde hinzugefügt — BPF_MODIFY_RETURN, die an Funktionen im Kernel angehängt werden können, um den von dieser Funktion zurückgegebenen Wert zu ändern.
    • Hinzugefügt die Möglichkeit die Verwendung des Systemaufrufs clone3() zur Erstellung eines Prozesses in einer cgroup, die sich von der der übergeordneten cgroup unterscheidet, wodurch der übergeordnete Prozess Einschränkungen anwenden und das Accounting sofort nach der Erzeugung eines neuen Prozesses oder Threads aktivieren kann. Zum Beispiel kann der Dienstmanager neue Dienste direkt in separate cgroups zuweisen, und neue Prozesse, die in „eingefrorene“ cgroups verschoben werden, werden sofort angehalten.
    • in Kbuild hinzugefügt Unterstützung der Umgebungsvariable „LLVM=1“ zum Wechsel in das Clang/LLVM-Toolset beim Kernbau. Die Anforderungen an die Version von binutils wurden erhöht (2.23).
    • In debugfs wurde der Abschnitt /sys/kernel/debug/kunit/ mit den Ergebnissen der Kunit-Tests hinzugefügt.
    • Der Parameter zum Laden des Kernels pm_debug_messages wurde hinzugefügt (analog zu /sys/power/pm_debug_messages), der die Ausgabe von Debug-Informationen über das Systemmanagement der Energieversorgung enthält (nützlich zur Fehlersuche bei Problemen mit dem Schlaf- und Ruhezustand).
    • In die Schnittstelle für asynchrone Eingabe/Ausgabe io_uring unterstützung wurde hinzugefügt für splice() und atomarer Pufferwahl.
    • Die Profilierung von cgroups wurde durch das perf-Werkzeug verbessert. Zuvor konnte perf Aufgaben nur in einer bestimmten cgroup profilieren und wusste nicht, zu welcher cgroup die derzeitige Probe gehörte. Jetzt erhält perf Informationen über die cgroup für jede Probe, sodass mehr als eine cgroup profiliert und nach cgroup in den Berichten sortiert werden kann.
      cgroup in den Berichten.
    • In cgroupfs, dem Pseudo-Dateisystem zur Verwaltung von cgroups, wurde die Unterstützung für erweiterte Attribute (xattrs) hinzugefügt, mit denen beispielsweise zusätzliche Informationen für Handler im Benutzerspeicher hinterlassen werden können.
    • Im cgroup-Speichercontroller wurde hinzugefügtwurde die Unterstützung für die rekursive Schutzvorkehrung des Wertes „memory.low“ implementiert, der die minimal zur Verfügung stehende Menge an Arbeitsspeicher für Gruppenmitglieder regelt. Bei der Montage einer cgroup-Hierarchie mit der Option „memory_recursiveprot“ wird der für die unteren Knoten festgelegte Wert von „memory.low“ automatisch auf alle untergeordneten Knoten verteilt.
    • Hinzugefügt Der Uacce-Framework (Unified/User-space-access-intended Accelerator Framework) ermöglicht den gemeinsamen Zugriff auf virtuelle Adressen (SVA, Shared Virtual Addressing) zwischen CPU und Peripheriegeräten, was Hardware-Beschleunigern den Zugriff auf Datenstrukturen im Haupt-CPU ermöglicht.
  • Hardware-Architekturen
    • Für die ARM-Architektur wurde die Möglichkeit zur Hot-Plugging von Speicher implementiert.
    • Für die RISC-V-Architektur wurde die Unterstützung für Hot-Plugging und das Hot-Plugging von CPUs (CPU hotplug) hinzugefügt. Für 32-Bit-RISC-V wurde ein eBPF JIT implementiert.
    • Die Möglichkeit, 32-Bit-ARM-Systeme für die Ausführung von KVM-Gäbeumgebungen zu verwenden, wurde entfernt.
    • Die 'fiktive' NUMA-Implementierung für die s390-Architektur wurde entfernt, da für diese keine Nutzungsszenarien gefunden wurden, die eine Leistungssteigerung ermöglichen.
    • Für ARM64 wurde die Unterstützung für die AMU-Erweiterung (Activity Monitors Unit) eingeführt, die in ARMv8.4 definiert ist und Leistungszähler bereitstellt, die zur Berechnung von Frequenzskalierungsfaktoren im Scheduler verwendet werden.
  • Ausrüstung
    • Hinzugefügt Unterstützung von vDPA-Geräten, bei denen ein Datenaustauschkanal verwendet wird, der den Virtio-Spezifikationen entspricht. vDPA-Geräte können sowohl physisch angeschlossene Hardware als auch softwareemulierte virtuelle Geräte sein.
    • Im GPIO-Subsystem ein wurde ein neuer ioctl()-Befehl für die Überwachung von Änderungen eingeführt, der es ermöglicht, den Prozess über den Zustand einer beliebigen GPIO-Leitung zu informieren. Als Beispiel für die Verwendung dieses neuen Befehls wurde vorgeschlagen die Utility gpio-watch.
    • Im DRM-Treiber i915 für Intel-Grafikkarten eingeschlossen wurde standardmäßig die Unterstützung für Tigerlake-Chips („Gen12“) hinzugefügt und die anfängliche Unterstützung für die Steuerung der OLED-Hintergrundbeleuchtung verbessert. Außerdem wurde die Unterstützung für Ice Lake, Elkhart Lake, Baytrail und Haswell-Chips verbessert.
    • Im Treiber amdgpu hinzugefügt die Möglichkeit zur Laden von Firmware in den USBC-Chip für ASIC. Die Unterstützung für AMD Ryzen 4000 „Renoir“-Chips wurde verbessert. Die Steuerung von OLED-Panels wurde hinzugefügt. Der Status der Firmware wird in debugfs angezeigt.
    • Im DRM-Treiber vmwgfx für VMware-Virtualisierungssysteme wurde die Möglichkeit hinzugefügt, OpenGL 4 in Gastsystemen zu verwenden (zuvor wurde OpenGL 3.3 unterstützt).
    • Ein neuer DRM-Treiber tidss für das Display-System der TI Keystone-Plattform wurde hinzugefügt.
    • Treiber für LCD-Panels wurden hinzugefügt: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Im Energiemanagementsystem hinzugefügt die Unterstützung für die Intel Jasper Lake (JSL) Plattform auf Atom-Basis.
    • Die Unterstützung für den Pinebook Pro Laptop auf Basis des Rockchip RK3399, des Pine64 PineTab-Tablets und des Smartphones PinePhone auf Basis des Allwinner A64.
    • Die Unterstützung neuer Audiocodecs und -chips wurde hinzugefügt:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Die Unterstützung für ARM-Platinen und die Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 Varianten der i.MX6 TechNexion Pico-Platine, drei neue Toradex Colibri-Varianten, Samsung S7710 Galaxy Xcover 2 auf Basis von ST-Ericsson u8500, DH Electronics DHCOM SoM und PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3-Platinen wurde hinzugefügt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4