Release des Linux-Kernels 5.7

Nach zwei Monaten der Entwicklung stellte Linus Torvalds den Release des Kernels Linux 5.7. Zu den bemerkenswertesten Änderungen zählen: eine neue Implementierung des exFAT-Dateisystems, das bareudp-Modul zum Erstellen von UDP-Tunneln, Pointer-basierte Authentifizierungsschutz für ARM64, die Möglichkeit, BPF-Programme an LSM-Handler anzuhängen, eine neue Implementierung von Curve25519, ein „Split-Lock“-Detektor, BPF-Kompatibilität mit PREEMPT_RT, die Aufhebung der 80-Zeichen-Grenze in Codezeilen, die Berücksichtigung der CPU-Temperaturwerte im Task-Scheduler sowie die Möglichkeit, clone() zum Erzeugen von Prozessen in einer anderen cgroup zu verwenden und schreibgeschützten Zugriff in den Speicher mithilfe von userfaultfd zu verhindern.

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 entfernt). Etwa 41 % aller Änderungen der Version 5.7
stehen im Zusammenhang mit Gerätetreibern, etwa 16 % der Änderungen beziehen sich
auf Updates des mit Hardware-Architekturen spezifischen Codes, 13 %
sind mit dem Netzwerk-Stack verbunden, 4 % mit Dateisystemen und 4 % mit internen
Subsystemen des Kernels.

Haupt Neuheiten:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Eine neue Implementierung des exFAT-Treibers wurde hinzugefügt, basierend auf dem aktuellen Code-Basis «sdfat» (2.x), die von Samsung für seine Android-Smartphones entwickelt wird. Der zuvor in den Kernel eingefügte Treiber basierte auf veraltetem Samsung-Code (Version 1.2.9) und war in der Leistung etwa 10 % hinter dem neuen Treiber zurück. Wir erinnern daran, dass die Unterstützung von exFAT im Kernel möglich wurde, nachdem Microsoft die die öffentlich zugänglichen Spezifikationen bereitgestellt und die kostenlose Nutzung von Patenten für exFAT in Linux ermöglicht hat.
    • In Btrfs wurde ein neuer ioctl()-Befehl implementiert — BTRFS_IOC_SNAP_DESTROY_V2, der es ermöglicht, einen Unterordner anhand seiner ID zu löschen. Die vollständige Unterstützung des Klonens von Inline-Extent wurde sichergestellt. Die Anzahl der Rücksetzpunkte bei Umverteilungsoperationen wurde erweitert, was die Wartezeiten beim Ausführen des Befehls ‘balance cancel’ verkürzt hat. Die Erkennung von Rückverweisen auf Extents wurde beschleunigt (beispielsweise wurde die Ausführungszeit eines Testszenarios von einer Stunde auf einige Minuten reduziert). Es wurde die Möglichkeit hinzugefügt, jedem Inode des Dateisystems einen Extent-Baum anzuhängen. Das Locking-Schema, das beim Schreiben in Unterordner und bei der Ausklammerung von NOCOW verwendet wird, wurde überarbeitet. Die Effizienz von fsync für Bereiche wurde erhöht.
    • In XFS wurden die Metadatenprüfungen und die Durchführung von fsck für aktive Partitionen verbessert. Eine Bibliothek zum Neuaufbau von btree-Strukturen wurde vorgeschlagen, die in Zukunft für die Überarbeitung von xfs_repair und die Implementierung einer Wiederherstellungsfunktion ohne Aushängen der Partition verwendet werden soll.
    • In CIFS wurde experimentelle Unterstützung für die Platzierung von Swap-Partitionen in SMB3-Speichern hinzugefügt. POSIX-Erweiterungen für readdir wurden in der SMB3.1.1-Spezifikation implementiert. Die Schreibgeschwindigkeit für Seiten mit einer Größe von 64 KB wurde bei Aktivierung des Modus cache=strict und bei Verwendung der Protokollversionen 2.1+ verbessert.
    • Das EXT4-Dateisystem wurde von bmap und iopoll auf die Verwendung von iomap umgestellt.
    • In F2FS wurde die optionale Unterstützung für die Datenkompression mit dem zstd-Algorithmus implementiert. Standardmäßig wird der LZ4-Algorithmus zur Kompression verwendet. Die Unterstützung für den Befehl „chattr -c commit“ wurde hinzugefügt. Die Anzeige der Montierungszeit wurde sichergestellt. Ein ioctl F2FS_IOC_GET_COMPRESS_BLOCKS wurde hinzugefügt, um Informationen über die Anzahl der komprimierten Blöcke abzurufen. Daten zur Kompression werden über statx ausgegeben.
    • Im Ceph-Dateisystem wurde die Möglichkeit zur lokalen Ausführung von Dateioperationen zum Erstellen und Löschen (unlink) ohne Warten auf eine Antwort vom Server (asynchrone Verarbeitung) hinzugefügt. Diese Änderung ermöglicht beispielsweise eine deutliche Steigerung der Leistung bei der Verwendung des rsync-Tools.
    • In OVERLAYFS wurde die Möglichkeit hinzugefügt, virtiofs als oberste Dateisystemebene zu verwenden.
    • Überarbeitet Die Umgehung des Pfades in VFS wurde überarbeitet, der Code für symbolische Links wurde angepasst und die Behandlung der Mount-Punkte vereinheitlicht.
    • Unprivilegierten Benutzern in der SCSI-Subsystem ist erlaubt die Ausführung von ZBC-Befehlen.
    • Im dm_writecache wurde die Möglichkeit einer schrittweisen Bereinigung des Caches basierend auf dem Parameter max_age implementiert, der die maximale Lebensdauer eines Blocks definiert.
    • Im dm_integrity hinzugefügt wurde die Unterstützung der Operation "discard" hinzugefügt.
    • Im null_blk hinzugefügt wurde die Fehlerersetzung zur Simulation von Ausfällen während der Testdurchführung unterstützt.
    • Hinzugefügt die Möglichkeit, udev-Benachrichtigungen über die Änderung der Größe von Blockgeräten zu senden.
  • Netzwerksubsystem
    • In Netfilter wurden eingeführt wurde, die im Januar dieses Jahres in den Kernel übernommen wurde. Es betrifft ausschließlich die Version 5.1 und tritt in den meisten Fällen auf Systemen mit Samsung-SSD-Speichern auf, bei denen zur Verschlüsselung Daten mit dm-crypt/LUKS über device-mapper/LVM verwendet werden., die die Verarbeitung großer Match-Listen (nftables set), bei denen die Überprüfung von Subnetzen, Netzwerkports, Protokollen und MAC-Adressen erforderlich ist, erheblich beschleunigen.
      Optimierungen wurden vorgenommen. Im Modul nft_set_pipapo (PIle PAcket POlicies), das die Aufgabe hat, den Inhalt von Paketen mit den in den Filterregeln verwendeten Zufallsbereichen der Statusfelder wie IP- und Netzwerkportbereichen abzugleichen (nft_set_rbtree und nft_set_hash manipulieren den Abgleich von Intervallen und die direkte Zuordnung von Werten), zeigte die vektorisierte Version pipapo, die mit 256-Bit AVX2-Instruktionen auf einem System mit einem AMD Epyc 7402-Prozessor ausgeführt wurde, eine Leistungssteigerung von 420 % beim Parsen von 30.000 Einträgen, die Port-Protokoll-Bindungen umfassen. Der Anstieg bei der Zuordnung von Bindungen zwischen Subnetz und Portnummer beim Parsen von 1.000 Einträgen betrug 87 % für IPv4 und 128 % für IPv6.
    • Hinzugefügt das Modul bareudp, das die Kapselung verschiedener L3-Protokolle wie MPLS, IP und NSH in ein UDP-Tunnel ermöglicht.
    • Die Integration der Komponenten MPTCP (MultiPath TCP) wurde fortgesetzt. Diese Erweiterung des TCP-Protokolls ermöglicht das gleichzeitige Senden von TCP-Paketen über mehrere Routen hinweg durch verschiedene Netzwerkinterfaces, die an unterschiedliche IP-Adressen gebunden sind.
    • 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 werden die Zugriffsrechte und der Eigentümer der entsprechenden Dateien in sysfs korrekt angepasst.
    • Benutzern ohne Root-Rechte wurde die Verwendung des Flags SO_BINDTODEVICE ermöglicht.
    • Der dritte Teil der Patches wurde angenommen, der das ethtool-Tool von ioctl() auf die Verwendung der netlink-Schnittstelle umstellt. Die neue Schnittstelle erleichtert das Hinzufügen von Erweiterungen, verbessert die Fehlerbehandlung, ermöglicht das Senden von Benachrichtigungen bei Statusänderungen, vereinfacht die Interaktion zwischen dem Kernel und dem Benutzerraum und reduziert die Anzahl synchronisierter benannter Listen.
    • Die Nutzung von speziellen Hardwarebeschleunigern zur Ausführung von Verbindungsüberwachungsoperationen wurde hinzugefügt.
    • In netfilter ein wurde ein Hook zur Anbindung von Klassifikatoren für ausgehende Pakete (egress) hinzugefügt, der den bereits vorhandenen Hook für eingehende Pakete (ingress) ergänzt.
  • Virtualisierung und Sicherheit
    • Eine Hardwareimplementierung der Zeiger-Autentifizierung wurde hinzugefügt (Pointer Authentication), die spezialisierte CPU ARM64-Anweisungen verwendet, um sich gegen Angriffe zu schützen, die Techniken der Rücksprungorientierten Programmierung (ROP) nutzen. Bei diesen Angriffen versucht der Angreifer nicht, seinen eigenen Code im Speicher unterzubringen, sondern operiert mit bereits in den geladenen Bibliotheken vorhandenen Maschineninstruktionen, die mit einer Rückkehrsteueranweisung enden. Der Schutz basiert auf der Verwendung digitaler Signaturen zur Überprüfung der Rücksprungadressen auf Kernel-Ebene. Die Signatur wird in den ungenutzten oberen Bits des Zeigers gespeichert. Im Gegensatz zu softwarebasierten Implementierungen erfolgt die Erstellung und Überprüfung digitaler Signaturen mithilfe spezieller CPU-Anweisungen.
    • Hinzugefügt Die Möglichkeit, den Schreibzugriff auf einen Speicherbereich mithilfe des Systemaufrufs userfaultfd() zu schützen, der für die Verarbeitung von Page Faults (Zugriffe auf nicht zugewiesene Speicherseiten) im Benutzermodus vorgesehen ist. Die Idee besteht darin, userfaultfd() auch zur Überwachung des Zugriffs auf als schreibgeschützt markierte Seiten zu verwenden und einen Handler aufzurufen, der auf solche Schreibversuche reagieren kann (zum Beispiel zur Behandlung von Änderungen beim Erstellen von Live-Snapshots laufender Prozesse, zum Festhalten des Zustands beim Speichern von Speicherdumps auf die Festplatte, zur Implementierung von gemeinsam genutztem Speicher und zur Überwachung von Änderungen im Speicher). Diese Funktionalität entspricht der Anwendung von mprotect() in Verbindung mit dem Signal-Handler SIGSEGV, funktioniert jedoch deutlich schneller.
    • In SELinux wurde die Option „checkreqprot“, die die Überprüfung des Speicherschutzes bei der Verarbeitung von Regeln deaktivierte (ermöglichte die Verwendung ausführbarer Speicherbereiche, unabhängig von den in den Regeln festgelegten Vorgaben), als veraltet erklärt. Symbolische Links in kernfs dürfen den Kontext der übergeordneten Verzeichnisse erben.
    • Im Rahmen von ist Teil des Tools Modul KRSI, der das Anbringen von BPF-Programmen an beliebigen LSM-Hooks im Kernel ermöglicht. Diese Änderung erlaubt die Erstellung von LSM-Modulen (Linux Security Module) in Form von BPF-Programmen zur Umsetzung von Audit- und mandatorischen Zugriffskontrollaufgaben.
    • Durchgeführt wurde die Leistung von /dev/random optimiert durch die paketweise Übertragung von CRNG-Werten anstelle separater Aufrufe der RNG-Befehle. Die Funktionalität von getrandom und /dev/random wurde auf ARM64-Systemen verbessert, die RNG-Befehle bereitstellen.
    • Die Implementierung der elliptischen Kurve Curve25519 wurde ersetzt durch die Version aus der Bibliothek HACL, für die ein mathematischer Beweis der formalen Verifikation der Zuverlässigkeit erstellt wurde.
    • Hinzugefügt ein Mechanismus zur Benachrichtigung über freie Speicherseiten. Mit diesem Mechanismus können Gastsysteme der Host-System Informationen über Seiten übermitteln, die nicht mehr verwendet werden, und die Host-Seiten können zurückgeholt werden.
    • In vfio/pci hinzugefügt wurde die Unterstützung für SR-IOV (Single-Root I/O Virtualization) implementiert.
  • Speicher und Systemdienste
    • von 80 auf 100 Zeichen erhöht Das Limit für die maximale Zeilenlänge in den Quelltexten wurde angepasst. Entwickler werden weiterhin ermutigt, sich an 80 Zeichen pro Zeile zu halten, doch dies ist nun kein strenges Limit mehr. Zudem führt das Überschreiten der Zeilenlängenbeschränkung nur dann zu einer Warnung beim Build, wenn das Tool checkpatch mit der Option „—strict“ ausgeführt wird. Diese Änderung ermöglicht es Entwicklern, sich weniger von Manipulationen Abständen abzulenken und beim Ausrichten des Codes freier zu fühlen sowie zu verhindern übermäßige Zeilenumbrüche, die das Verständnis des Codes und die Suche erschweren.
    • Hinzugefügt Die Unterstützung für den gemischten EFI-Bootmodus wurde eingeführt, der es ermöglicht, einen 64-Bit-Kernel aus einer 32-Bit-Firmware auf einem 64-Bit-CPU ohne die Verwendung eines spezialisierten Bootloaders zu laden.
    • Aktiviert wurde ein System zur Erkennung und Debugging von Split-Locks („split lockBei Zugriffen auf nicht ausgerichtete Daten im Speicher können Blockaden auftreten, wenn während der Ausführung einer atomaren Anweisung die Daten zwei Cache-Linien der CPU überqueren. Solche Blockaden führen zu einer erheblichen Leistungseinbuße (bis zu 1000 Zyklen langsamer als eine atomare Operation mit Daten in einer einzigen Cache-Linie). Abhängig von dem Boot-Parameter „split_lock_detect“ kann der Kern solche Blockaden in Echtzeit erkennen und Warnungen ausgeben oder das SIGBUS-Signal an die Anwendung senden, die die Blockade verursacht hat.
    • Im Task-Scheduler wird die Überwachung der Temperatursensorwerte gewährleistet (Thermaldruck) und die Überwachung von Überhitzung bei der Aufgabenplatzierung wurde implementiert. Basierend auf den bereitgestellten Statistiken kann der Temperaturregler (thermal governor) die maximale CPU-Frequenz bei Überhitzung anpassen, und der Aufgabenplaner berücksichtigt nun die reduzierte Rechenleistung aufgrund solcher Frequenzanpassungen bei der Planung von Aufgabendurchführungen (früher reagierte der Planer mit einer gewissen Verzögerung auf Frequenzänderungen und traf Entscheidungen basierend auf überhöhten Annahmen über die verfügbaren Rechenressourcen).
    • Im Aufgabenplaner sind invariante Kennzahlen Lastenverfolgung, die eine korrekte Bewertung der Last unabhängig von der aktuellen CPU-Frequenz ermöglicht. Die Änderung ermöglicht eine genauere Prognose des Verhaltens von Aufgaben bei dynamischen Änderungen der Spannung und Frequenz der CPU. Zum Beispiel wird eine Aufgabe, die bei 1000 MHz 1/3 der CPU-Ressourcen verbrauchte, bei einer Frequenzsenkung auf 500 MHz 2/3 der Ressourcen verbrauchen, was zuvor zu einer falschen Annahme über die volle Auslastung führte (d.h. die Aufgaben für den Scheduler schienen aufgrund der Frequenzsenkung größer, was zu falschen Entscheidungen im schedutil cpufreq Governor führte).
    • Der Intel P-state Treiber, der für die Auswahl der Leistungsmodi zuständig ist, wurde auf die Verwendung von schedutil.
    • Die Möglichkeit zur Nutzung des BPF-Subsystems wurde implementiert, während der Kernel im Echtzeitmodus (PREEMPT_RT) arbeitet. Zuvor wurde empfohlen, BPF beim Aktivieren von PREEMPT_RT zu deaktivieren.
    • Ein neuer Typ von BPF-Programmen wurde hinzugefügt – BPF_MODIFY_RETURN, die an Funktionen im Kernel angehängt werden und den von dieser Funktion zurückgegebenen Wert ändern können.
    • Hinzugefügt die Möglichkeit Die Nutzung des Systemaufrufs clone3() zur Erstellung eines Prozesses in einer cgroup, die sich von der cgroup des übergeordneten Prozesses unterscheidet, ermöglicht es dem übergeordneten Prozess, sofort nach der Erzeugung eines neuen Prozesses oder Threads Einschränkungen anzuwenden und das Accounting zu aktivieren. Beispielsweise kann der Dienstmanager neue Dienste direkt in separaten cgroups zuweisen, und neue Prozesse in "eingefrorene" cgroups werden sofort gestoppt.
    • in Kbuild hinzugefügt Unterstützung der Umgebungsvariable „LLVM=1“ zum Wechseln auf das Clang/LLVM-Toolchain beim Erstellen des Kernels. Die Anforderungen an die Version von binutils (2.23) wurden angehoben.
    • Im debugfs wurde der Abschnitt /sys/kernel/debug/kunit/ mit den Testergebnissen von kunit hinzugefügt.
    • Es wurde ein Kernel-Bootparameter pm_debug_messages (analog zu /sys/power/pm_debug_messages) hinzugefügt, der das Ausgeben von Debugging-Informationen über das Energiemanagement aktiviert (nützlich zur Fehlersuche bei Problemen mit dem Schlaf- und Wartezustand).
    • In die Schnittstelle für asynchronen Input/Output io_uring wurde Unterstützung für splice() und atomare Auswahl von Buffern.
    • Die Profilierung von cgroups wurde mithilfe des Tools perf verbessert. Früher konnte perf nur Aufgaben innerhalb einer bestimmten cgroup profilieren und war nicht in der Lage zu erkennen, zu welcher cgroup die aktuellen Proben gehörten. Jetzt erhält perf Informationen über die cgroup für jede Probe, was die Profilierung von mehr als einer cgroup ermöglicht und die Sortierung nach
      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 hinterlegt werden können.
    • Im cgroup-Speicher-Controller einwurde die Unterstützung für die rekursive Sicherung des Wertes „memory.low“ implementiert, der den minimalen Arbeitsspeicher reguliert, der den Mitgliedern der Gruppe zugewiesen wird. Bei der Montage der cgroup-Hierarchie mit der Option „memory_recursiveprot“ wird der für untere Knoten festgelegte Wert „memory.low“ automatisch auf alle untergeordneten Knoten verteilt.
    • Hinzugefügt Das Uacce-Framework (Unified/User-space-access-intended Accelerator Framework) ermöglicht die gemeinsame Nutzung von virtuellen Adressen (SVA, Shared Virtual Addressing) zwischen CPU und Peripheriegeräten, sodass Hardware-Beschleuniger auf Datenstrukturen im Haupt-CPU zugreifen können.
  • Hardware-Architekturen
    • Für die ARM-Architektur wurde die Möglichkeit zur Hot-Swap-Speicherentfernung implementiert.
    • Für die RISC-V-Architektur wurde die Unterstützung von Hot-Plug und Hot-Swap für CPU (CPU Hotplug) hinzugefügt. Für 32-Bit RISC-V wurde ein eBPF JIT implementiert.
    • Die Möglichkeit, 32-Bit ARM-Systeme für den Betrieb von KVM-Gastsystemen zu nutzen, wurde entfernt.
    • Die „Dummy“-Implementierung von NUMA für die s390-Architektur wurde entfernt, da keine Nutzungsszenarien gefunden wurden, die eine Leistungssteigerung ermöglichen.
    • Für ARM64 wurde die Unterstützung der Erweiterung AMU (Activity Monitors Unit) hinzugefügt, die in ARMv8.4 definiert ist und Leistungsmesszähler bereitstellt, die zur Berechnung der Frequenzanpassungsfaktoren im Scheduler verwendet werden.
  • Ausrüstung
    • Hinzugefügt Unterstützung für vDPA-Geräte, die einen Datenübertragungskanal verwenden, der den virtio-Spezifikationen entspricht. vDPA-Geräte können sowohl physisch angeschlossenes Hardware als auch software-emulierte virtuelle Geräte sein.
    • Im GPIO-Subsystem wurde eingeführt Ein neuer ioctl()-Befehl zur Überwachung von Änderungen ermöglicht die Benachrichtigung des Prozesses über den Statuswechsel beliebiger GPIO-Leitungen. Ein Beispiel für die Verwendung des neuen Befehls. vorgeschlagen das Werkzeug gpio-watch.
    • Im DRM-Treiber i915 für Intel-Grafikkarten wurde hinzugefügt wurde standardmäßig die Unterstützung für Tigerlake-Chips ("Gen12") eingeführt und eine grundlegende Unterstützung für die Steuerung der OLED-Hintergrundbeleuchtung hinzugefügt. Die Unterstützung für Ice Lake-, Elkhart Lake-, Baytrail- und Haswell-Chips wurde verbessert.
    • Im amdgpu-Treiber hinzugefügt wurde die Möglichkeit hinzugefügt, Firmware in den USBC-Chip für ASIC zu laden. Die Unterstützung für AMD Ryzen 4000 "Renoir"-Chips wurde verbessert. Es gibt nun eine Unterstützung zur Steuerung von OLED-Panels. Der Firmware-Status wird in debugfs angezeigt.
    • Im vmwgfx-DRM-Treiber für VMware-Virtualisierungssysteme wurde die Möglichkeit hinzugefügt, OpenGL 4 in Gast-Systemen zu nutzen (zuvor wurde nur OpenGL 3.3 unterstützt).
    • Ein neuer DRM-Treiber tidss für das Bildschirm-System der TI Keystone-Plattform wurde hinzugefügt.
    • Treiber für LCD-Panels hinzugefügt: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Im Energiemanagement-System hinzugefügt wurde die Unterstützung für die Intel Jasper Lake (JSL) Plattform auf Basis von Atom hinzugefügt.
    • Die Unterstützung für das Notebook Pinebook Pro auf Basis von Rockchip RK3399, das Tablet Pine64 PineTab und das Smartphone PinePhone wurde hinzugefügt. auf Basis von Allwinner A64.
    • Unterstützung neuer Audio-Codecs und Chips hinzugefügt:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Unterstützung für ARM-Plattformen und Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 Varianten des i.MX6 TechNexion Pico-Boards, drei neue Varianten von Toradex Colibri, 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 hinzugefügt.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster