Linux 5.14-Kernel-Release

Nach zweimonatiger Entwicklungszeit präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 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.

Wichtigste Neuerungen:

  • Festplattensubsystem, E/A und Dateisysteme
    • Für Kontrollgruppen wurde ein neuer I/O-Priorisierungscontroller implementiert, 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.
    • Das ext4-Dateisystem implementiert einen neuen ioctl-Befehl, EXT4_IOC_CHECKPOINT, der erzwingt, dass alle ausstehenden Transaktionen aus dem Journal und den zugehörigen Puffern auf die Festplatte geleert werden, und außerdem den vom Journal verwendeten Bereich im Speicher überschreibt. Die Änderung wurde im Rahmen einer Initiative zur Verhinderung von Informationslecks aus Dateisystemen vorbereitet.
    • An Btrfs wurden Leistungsoptimierungen vorgenommen: 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 wurde die Implementierung des Puffercaches neu gestaltet und auf die Zuweisung von Speicherseiten im Batch-Modus umgestellt. Verbesserte Cache-Effizienz.
    • F2FS fügt eine Option für den Betrieb im schreibgeschützten Modus hinzu und implementiert 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 basierend auf einer Maske selektiv zu deaktivieren, wurde eine neue Mount-Option nocompress vorgeschlagen.
    • Am exFAT-Treiber wurden Arbeiten durchgeführt, um die Kompatibilität mit einigen Digitalkameraspeichern zu verbessern.
    • Der Systemaufruf quotectl_fd() wurde hinzugefügt, der es Ihnen ermöglicht, Kontingente nicht über eine spezielle Gerätedatei, sondern durch Angabe eines Dateideskriptors zu verwalten, der dem Dateisystem zugeordnet ist, für das das Kontingent angewendet wird.
    • Die alten Treiber für Blockgeräte mit IDE-Schnittstelle wurden aus dem Kernel entfernt und längst durch das Subsystem libata ersetzt.
    • 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
    • Der Taskplaner implementiert einen neuen Planungsmodus, SCHED_CORE, mit dem 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 cgroup 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 Funktionen im Zusammenhang mit der Reaktion auf die Erkennung von geteilten Sperren („Split Locks“), die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, da 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 einen Kernel-Befehlszeilenparameter „split_lock_detect=ratelimit:N“ hinzu, der es Ihnen ermöglicht, eine systemweite Grenze für die Rate von Sperrvorgängen pro Sekunde zu definieren, nach deren Überschreitung jeder Prozess, der zur Quelle einer geteilten Sperre geworden ist, diesen überschreitet wird gezwungen, für 20 ms anzuhalten, anstatt zu beenden.
    • Der Cgroup-Bandbreitencontroller CFS (CFS-Bandbreitencontroller), der bestimmt, wie viel Prozessorzeit jeder Cgroup zugewiesen werden kann, implementiert die Möglichkeit, zeitlich begrenzte Grenzwerte zu definieren, was eine bessere Regulierung latenzempfindlicher Arbeitslasten 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.
    • Es wurde eine anfängliche Infrastruktur zum Erstellen von BPF-Programmladern hinzugefügt, die außerdem das Laden nur von BPF-Programmen ermöglicht, die mit einem vertrauenswürdigen digitalen Schlüssel signiert sind.
    • Es wurde eine neue Futex-Operation FUTEX_LOCK_PI2 hinzugefügt, die einen monotonen Timer verwendet, um eine Zeitüberschreitung zu berechnen, die die Zeit berücksichtigt, die das System im Ruhemodus verbringt.
    • Für die RISC-V-Architektur sind Unterstützung für große Speicherseiten (Transparent Huge-Pages) und die Möglichkeit implementiert, den KFENCE-Mechanismus zur Fehlererkennung bei der Arbeit mit dem Speicher zu verwenden.
    • Der Systemaufruf madvise(), der eine Möglichkeit zur Optimierung der Speicherverwaltung eines Prozesses bietet, hat die Flags MADV_POPULATE_READ und MADV_POPULATE_WRITE hinzugefügt, um einen „Seitenfehler“ auf allen Speicherseiten zu generieren, die Lese- oder Schreibvorgängen zugeordnet sind, ohne einen tatsächlichen Lese- oder Schreibvorgang durchzuführen (Voreinstellung). 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 zu warten.
    • Das Kunit-Unit-Testsystem bietet jetzt Unterstützung für die Ausführung von Tests in der QEMU-Umgebung.
    • Neue Tracer wurden hinzugefügt: „osnoise“ zum Verfolgen von Anwendungsverzögerungen, die durch die Interrupt-Verarbeitung verursacht werden, und „timerlat“ zum Anzeigen detaillierter Informationen über Verzögerungen beim Aufwachen durch ein Timer-Signal.
  • Virtualisierung und Sicherheit
    • Der Systemaufruf memfd_secret() wurde hinzugefügt, um einen privaten Speicherbereich in einem isolierten Adressraum zu erstellen, der nur für den besitzenden Prozess sichtbar, nicht für andere Prozesse sichtbar und für den Kernel nicht direkt zugänglich ist.
    • Im Seccomp-Systemaufruffiltersystem ist es beim Verschieben blockierender Handler in den Benutzerbereich möglich, eine einzelne 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 der Unterbrechung eines Handlers im Benutzerbereich, wenn ein Signal eintrifft.
    • Es wurde ein neuer Mechanismus zum Verwalten von Ressourcenlimits im Benutzer-ID-Namespace hinzugefügt, der einzelne rlimit-Zähler an einen Benutzer im „Benutzer-Namespace“ bindet. Die Änderung löst das Problem 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 Zeigerauthentifizierungsfunktionen der ARM64-Plattform können 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 von Linux wurde die Unterstützung für die Verwendung von Treibern für PCI-Geräte mit einem virtuellen PCI-Bus hinzugefügt, die durch den PCI-over-Virtio-Treiber implementiert wird.
    • Für x86-Systeme wurde Unterstützung für das paravirtualisierte Gerät virtio-iommu hinzugefügt, sodass IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den Virtio-Transport gesendet werden können, 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. Erweiterungen sind aufgrund der Möglichkeit von Zombieload-Angriffen deaktiviert, die Informationslecks über Drittkanäle manipulieren, die während des Betriebs des TAA-Mechanismus (TSX Asynchronous Abort) auftreten.
  • Netzwerk-Subsystem
    • 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. Die neue Version fügt einen Mechanismus zum Festlegen eigener Traffic-Hashing-Richtlinien für IPv4 und IPv6 (Multipath-Hash-Richtlinie) hinzu, der es ermöglicht, aus dem Benutzerbereich zu bestimmen, welche Felder in Paketen, einschließlich gekapselter, bei der Berechnung des Hashs verwendet werden, der den bestimmt Wahl des Pfades für das Paket.
    • Dem virtuellen Transport von virtio wurde Unterstützung für SOCK_SEQPACKET-Sockets (geordnete und zuverlässige Übertragung von Datagrammen) hinzugefügt.
    • 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 . Die neue Version fügt Tools zur Übertragung der Kontrolle auf einen anderen Socket hinzu, falls die Verarbeitung einer Anfrage durch den ursprünglich ausgewählten Socket fehlschlägt (behebt das Problem mit dem Verlust einzelner Verbindungen beim Neustart von Diensten).
  • Ausrüstung
    • Der amdgpu-Treiber bietet Unterstützung für die neue GPU-Serie AMD Radeon RX 6000 mit den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ sowie verbesserte Unterstützung für die Aldebaran-GPU (gfx90a) und die 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 ASPM-Unterstützung (Active State Power Management) standardmäßig aktiviert, die 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. Insbesondere können Sie mit HMM einen gemeinsamen Adressraum zwischen GPU und CPU organisieren, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann.
    • Anfängliche Unterstützung für die AMD Smart Shift-Technologie hinzugefügt, die die CPU- und GPU-Leistungseinstellungen auf Laptops mit einem AMD-Chipsatz und einer Grafikkarte dynamisch ändert, um die Leistung für Spiele, Videobearbeitung und 3D-Rendering zu steigern.
    • Der i915-Treiber für Intel-Grafikkarten unterstützt Intel Alderlake P-Chips.
    • DRM/Hyperv-Treiber für den virtuellen Hyper-V-Grafikadapter hinzugefügt.
    • Unterstützung für den Raspberry Pi 400 All-in-One-Computer hinzugefügt.
    • Treiber „dell-wmi-privacy“ hinzugefügt, um die in Dell-Laptops enthaltenen Hardware-Kamera- und Mikrofonschalter zu unterstützen.
    • Für Lenovo-Laptops wurde eine WMI-Schnittstelle zum Ändern der BIOS-Einstellungen über sysfs /sys/class/firmware-attributes/ hinzugefügt.
    • Erweiterte Unterstützung für Geräte mit USB4-Schnittstelle.
    • Unterstützung für AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 und Texas Instruments TAS2505 Soundkarten und Codecs hinzugefügt. Verbesserte Audiounterstützung auf HP- und ASUS-Laptops. Es wurden Patches hinzugefügt, um Verzögerungen zu reduzieren, bevor die Audiowiedergabe auf USB-Geräten beginnt.

Source: opennet.ru

Kommentar hinzufügen