Linux-Kernel 5.14

Linux-Kernel 5.14

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.14. Zu den bemerkenswertesten Änderungen gehören: neue Systemaufrufe quotectl_fd() und memfd_secret(), Entfernung von ide- und raw-Treibern, neuer I/O-Prioritätscontroller für cgroup, SCHED_CORE-Aufgabenplanungsmodus, Infrastruktur zum Erstellen verifizierter BPF-Programmlader.

Die neue Version enthält 15883 Fixes von 2002 Entwicklern, die Patchgröße beträgt 69 MB (die Änderungen betrafen 12580 Dateien, 861501 Codezeilen wurden hinzugefügt, 321654 Zeilen wurden gelöscht). Ungefähr 47 % aller in 5.14 eingeführten Änderungen beziehen sich auf Gerätetreiber, ungefähr 14 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 13 % beziehen sich auf den Netzwerkstapel, 3 % beziehen sich auf Dateisysteme und 3 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Haupt- Innovationen:

  • Festplattensubsystem, Ein-/Ausgabe- und Dateisysteme:
    • für cgroup implementiert Neuer I/O-Prioritätscontroller – rq-qos, der die Verarbeitungspriorität von Anforderungen an Blockgeräte steuern kann, die von Mitgliedern jeder Kontrollgruppe generiert werden. Dem mq-deadline-E/A-Scheduler wurde neue Unterstützung für Prioritätscontroller hinzugefügt.
    • auf ext4-Dateisystem umgesetzt Neuer ioctl-Befehl EXT4_IOC_CHECKPOINT, der alle ausstehenden Transaktionen aus dem Protokoll und den zugehörigen Puffern auf die Festplatte erzwingt und außerdem den vom Protokoll verwendeten Bereich im Speicher überschreibt. Die Änderung wurde im Rahmen einer Initiative zur Verhinderung von Informationslecks aus Dateisystemen vorbereitet;
    • in Btrfs trat ein Leistungsoptimierungen: Durch die Eliminierung unnötiger Protokollierung erweiterter Attribute während der fsync-Ausführung wurde die Leistung intensiver Vorgänge mit erweiterten Attributen um bis zu 17 % gesteigert. Darüber hinaus ist beim Ausführen von Trimmvorgängen, die sich nicht auf die Ausdehnung auswirken, die vollständige Synchronisierung deaktiviert, wodurch sich die Vorgangszeit um 12 % verkürzt. Zu sysfs wurde eine Einstellung hinzugefügt, um die I/O-Bandbreite bei der Überprüfung des FS zu begrenzen. ioctl-Aufrufe hinzugefügt, um die Größenänderung und das Löschen von Gerätevorgängen abzubrechen;
    • in XFS überarbeitet Implementierung eines Puffercaches, der im Batch-Modus auf die Zuweisung von Speicherseiten übertragen wird. Verbesserte Cache-Effizienz;
    • F2FS fügte eine Option zum Arbeiten im schreibgeschützten Modus hinzu und implementierte einen Cache-Modus für komprimierte Blöcke (compress_cache), um die Leistung beim zufälligen Lesen zu verbessern. Es wurde Unterstützung für die Komprimierung von Dateien implementiert, die mithilfe der mmap()-Operation dem Speicher zugeordnet wurden. Um die Dateikomprimierung per Maske selektiv zu deaktivieren, wurde eine neue Mount-Option nocompress vorgeschlagen;
    • Am exFAT-Treiber wurde daran gearbeitet, die Kompatibilität mit dem Speicher einiger Digitalkameras zu verbessern.
    • Systemaufruf hinzugefügt quotectl_fd(), mit dem Sie Kontingente nicht über eine spezielle Gerätedatei verwalten können, sondern durch Angabe eines Dateideskriptors, der dem Dateisystem zugeordnet ist, für das das Kontingent gilt;
    • Alte Treiber für Blockgeräte mit IDE-Schnittstelle wurden aus dem Kernel entfernt und längst durch das Subsystem libata ersetzt. Die Unterstützung für alte Geräte wurde vollständig beibehalten, die Änderungen betreffen nur die Möglichkeit, alte Treiber zu verwenden, bei deren Verwendung die Laufwerke /dev/hd* und nicht /dev/sd* hießen;
    • Der „raw“-Treiber wurde aus dem Kernel entfernt und ermöglicht ungepufferten Zugriff auf Blockgeräte über die /dev/raw-Schnittstelle. Diese Funktionalität ist seit langem in Anwendungen implementiert, die das O_DIRECT-Flag verwenden.
  • Speicher- und Systemdienste:
    • Im Aufgabenplaner wurde ein neuer Planungsmodus implementiert SCHED_CORE, wodurch Sie steuern können, welche Prozesse gemeinsam auf demselben CPU-Kern ausgeführt werden können. Jedem Prozess kann eine Cookie-ID zugewiesen werden, die den Vertrauensbereich zwischen Prozessen definiert (z. B. Zugehörigkeit zum selben Benutzer oder Container). Bei der Organisation der Codeausführung kann der Scheduler sicherstellen, dass ein CPU-Kern nur von Prozessen gemeinsam genutzt wird, die demselben Eigentümer zugeordnet sind. Dies kann zum Blockieren einiger Spectre-Angriffe verwendet werden, indem verhindert wird, dass vertrauenswürdige und nicht vertrauenswürdige Aufgaben auf demselben SMT-Thread (Hyper Threading) ausgeführt werden ;
    • für den cgroup-Mechanismus wurde Unterstützung für die Kill-Operation implementiert, die es Ihnen ermöglicht, alle mit der Gruppe verbundenen Prozesse auf einmal zu beenden (SIGKILL senden), indem Sie „1“ in die virtuelle Datei cgroup.kill schreiben;
    • erweiterte Fähigkeiten im Zusammenhang mit der Reaktion auf die Erkennung von geteilten Sperren („Split Locks“), die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, weil die Daten bei der Ausführung einer atomaren Anweisung zwei CPU-Cache-Zeilen überschreiten. Eine solche Blockierung führt zu einem erheblichen Leistungsabfall, sodass es bisher möglich war, die Anwendung, die die Blockierung verursacht hat, zwangsweise zu beenden. Die neue Version fügt den Kernel-Befehlszeilenparameter „split_lock_detect=ratelimit:N“ hinzu, der es Ihnen ermöglicht, ein systemweites Limit für die Rate von Sperrvorgängen pro Sekunde zu definieren, nach dessen Überschreiten jeder Prozess, der zur Quelle einer geteilten Sperre wurde, dies tut gezwungen werden, für 20 ms anzuhalten, anstatt zu beenden;
    • Der Cgroup-Bandbreitencontroller CFS (CFS-Bandbreitencontroller), der bestimmt, wie viel Prozessorzeit jeder Cgroup zugewiesen werden kann, verfügt über die Möglichkeit, durch eine bestimmte Aktionsdauer begrenzte Grenzwerte zu definieren, was eine bessere Regulierung latenzempfindlicher Lasten ermöglicht. Wenn Sie beispielsweise cpu.cfs_quota_us auf 50000 und cpu.cfs_period_us auf 100000 setzen, kann eine Gruppe von Prozessen alle 100 ms 50 ms CPU-Zeit verschwenden.
    • hinzugefügt anfängliche Infrastruktur zur Erstellung von BPF-Programmladern, die darüber hinaus den Download nur von BPF-Programmen ermöglichen wird, die mit einem vertrauenswürdigen digitalen Schlüssel signiert sind;
    • eine neue Futex-Operation FUTEX_LOCK_PI2 hinzugefügt, die einen monotonen Timer zur Berechnung des Timeouts verwendet, der die Zeit berücksichtigt, die das System im Schlafmodus verbringt;
    • für die RISC-V-Architektur, Unterstützung für große Speicherseiten (Transparent Huge-Pages) und die Möglichkeit, das zu verwenden KFENCE um Fehler bei der Arbeit mit dem Gedächtnis zu erkennen;
    • in den Systemaufruf madvise(), der eine Möglichkeit zur Optimierung der Prozessspeicherverwaltung bietet, hinzugefügt MADV_POPULATE_READ- und MADV_POPULATE_WRITE-Flags, um einen „Seitenfehler“ auf allen für Lese- oder Schreibvorgänge zugeordneten Speicherseiten zu generieren, ohne einen tatsächlichen Lese- oder Schreibvorgang durchzuführen (Vorfehler). Die Verwendung von Flags kann nützlich sein, um Verzögerungen bei der Ausführung des Programms zu reduzieren, da der „Seitenfehler“-Handler proaktiv für alle nicht zugewiesenen Seiten gleichzeitig ausgeführt wird, ohne auf den tatsächlichen Zugriff darauf warten zu müssen.
    • in einem Unit-Testsystem kunit hinzugefügt Unterstützung für die Ausführung von Tests in der QEMU-Umgebung;
    • Neue Tracer hinzugefügt: „Osnoise„ um Anwendungsverzögerungen zu verfolgen, die durch die Interrupt-Verarbeitung verursacht werden, und „ timerlat “, um detaillierte Informationen über Verzögerungen beim Aufwachen durch ein Timer-Signal anzuzeigen;
  • Virtualisierung und Sicherheit:
    • hinzugefügt Systemaufruf memfd_secret(), mit dem Sie einen privaten Speicherbereich in einem isolierten Adressraum erstellen können, der nur für den Eigentümerprozess sichtbar ist, sich nicht in anderen Prozessen widerspiegelt und für den Kernel nicht direkt zugänglich ist;
    • Im SECCOMP-Systemaufruffiltersystem ist es beim Verschieben von Sperrhandlern in den Benutzerbereich möglich, eine atomare Operation zu verwenden, um einen Dateideskriptor für eine isolierte Aufgabe zu erstellen und ihn bei der Verarbeitung eines Systemaufrufs zurückzugeben. Die vorgeschlagene Operation löst das problem mit Unterbrechung des Handlers im Benutzerbereich, wenn ein Signal eintrifft;
    • hinzugefügt neuer Mechanismus um die Ressourcenbegrenzung im Benutzer-ID-Namespace zu verwalten, wodurch einzelne Rlimit-Zähler an einen Benutzer im „Benutzer-Namespace“ gebunden werden. Die Änderung löst das Problem mit der Verwendung gemeinsamer Ressourcenzähler, wenn ein Benutzer Prozesse in verschiedenen Containern ausführt;
    • Der KVM-Hypervisor für ARM64-Systeme hat die Möglichkeit hinzugefügt, die MTE-Erweiterung (MemTag, Memory Tagging Extension) in Gastsystemen zu verwenden, die es Ihnen ermöglicht, Tags an jeden Speicherzuweisungsvorgang zu binden und die Überprüfung der korrekten Verwendung von Zeigern zu organisieren, um die Ausnutzung von zu blockieren Schwachstellen durch Zugriff auf bereits freigegebene Speicherblöcke, Pufferüberläufe, Zugriffe vor der Initialisierung und Verwendung außerhalb des aktuellen Kontexts;
    • Die von der ARM64-Plattform bereitgestellte Zeigerauthentifizierung kann jetzt separat für Kernel und Benutzerbereich konfiguriert werden. Mit dieser Technologie können Sie spezielle ARM64-Anweisungen verwenden, um Rücksprungadressen mithilfe digitaler Signaturen zu überprüfen, die in den nicht verwendeten oberen Bits des Zeigers selbst gespeichert sind.
    • im Benutzermodus Linux hinzugefügt Unterstützung für die Verwendung von Treibern für PCI-Geräte mit virtuellem PCI-Bus, implementiert durch den PCI-over-virtio-Treiber;
    • für x86-Systeme wurde Unterstützung für das paravirtualisierte Gerät virtio-iommu hinzugefügt, das es Ihnen ermöglicht, IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den Virtio-Transport zu senden, ohne Speicherseitentabellen zu emulieren;
    • Für Intel-CPUs, von der Skylake-Familie bis hin zu Coffee Lake, ist die Verwendung von Intel TSX (Transactional Synchronization Extensions), die Tools zur Verbesserung der Leistung von Multithread-Anwendungen durch die dynamische Eliminierung unnötiger Synchronisierungsvorgänge bereitstellen, standardmäßig deaktiviert. Aufgrund der Möglichkeit von Angriffen sind Erweiterungen deaktiviert Zombieload, Manipulation des Informationslecks über Kanäle Dritter, der während des Betriebs des Mechanismus zur asynchronen Betriebsunterbrechung (TAA, TSX Asynchronous Abort) auftritt;
  • Netzwerk-Subsystem:
    • Fortsetzung der Integration in den Kern von MPTCP (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 unterschiedlichen IP-Adressen zugeordnet sind. In der neuen Ausgabe hinzugefügt Ein Mechanismus zum Festlegen Ihrer eigenen Traffic-Hashing-Richtlinien für IPv4 und IPv6 (Multipath-Hash-Richtlinie), der es ermöglicht, aus dem Benutzerbereich heraus zu bestimmen, welche Felder in Paketen, einschließlich gekapselter, bei der Berechnung des Hashs verwendet werden, der die Wahl des Pfads bestimmt für das Paket;
    • Dem Virtual Transport Virtio wurde Socket-Unterstützung hinzugefügt SOCK_SEQPACKET (geordnete und zuverlässige Übertragung von Datagrammen);
    • Die Fähigkeiten des SO_REUSEPORT-Socket-Mechanismus wurden erweitert, wodurch mehrere Listening-Sockets gleichzeitig eine Verbindung zu einem Port herstellen können, um Verbindungen zu empfangen, wobei eingehende Anforderungen gleichzeitig auf alle über SO_REUSEPORT verbundenen Sockets verteilt werden, was die Erstellung von Multithread-Serveranwendungen vereinfacht . In der neuen Version hinzugefügt Mittel zum Übertragen der Kontrolle auf einen anderen Socket im Falle eines Fehlers bei der Verarbeitung einer Anfrage durch den ursprünglich ausgewählten Socket (löst das Problem mit dem Verlust einzelner Verbindungen beim Neustart von Diensten);
  • Ausrüstung:
    • im amdgpu-Treiber umgesetzt Unterstützung für die neue AMD Radeon RX 6000-GPU-Serie mit den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ sowie verbesserte Unterstützung für Aldebaran GPU (gfx90a) und Van Gogh APU. Möglichkeit hinzugefügt, gleichzeitig mit mehreren eDP-Panels zu arbeiten. Für APU Renoir wurde Unterstützung für die Arbeit mit verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) implementiert. Unterstützung für Hot-Unplug-Grafikkarten hinzugefügt. Für Radeon RX 6000 (Navi 2x) GPUs und ältere AMD GPUs ist die Unterstützung für den Energiesparmechanismus ASPM (Active State Power Management) standardmäßig aktiviert, der zuvor nur für Navi 1x, Vega und Polaris GPUs aktiviert war;
    • für AMD-Chips wurde die Unterstützung für gemeinsam genutzten virtuellen Speicher (SVM, Shared Virtual Memory) basierend auf dem HMM-Subsystem (Heterogeneous Memory Management) hinzugefügt, das die Verwendung von Geräten mit eigenen Speicherverwaltungseinheiten (MMU, Memory Management Unit) ermöglicht. der auf den Hauptspeicher zugreifen kann. Unter Verwendung von HMM können Sie einen gemeinsamen Adressraum zwischen GPU und CPU organisieren, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann.
    • Erster Technologie-Support hinzugefügt AMD Smart Shift, das die Stromverbrauchsparameter von CPU und GPU auf Laptops mit einem Chipsatz und einer AMD-Grafikkarte dynamisch ändert, um die Leistung beim Spielen, bei der Videobearbeitung und beim 3D-Rendering zu steigern;
    • im i915-Treiber für Intel-Grafikkarten enthalten Unterstützung für Intel Alderlake P-Chips;
    • drm/hyperv-Treiber für den virtuellen Hyper-V-Grafikadapter hinzugefügt;
    • hinzugefügt simpledrm-Grafiktreiber, der den von der UEFI-Firmware oder dem BIOS bereitgestellten EFI-GOP- oder VESA-Framebuffer für die Ausgabe verwendet. Der Hauptzweck des Treibers besteht darin, in der Anfangsphase des Bootvorgangs grafische Ausgabefunktionen bereitzustellen, bevor ein vollständiger DRM-Treiber verwendet werden kann. Der Treiber kann auch als Übergangslösung für Geräte verwendet werden, die noch nicht über native DRM-Treiber verfügen;
    • hinzugefügt All-in-One-Computerunterstützung Raspberry Pi 400;
    • Treiber „dell-wmi-privacy“ hinzugefügt, um die in Dell-Laptops enthaltenen Kamera- und Mikrofon-Hardwareschalter zu unterstützen;
    • für Lenovo-Laptops hinzugefügt WMI-Schnittstelle zum Ändern von BIOS-Parametern über sysfs /sys/class/firmware-attributes/;
    • erweitert Unterstützung für Geräte mit USB4-Schnittstelle;
    • hinzugefügt Unterstützung für Soundkarten und Codecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 und Texas Instruments TAS2505. Verbesserte Audiounterstützung auf HP- und ASUS-Laptops. Hinzugefügt Patches zur Reduzierung von Verzögerungen vor der Audiowiedergabe auf Geräten mit USB-Schnittstelle.

Quelle – opennet.ru.

Source: linux.org.ru