Linux 5.7-Kernel-Release

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.7. Zu den bemerkenswertesten Änderungen gehören: eine neue Implementierung des exFAT-Dateisystems, ein Bareudp-Modul zum Erstellen von UDP-Tunneln, ein auf Zeigerauthentifizierung basierender Schutz für ARM64, die Möglichkeit, BPF-Programme an LSM-Handler anzuhängen, eine neue Implementierung von Curve25519, ein Split- Sperrdetektor, BPF-Kompatibilität mit PREEMPT_RT, Aufhebung der Begrenzung der 80-Zeichen-Zeilengröße im Code, Berücksichtigung von CPU-Temperaturindikatoren im Taskplaner, die Möglichkeit, clone() zum Starten von Prozessen in einer anderen Kontrollgruppe zu verwenden, Schutz vor Schreiben mit userfaultfd in den Speicher kopieren.

Die neue Version enthält 15033 Fixes von 1961 Entwicklern,
Patchgröße - 39 MB (Änderungen betrafen 11590 Dateien, hinzugefügt 570560 Codezeilen,
297401 Zeilen entfernt). Etwa 41 % aller in 5.7 vorgestellten Fälle
Änderungen beziehen sich auf Gerätetreiber, etwa 16 % der Änderungen
Einstellung zur Aktualisierung von Hardware-Architektur-spezifischem Code, 13 %
bezogen auf den Netzwerk-Stack, 4 % auf Dateisysteme und 4 % auf interne
Kernel-Subsysteme.

Haupt- Innovationen:

  • Festplattensubsystem, E/A und Dateisysteme
    • Neue exFAT-Treiberimplementierung hinzugefügt, Gegründet Basierend auf der aktuellen Codebasis „sdfat“ (2.x), die Samsung für seine Android-Smartphones entwickelt hat. Der zuvor zum Kernel hinzugefügte Treiber basierte auf älterem Samsung-Code (Version 1.2.9) und lag in der Leistung etwa 10 % hinter dem neuen Treiber zurück. Erinnern wir uns daran, dass das Hinzufügen von exFAT-Unterstützung zum Kernel nach Microsoft möglich wurde опубликовала öffentliche Spezifikationen und stellte exFAT-Patente zur lizenzgebührenfreien Nutzung unter Linux zur Verfügung.
    • Btrfs implementiert einen neuen ioctl()-Befehl – ​​BTRFS_IOC_SNAP_DESTROY_V2, der es Ihnen ermöglicht, einen Unterabschnitt anhand seiner Kennung zu löschen. Es wird volle Unterstützung für das Klonen von Inline-Extents bereitgestellt. Die Anzahl der Stornierungspunkte für Umverteilungsvorgänge wurde erweitert, wodurch lange Wartezeiten bei der Ausführung des Befehls „Kontostand stornieren“ reduziert wurden. Die Ermittlung von Backlinks zu Extents wurde beschleunigt (z. B. wurde die Ausführungszeit des Testskripts von einer Stunde auf mehrere Minuten verkürzt). Es wurde die Möglichkeit hinzugefügt, Dateierweiterungen an jeden Inode eines Baums anzuhängen. Das beim Schreiben in Unterpartitionen und beim Ausschließen von NOCOW verwendete Blockierungsschema wurde neu gestaltet. Verbesserte Effizienz der fsync-Ausführung für Bereiche.
    • XFS hat die Metadatenprüfung und fsck für aktive Partitionen verbessert. Für den Neuaufbau von Btree-Strukturen wurde eine Bibliothek vorgeschlagen, die in Zukunft zur Überarbeitung von xfs_repair und zur Implementierung der Möglichkeit einer Wiederherstellung ohne Aushängen der Partition verwendet werden soll.
    • Zu CIFS wurde experimentelle Unterstützung für die Platzierung einer Swap-Partition in SMB3-Speichern hinzugefügt. POSIX-Erweiterungen für readdir implementiert, definiert in der SMB3.1.1-Spezifikation. Verbesserte Schreibleistung für 64-KB-Seiten, wenn der Cache=Strict-Modus aktiviert ist und Protokollversionen 2.1+ verwendet werden.
    • FS EXT4 wurde von bmap und iopoll auf die Verwendung von iomap übertragen.
    • F2FS bietet optionale Unterstützung für die Datenkomprimierung mithilfe des zstd-Algorithmus. Standardmäßig wird zur Komprimierung der LZ4-Algorithmus verwendet. Unterstützung für den Befehl „chattr -c commit“ hinzugefügt. Eine Anzeige der Montagezeit ist vorhanden. ioctl F2FS_IOC_GET_COMPRESS_BLOCKS hinzugefügt, um Informationen über die Anzahl der komprimierten Blöcke zu erhalten. Komprimierungsdatenausgabe über statx hinzugefügt.
    • Das Ceph-Dateisystem hat die Möglichkeit hinzugefügt, Vorgänge zum Erstellen und Löschen von Dateien lokal durchzuführen (Verknüpfung aufheben), ohne auf eine Antwort vom Server warten zu müssen (im asynchronen Modus). Die Änderung kann beispielsweise die Leistung beim Ausführen des Dienstprogramms rsync erheblich verbessern.
    • Die Möglichkeit, Virtiofs als Dateisystem der obersten Ebene zu verwenden, wurde zu OVERLAYFS hinzugefügt.
    • Umgeschrieben Pfaddurchquerungscode in VFS, symbolischer Link-Parsing-Code wurde überarbeitet und Mountpunktdurchquerung wurde vereinheitlicht.
    • Im SCSI-Subsystem für unprivilegierte Benutzer erlaubt Ausführung von ZBC-Befehlen.
    • In dm_writecache umgesetzt die Möglichkeit, den Cache basierend auf dem Parameter max_age, der die maximale Lebensdauer eines Blocks festlegt, schrittweise zu leeren.
    • In dm_integrity hinzugefügt Unterstützung für die Operation „Verwerfen“.
    • In null_blk hinzugefügt Unterstützung für Fehlersubstitution, um Fehler während des Tests zu simulieren.
    • Hinzugefügt von Möglichkeit, udev-Benachrichtigungen über Änderungen der Blockgerätegröße zu senden.
  • Netzwerk-Subsystem
    • Netzfilter im Lieferumfang enthalten VeränderungenDies beschleunigt die Verarbeitung großer Übereinstimmungslisten (nftables-Sets), die die Überprüfung einer Kombination aus Subnetzen, Netzwerkports, Protokollen und MAC-Adressen erfordern, erheblich.
      Optimierungen trat ein in das Modul nft_set_pipapo (PIle PAcket POlicies), das das Problem des Abgleichs des Inhalts eines Pakets mit beliebigen Feldzustandsbereichen löst, die in Filterregeln verwendet werden, wie z. B. IP- und Netzwerk-Portbereiche (nft_set_rbtree und nft_set_hash manipulieren den Intervallabgleich und die direkte Reflexion von Werten). ). Die mit 256-Bit-AVX2-Anweisungen vektorisierte Version von Pipapo auf einem System mit einem AMD Epyc 7402-Prozessor zeigte eine Leistungssteigerung von 420 % beim Parsen von 30 Datensätzen einschließlich Port-Protokoll-Kombinationen. Der Anstieg beim Vergleich einer Kombination aus Subnetz und Portnummer beim Parsen von 1000 Datensätzen betrug 87 % für IPv4 und 128 % für IPv6.

    • Добавлен bareudp-Modul, mit dem Sie verschiedene L3-Protokolle wie MPLS, IP und NSH in einen UDP-Tunnel kapseln können.
    • Die Integration von MPTCP-Komponenten (MultiPath TCP), einer Erweiterung des TCP-Protokolls zur Organisation des Betriebs einer TCP-Verbindung mit der gleichzeitigen Zustellung von Paketen auf mehreren Routen über verschiedene Netzwerkschnittstellen, die an unterschiedliche IP-Adressen gebunden sind, wurde fortgesetzt.
    • Hinzugefügt von 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 Besitz der entsprechenden Dateien in sysfs angepasst.
    • Es wurde die Möglichkeit hinzugefügt, das Flag SO_BINDTODEVICE für Nicht-Root-Benutzer zu verwenden.
    • Der dritte Teil der Patches wurde akzeptiert und konvertierte das Ethtool-Toolkit von ioctl() auf die Verwendung der Netlink-Schnittstelle. 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 Kernel und Benutzerbereich und reduziert die Anzahl benannter Listen, die synchronisiert werden müssen.
    • Es wurde die Möglichkeit hinzugefügt, spezielle Hardwarebeschleuniger zur Durchführung von Verbindungsverfolgungsvorgängen zu verwenden.
    • Im Netzfilter hinzugefügt ein Hook zum Verbinden von Klassifikatoren für ausgehende Pakete (Egress), der den bisher vorhandenen Hook für eingehende Pakete (Ingress) ergänzt.
  • Virtualisierung und Sicherheit
    • Hardware-Implementierung der Zeigerauthentifizierung hinzugefügt (Zeigerauthentifizierung), das spezielle ARM64-CPU-Anweisungen verwendet, um sich vor Angriffen mithilfe von ROP-Techniken (Return-Oriented Programming) zu schützen, bei denen der Angreifer nicht versucht, seinen Code im Speicher abzulegen, sondern Teile von Maschinenanweisungen ausführt, die bereits in geladenen Bibliotheken verfügbar sind, endet mit einer Steuerrückgabeanweisung. Bei der Sicherheit kommt es darauf an, digitale Signaturen zur Überprüfung von Absenderadressen auf Kernel-Ebene zu verwenden. Die Signatur wird in den nicht verwendeten oberen Bits des Zeigers selbst gespeichert. Im Gegensatz zu Softwareimplementierungen erfolgt die Erstellung und Überprüfung digitaler Signaturen mithilfe spezieller CPU-Anweisungen.
    • Hinzugefügt von die Möglichkeit, einen Speicherbereich mithilfe des Systemaufrufs userfaultfd() vor dem Schreiben zu schützen, der für die Behandlung von Seitenfehlern (Zugriff auf nicht zugewiesene Speicherseiten) im Benutzerbereich entwickelt wurde. Die Idee besteht darin, mit userfaultfd() sowohl Zugriffsverletzungen auf als schreibgeschützt markierte Seiten zu erkennen als auch einen Handler aufzurufen, der auf solche Schreibversuche reagieren kann (z. B. um Änderungen während der Erstellung von Live-Snapshots laufender Prozesse zu verarbeiten, state Erfassung beim Sichern von Speicherauszügen auf die Festplatte, Implementieren von gemeinsam genutztem Speicher, Verfolgen von Änderungen im Speicher). Funktionalität Äquivalent Verwenden von mprotect() in Verbindung mit dem SIGSEGV-Signalhandler, aber es funktioniert spürbar schneller.
    • SELinux hat den Parameter „checkreqprot“ als veraltet markiert, der es Ihnen ermöglicht, Speicherschutzprüfungen bei der Verarbeitung von Regeln zu deaktivieren (wodurch die Verwendung ausführbarer Speicherbereiche unabhängig von den in den Regeln angegebenen Regeln ermöglicht wird). Kernfs-Symlinks dürfen den Kontext ihrer übergeordneten Verzeichnisse erben.
    • Die Zusammensetzung inbegriffen Modul KRSI, mit dem Sie BPF-Programme an alle LSM-Hooks im Kernel anhängen können. Durch die Änderung können Sie LSM-Module (Linux Security Module) in Form von BPF-Programmen erstellen, um Audit-Probleme und obligatorische Zugriffskontrollen zu lösen.
    • Ausgetragen Optimiert die Leistung von /dev/random durch Stapeln von CRNG-Werten, anstatt RNG-Anweisungen einzeln aufzurufen. Verbesserte Leistung von getrandom und /dev/random auf ARM64-Systemen, die RNG-Anweisungen bereitstellen.
    • Implementierung einer elliptischen Kurve Curve25519 ersetzt für die Option aus der Bibliothek HACL, wofür gegeben mathematischer Beweis der formalen Zuverlässigkeitsüberprüfung.
    • Добавлен Mechanismus zur Information über freie Speicherseiten. Über diesen Mechanismus können Gastsysteme Informationen über nicht mehr genutzte Seiten an das Hostsystem übermitteln und der Host kann die Seitendaten zurückholen.
    • In vfio/pci hinzugefügt Unterstützung für SR-IOV (Single-Root I/O Virtualization).
  • Speicher- und Systemdienste
    • Von 80 bis 100 Zeichen erhöht Begrenzung der maximalen Zeilenlänge in den Quelltexten. Gleichzeitig wird den Entwicklern weiterhin empfohlen, innerhalb von 80 Zeichen pro Zeile zu bleiben, dies ist jedoch keine feste Grenze mehr. Darüber hinaus führt das Überschreiten der Zeilengrößenbeschränkung jetzt nur dann zu einer Build-Warnung, wenn Checkpatch mit der Option „--strict“ ausgeführt wird. Die Änderung wird es ermöglichen, Entwickler nicht dadurch abzulenken Manipulation mit Leerzeichen und fühlen Sie sich beim Ausrichten von Code freier wird verhindern übermäßiger Zeilenumbruch, verstörend Code-Verständnis und Suche.
    • Hinzugefügt von Unterstützung für den gemischten EFI-Boot-Modus, der es Ihnen ermöglicht, einen 64-Bit-Kernel von einer 32-Bit-Firmware zu laden, die auf einer 64-Bit-CPU ausgeführt wird, ohne einen speziellen Bootloader zu verwenden.
    • Inbegriffen System zum Identifizieren und Debuggen von geteilten Sperren („geteiltes Schloss"), was beim Zugriff auf nicht ausgerichtete Daten im Speicher auftritt, da die Daten bei der Ausführung eines atomaren Befehls zwei CPU-Cache-Zeilen überschreiten. Eine solche Blockierung führt zu einem erheblichen Leistungseinbruch (1000 Zyklen langsamer als eine atomare Operation für Daten, die in eine Cache-Zeile fallen). Abhängig vom Boot-Parameter „split_lock_detect“ kann der Kernel solche Sperren im laufenden Betrieb erkennen und Warnungen ausgeben oder ein SIGBUS-Signal an die Anwendung senden, die die Sperre verursacht.
    • Der Aufgabenplaner ermöglicht die Verfolgung von Temperatursensoren (Thermischer Druck) und unter Berücksichtigung der Überhitzung bei der Aufgabenverteilung implementiert. Anhand der bereitgestellten Statistiken kann der Temperaturregler die maximale CPU-Frequenz bei Überhitzung anpassen, und der Aufgabenplaner berücksichtigt jetzt die Verringerung der Rechenleistung aufgrund einer solchen Verringerung der Häufigkeit bei der Planung der Ausführung von Aufgaben (zuvor reagierte der Planer auf Änderungen). in der Häufigkeit mit einer gewissen Verzögerung, wobei Entscheidungen für einige Zeit auf der Grundlage überzogener Annahmen über verfügbare Rechenressourcen getroffen werden.
    • Der Aufgabenplaner enthält invariante Indikatoren Lastverfolgung, sodass Sie die Last unabhängig von der aktuellen CPU-Betriebsfrequenz richtig einschätzen können. Durch die Änderung können Sie das Verhalten von Aufgaben unter Bedingungen dynamischer Änderungen der Spannung und der CPU-Frequenz genauer vorhersagen. Beispielsweise verbraucht eine Aufgabe, die 1/3 der CPU-Ressourcen bei 1000 MHz verbraucht hat, 2/3 der Ressourcen, wenn die Frequenz auf 500 MHz sinkt, was zuvor zu der falschen Annahme führte, dass sie mit voller Auslastung lief (d. h. es wurden Aufgaben angezeigt). nur durch Reduzierung der Frequenz größer für den Scheduler, was dazu führte, dass im schedutil cpufreq Governor falsche Entscheidungen getroffen wurden.
    • Der Intel P-State-Treiber, der für die Auswahl der Leistungsmodi verantwortlich ist, wurde auf die Verwendung umgestellt Schedutil.
    • Die Möglichkeit, das BPF-Subsystem zu verwenden, wenn der Kernel in Echtzeit läuft (PREEMPT_RT), wurde implementiert. Bisher musste BPF deaktiviert werden, wenn PREEMPT_RT aktiviert war.
    • Ein neuer BPF-Programmtyp wurde hinzugefügt – BPF_MODIFY_RETURN, der an eine Funktion im Kernel angehängt werden kann und den von dieser Funktion zurückgegebenen Wert ändert.
    • Hinzugefügt von Gelegenheit Verwenden des Systemaufrufs clone3() zum Erstellen eines Prozesses in einer Kontrollgruppe, die sich von der übergeordneten Kontrollgruppe unterscheidet, wodurch der übergeordnete Prozess sofort nach dem Erzeugen eines neuen Prozesses oder Threads Einschränkungen anwenden und die Abrechnung aktivieren kann. Beispielsweise kann ein Dienstmanager neue Dienste direkt separaten Kontrollgruppen zuweisen, und neue Prozesse werden sofort gestoppt, wenn sie in „eingefrorenen“ Kontrollgruppen platziert werden.
    • in Kbuild hinzugefügt Unterstützung für die Umgebungsvariable „LLVM=1“, um beim Erstellen des Kernels zum Clang/LLVM-Toolkit zu wechseln. Die Anforderungen für die Binutils-Version wurden erhöht (2.23).
    • Zu debugfs wurde ein Abschnitt /sys/kernel/debug/kunit/ mit den Ergebnissen der Kunit-Tests hinzugefügt.
    • Kernel-Boot-Parameter pm_debug_messages hinzugefügt (analog zu /sys/power/pm_debug_messages), der die Ausgabe von Debug-Informationen über den Betrieb des Energieverwaltungssystems ermöglicht (nützlich beim Debuggen von Problemen mit Ruhezustand und Standby-Modus).
    • Zur asynchronen I/O-Schnittstelle io_uring Unterstützung hinzugefügt spleißen() и Auswahl des atomaren Puffers.
    • Verbesserte Cgroup-Profilerstellung mithilfe des Perf-Toolkits. Bisher konnte perf nur Aufgaben in einer bestimmten Kontrollgruppe profilieren und nicht herausfinden, zu welcher Kontrollgruppe die aktuelle Stichprobe gehört. perf ruft jetzt Kontrollgruppeninformationen für jede Stichprobe ab, sodass Sie mehr als eine Kontrollgruppe profilieren und eine Sortierung nach anwenden können
      cgroup in Berichten.

    • cgroupfs, ein Pseudo-FS zur Verwaltung von Kontrollgruppen, hat Unterstützung für erweiterte Attribute (xattrs) hinzugefügt, mit denen Sie beispielsweise zusätzliche Informationen für Handler im Benutzerbereich hinterlassen können.
    • Im cgroup-Speichercontroller hinzugefügtund Unterstützung für den rekursiven Schutz des „memory.low“-Werts, der die Mindestmenge an RAM regelt, die Gruppenmitgliedern zur Verfügung gestellt wird. Beim Mounten einer cgroup-Hierarchie mit der Option „memory_recursiveprot“ wird der Wert von „memory.low“, der für die unteren Knoten festgelegt ist, automatisch an alle untergeordneten Knoten verteilt.
    • Добавлен Uacce-Framework (Unified/User-Space-Access-intended Accelerator Framework) für die gemeinsame Nutzung virtueller Adressen (SVA, Shared Virtual Addressing) zwischen der CPU und Peripheriegeräten, sodass Hardwarebeschleuniger auf Datenstrukturen in der Haupt-CPU zugreifen können.
  • Hardware-Architekturen
    • Für die ARM-Architektur ist die Möglichkeit zum Hot-Fetch-Speicher implementiert.
    • Für die RISC-V-Architektur wurde Unterstützung für das Hot-Plugging und Entfernen von CPUs (CPU-Hotplug) hinzugefügt. Für 32-Bit-RISC-V ist eBPF JIT implementiert.
    • Die Möglichkeit, 32-Bit-ARM-Systeme zum Ausführen von KVM-Gastumgebungen zu verwenden, wurde entfernt.
    • Die „Dummy“-NUMA-Implementierung für die s390-Architektur wurde entfernt, für die keine Anwendungsfälle zur Erzielung von Leistungsverbesserungen gefunden wurden.
    • Für ARM64 wurde Unterstützung für die AMU-Erweiterung (Activity Monitors Unit) hinzugefügt, die in ARMv8.4 definiert ist und Leistungsindikatoren bereitstellt, die zur Berechnung von Frequenzskalierungskorrekturfaktoren im Taskplaner verwendet werden.
  • Ausrüstung
    • Hinzugefügt von Unterstützung für vDPA-Geräte, die einen Datenaustauschkanal verwenden, der den Virtio-Spezifikationen entspricht. vDPA-Geräte können entweder physisch verbundene Geräte oder softwareemulierte virtuelle Geräte sein.
    • Im GPIO-Subsystem erschienen ein neuer ioctl()-Befehl zur Überwachung von Änderungen, der es Ihnen ermöglicht, den Prozess über Änderungen im Status einer beliebigen GPIO-Leitung zu informieren. Als Beispiel für die Verwendung des neuen Befehls vorgeschlagen gpio-watch-Dienstprogramm.
    • Im i915 DRM-Treiber für Intel-Grafikkarten enthalten Standardunterstützung für Tigerlake-Chips („Gen12“) und zusätzliche anfängliche Unterstützung für die Steuerung der OLED-Hintergrundbeleuchtung. Verbesserte Unterstützung für Ice Lake-, Elkhart Lake-, Baytrail- und Haswell-Chips.
    • Im amdgpu-Treiber hinzugefügt Möglichkeit, Firmware in den USBC-Chip für ASIC zu laden. Verbesserte Unterstützung für AMD Ryzen 4000 „Renoir“-Chips. Es gibt jetzt Unterstützung für die Steuerung von OLED-Panels. Anzeige des Firmware-Status in debugfs bereitgestellt.
    • Dem vmwgfx DRM-Treiber für VMware-Virtualisierungssysteme wurde die Möglichkeit hinzugefügt, OpenGL 4 in Gastsystemen zu verwenden (zuvor wurde OpenGL 3.3 unterstützt).
    • Neue DRM-Treiber-Tidss für das TI Keystone-Plattform-Anzeigesystem 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.
    • Zum Energiemanagementsystem hinzugefügt Unterstützung für die Atom-basierte Intel Jasper Lake (JSL)-Plattform.
    • Unterstützung für Pinebook Pro-Laptops basierend auf Rockchip RK3399, Pine64 PineTab-Tablets und Smartphones hinzugefügt PinePhone basierend auf Allwinner A64.
    • Unterstützung für neue 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-Boards und -Plattformen Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron „sl28“, 11 i.MX6 TechNexion Pico-Board-Optionen, drei neue Toradex Colibri-Optionen, Samsung S7710 Galaxy Xcover 2 basierend auf ST hinzugefügt -Ericsson u8500, DH Electronics DHCOM SoM und PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Source: opennet.ru

Kommentar hinzufügen