Linux-Kernel 5.14

Linux-Kernel 5.14

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor Kernelveröffentlichung Linux 5.14. Zu den auffälligsten Änderungen gehören: neue Systemaufrufe quotactl_fd() und memfd_secret(), Entfernung der ide- und raw-Treiber, neuer I/O-Prioritätscontroller für cgroups, der Modus für die Aufgabenplanung SCHED_CORE sowie eine Infrastruktur zur Erstellung von Bootloaders für verifizierte BPF-Programme.

In die neue Version wurden 15883 Änderungen von 2002 Entwicklern aufgenommen, die Patchgröße beträgt 69 MB (Änderungen betreffen 12580 Dateien, es wurden 861501 Codezeilen hinzugefügt und 321654 Zeilen gelöscht). Etwa 47% aller in 5.14 enthaltenen Änderungen stehen im Zusammenhang mit Gerätetreibern, etwa 14% betreffen Aktualisierungen des architekturspezifischen Codes, 13% sind mit dem Netzwerk-Stack verbunden, 3% mit Dateisystemen und 3% mit internen Kernsubsystemen.

Haupt- Neuheiten:

  • Festplattensubsystem, I/O und Dateisysteme:
    • für cgroup wurde implementiert neuer I/O-Prioritätscontroller — rq-qos, der die Priorität der Anfragen, die von den Teilnehmern jeder cgroup an Blockgeräte gesendet werden, verwalten kann. Die Unterstützung für den neuen Prioritätscontroller wurde dem I/O-Scheduler mq-deadline hinzugefügt;
    • im Dateisystem ext4 wurde neuer ioctl-Befehl EXT4_IOC_CHECKPOINT, der alle ausstehenden Transaktionen aus dem Journal und die zugehörigen Puffer auf die Festplatte zwingt und außerdem den für das Journal verwendeten Bereich im Speicher überschreibt. Diese Änderung wurde im Rahmen einer Initiative zur Verhinderung von Informationslecks aus Dateisystemen vorbereitet;
    • in Btrfs wurden Leistungsoptimierungen: Durch den Ausschluss überflüssiger Protokollierungen von erweiterten Attributen während der Ausführung von fsync wurde die Leistung intensiver Operationen mit erweiterten Attributen um bis zu 17% gesteigert. Darüber hinaus wurde bei Trunkierungsoperationen, die keine Extents betreffen, die vollständige Synchronisation deaktiviert, was die Ausführungszeit dieser Operation um 12% verkürzt hat. Im sysfs wurde eine Einstellung hinzugefügt, um die I/O-Durchsatzrate bei der Dateisystemüberprüfung zu begrenzen. Es wurden ioctl-Aufrufe zum Abbrechen von Resize- und Geräteentfernungsvorgängen hinzugefügt;
    • in XFS überarbeitet die Implementierung des Puffer-Caches, der nun auf die Seitenallokierung im Batchmodus umgestellt wurde. Die Effizienz des Caches wurde erhöht;
    • In F2FS wurde eine Option für den Betrieb im Nur-Lese-Modus hinzugefügt und ein Cache-Modus für komprimierte Blöcke (compress_cache) implementiert, um die Leistung bei zufälligen Lesevorgängen zu verbessern. Die Unterstützung für die Komprimierung von Dateien, die durch mmap() in den Speicher abgebildet wurden, wurde realisiert. Für die selektive Deaktivierung der Dateikomprimierung per Maske wurde eine neue Einhängeoption nocompress vorgeschlagen;
    • Im exFAT-Treiber wurde an der Verbesserung der Kompatibilität mit Speichern einiger Digitalkameras gearbeitet;
    • Ein Systemaufruf wurde hinzugefügt quotactl_fd(), der es ermöglicht, Quoten nicht über eine spezielle Gerätedatei zu verwalten, sondern über die Angabe eines Dateideskriptors, der mit dem Dateisystem verknüpft ist, für das die Quote gilt;
    • Im Kernel wurden alte Treiber für Blockgeräte mit IDE-Schnittstelle entfernt, deren Platz bereits lange durch das libata-Subsystem eingenommen wurde. Die Unterstützung für alte Geräte bleibt in vollem Umfang erhalten, die Änderungen betreffen ausschließlich die Möglichkeit, alte Treiber zu verwenden, mit denen Speichermedien als /dev/hd* und nicht als /dev/sd* benannt wurden;
    • Im Kernel wurde der 'raw'-Treiber entfernt, der unpufferten Zugriff auf Blockgeräte über die Schnittstelle /dev/raw bereitstellt. Diese Funktionalität wird seit langem in Anwendungen über das Flag O_DIRECT realisiert;
  • Speicher und Systemdienste:
    • Im Scheduler wurde ein neuer Planungsmodus implementiert SCHED_CORE, der es ermöglicht, zu steuern, welche Prozesse gemeinsam auf einem CPU-Kern ausgeführt werden können. Jeder Prozess kann mit einer Cookie-ID versehen werden, die den Vertrauensbereich zwischen Prozessen definiert (z.B. Zugehörigkeit zu einem Benutzer oder Container). Bei der Organisation der Codeausführung kann der Scheduler die gemeinsame Nutzung eines CPU-Kerns nur für Prozesse sicherstellen, die mit einem einzigen Besitzer verbunden sind, was zur Blockade bestimmter Angriffe der Spectre-Klasse verwendet werden kann, indem die Ausführung in einem SMT-Thread (Hyper-Threading) zwischen vertrauenswürdigen und nicht vertrauenswürdigen Aufgaben verhindert wird;
    • Für den cgroup-Mechanismus wurde die Unterstützung für die Kill-Operation implementiert, die es ermöglicht, alle mit der Gruppe verknüpften Prozesse auf einmal zu beenden (SIGKILL zu senden), indem '1' in die virtuelle Datei cgroup.kill geschrieben wird;
    • Die Möglichkeiten zur Reaktion auf die Erkennung von Split-Lock-Problemen wurden erweitert, die auftreten, wenn auf nicht ausgerichtete Daten im Speicher zugegriffen wird, da bei der Ausführung einer atomaren Anweisung die Daten zwei CPU-Cachelinien überschneiden. Solche Locks führen zu einem signifikanten Rückgang der Leistung, weshalb zuvor die Möglichkeit zur erzwungenen Beendigung der die Blockierung verursachenden Anwendung gegeben war. In der neuen Version wurde ein Kernel-Befehlszeilenparameter „split_lock_detect=ratelimit:N“ hinzugefügt, mit dem die systemweite Obergrenze für die Häufigkeit von Lock-Operationen pro Sekunde festgelegt werden kann. Wird dieser Wert überschritten, wird jeder Prozess, der eine Split-Lock-Blockierung verursacht hat, anstelle einer Beendigung für 20 ms zwangsweise gestoppt.
    • Im CFS-Bandbreitenkontroller, der festlegt, wie viel CPU-Zeit jeder cgroup zugewiesen werden kann, wurde die Möglichkeit zur Festlegung von zeitlich begrenzten Limits implementiert, die eine bessere Regulierung von latenzsensitiven Lasten ermöglicht. Beispielsweise erlaubt die Einstellung von cpu.cfs_quota_us auf 50000 und cpu.cfs_period_us auf 100000 einer Prozessgruppe, alle 100 ms 50 ms CPU-Zeit zu verbrauchen.
    • hinzugefügt Die grundlegende Infrastruktur zur Erstellung von BPF-Programmladern wurde eingeführt, die in Zukunft das Laden von nur mit einem vertrauenswürdigen digitalen Schlüssel signierten BPF-Programmen ermöglichen wird.
    • Es wurde eine neue Futex-Operation FUTEX_LOCK_PI2 hinzugefügt, die einen monotonic Timer zur Berechnung des Timeouts verwendet, wobei die Zeit berücksichtigt wird, die das System im Ruhezustand verbringt.
    • Für die RISC-V-Architektur wurde die Unterstützung für große Speicherseiten (Transparent Huge-Pages) und die Möglichkeit zur Anwendung des Mechanismus KFENCE zur Identifizierung von Fehlern im Umgang mit Speicher implementiert.
    • Im Systemaufruf madvise(), der Mittel zur Optimierung der Speicherverwaltung eines Prozesses bereitstellt, Methoden text(), arrayBuffer() und stream() hinzugefügt, um bestimmte Datentypen zu lesen; wurden die Flags MADV_POPULATE_READ und MADV_POPULATE_WRITE hinzugefügt, um „page faults“ für alle im Speicher abgebildeten Seiten, die für Lese- oder Schreiboperationen vorgesehen sind, zu generieren, ohne dass tatsächlich gelesen oder geschrieben wird (prefault). Die Verwendung dieser Flags kann hilfreich sein, um Verzögerungen im Programmablauf zu reduzieren, da der „page fault“-Handler vorab für alle nicht zugewiesenen Seiten ausgeführt wird, ohne auf tatsächliche Zugriffe zu warten.
    • im System des Unit-Tests kunit hinzugefügt Unterstützung für das Starten von Tests in der QEMU-Umgebung;
    • neue Tracer hinzugefügt: „osnoise“ zur Verfolgung von Verzögerungen in Anwendungen, die durch Interrupt-Verarbeitung verursacht werden, und „timerlat“ zur Ausgabe detaillierter Informationen über Verzögerungen beim Wecken durch einen Timer-Signal;
  • Virtualisierung und Sicherheit:
    • wurde hinzugefügt Systemaufruf memfd_secret(), was die Erstellung eines privaten Speicherbereichs im isolierten Adressraum ermöglicht, der nur für den Eigentümerprozess sichtbar ist, nicht in andere Prozesse reflektiert wird und direkt nicht vom Kernel zugänglich ist;
    • Im seccomp-Systemaufruf-Filter wurde die Möglichkeit bereitgestellt, Blockierungs-Handler in den Benutzermodus auszulagern, wobei eine atomare Operation verwendet wird, um einen Dateideskriptor für die zu isolierende Aufgabe zu erstellen und ihn bei der Verarbeitung des Systemaufrufs zurückzugeben. Die vorgeschlagene Operation löst das Problem mit der Unterbrechung des Handlers im Benutzermodus bei Empfang eines Signals;
    • wurde hinzugefügt ein neuer Mechanismus zur Steuerung der Ressourcenbeschränkung im Benutzernamenraum, der separate rlimit-Zähler an Nutzer im „user namespace“ bindet. Die Änderung löst das Problem der Anwendung gemeinsamer Ressourcen-Zähler beim Start von Prozessen durch einen Benutzer in verschiedenen Containern;
    • Im KVM-Hypervisor für ARM64-Systeme wurde die Möglichkeit hinzugefügt, MTE (MemTag, Memory Tagging Extension) in Gastsystemen zu verwenden, was es ermöglicht, Tags an jede Speicherzuweisung zu binden und die Korrektheit der Pointer-Nutzung zu überprüfen, um Exploits durch den Zugriff auf bereits freigegebene Speicherblöcke, Pufferüberläufe, Zugriffe vor der Initialisierung und Nutzung außerhalb des aktuellen Kontexts zu verhindern;
    • Die von der ARM64-Plattform bereitgestellten Mittel zur Pointer-Authentifizierung können nun getrennt für den Kernel und den Benutzermodus konfiguriert werden. Die Technologie ermöglicht die Verwendung spezialisierter ARM64-Anweisungen zur Überprüfung von Rückgabeadressen mittels digitaler Signaturen, die in den ungenutzten oberen Bits des eigentlichen Pointers gespeichert sind;
    • im User-mode Linux hinzugefügt Unterstützung für die Verwendung von Treibern für PCI-Geräte mit einem virtuellen PCI-Bus, der durch den PCI-over-virtio-Treiber implementiert wird;
    • Für x86-Systeme wurde die Unterstützung für das para-virtualisierte Gerät virtio-iommu hinzugefügt, das es ermöglicht, IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den virtio-Transport ohne Emulation von Speichertabellen zu senden;
    • Für Intel-CPUs, beginnend mit der Skylake-Familie bis hin zur Coffee Lake, ist die Verwendung der Intel TSX (Transactional Synchronization Extensions) standardmäßig deaktiviert. Diese Erweiterungen bieten Mittel zur Leistungssteigerung von Mehrprozessoranwendungen durch dynamisches Auslassen überflüssiger Synchronisationsoperationen. Die Erweiterungen sind aufgrund der Möglichkeit von Angriffen deaktiviert, Zombieload, die die Informationsleckage über Seitenkanäle manipulieren, die beim Betrieb des Mechanismus der asynchronen Unterbrechung von Operationen (TAA, TSX Asynchronous Abort) entsteht;
  • Netzwerksubsystem:
    • Die Integration in den MPTCP (MultiPath TCP)-Kernel, die Erweiterung des TCP-Protokolls zur Organisation von TCP-Verbindungen mit der gleichzeitigen Lieferung von Paketen über mehrere Pfade hinweg verschiedene Netzwerk-Interfaces mit unterschiedlichen IP-Adressen, wurde fortgesetzt. In der neuen Version wurde hinzugefügt gibt es einen Mechanismus zur Festlegung eigener Richtlinien für die Multipath-Hashing von Verkehr für IPv4 und IPv6 (multipath hash policy), der es ermöglicht, aus dem Benutzerspeicher zu bestimmen, welche Felder in den Paketen, einschließlich der enkapsulierten, bei der Berechnung des Hashs verwendet werden, der den Pfad für das Paket bestimmt;
    • Der virtuelle Transport virtio hat die Unterstützung für Sockets SOCK_SEQPACKET (geordneten und zuverlässigen Datagramm-Transport) hinzugefügt;
    • Die Möglichkeiten des Socket-Mechanismus SO_REUSEPORT wurden erweitert, der es mehreren akzeptierenden Sockets ermöglicht, sich mit demselben Port zu verbinden, um Verbindungen mit einer gleichzeitigen Verteilung der eingehenden Anfragen auf alle über SO_REUSEPORT verbundenen Sockets anzunehmen, was die Erstellung von Mehrdienstanwendungen erleichtert. In der neuen Version Methoden text(), arrayBuffer() und stream() hinzugefügt, um bestimmte Datentypen zu lesen; gibt es Mittel zur Übertragung 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);
  • Hardware:
    • im amdgpu-Treiber wurde Unterstützung für neue Serien von GPUs AMD Radeon RX 6000, die unter den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ entwickelt wurden, sowie eine verbesserte Unterstützung für die GPU Aldebaran (gfx90a) und die APU Van Gogh. Es wurde die Möglichkeit hinzugefügt, mehrere eDP-Panels gleichzeitig zu verwenden. Für die APU Renoir wurde die Unterstützung für den Betrieb mit verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) implementiert. Die Unterstützung für das Hot-Plugging von Grafikkarten wurde hinzugefügt. Für die GPU Radeon RX 6000 (Navi 2x) und ältere AMD GPUs ist standardmäßig die Unterstützung des Energiesparmechanismus ASPM (Active State Power Management) aktiviert, der zuvor nur für die GPUs Navi 1x, Vega und Polaris aktiviert war;
    • Für AMD-Chips wurde die Unterstützung für Shared Virtual Memory (SVM, Shared Virtual Memory) auf der Basis des HMM-Subsystems (Heterogeneous Memory Management) hinzugefügt, das es ermöglicht, Geräte mit eigenen Speichermanagementeinheiten (MMU, Memory Management Unit) zu verwenden, die auf den Hauptspeicher zugreifen können. Dazu kann HMM ein gemeinsames Adressraum zwischen GPU und CPU organisieren, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann;
    • Es wurde eine erste Unterstützung für die Technologie hinzugefügt AMD Smart Shift, die dynamisch die Energieverbrauchseinstellungen von CPU und GPU in Laptops mit AMD-Chipsatz und -Grafikkarte ändert, um die Leistung beim Spielen, beim Videobearbeiten und beim 3D-Rendering zu forcieren;
    • Im i915-Treiber für Intel-Grafikkarten eingeschlossen wurde die Unterstützung für Intel Alderlake P-Chips hinzugefügt;
    • Ein Treiber für drm/hyperv für den virtuellen Grafikadapter Hyper-V wurde hinzugefügt;
    • wurde hinzugefügt Der Grafiktreiber simpledrm, der für die Ausgabe den EFI-GOP- oder VESA-Framebuffer verwendet, der von der UEFI-Firmware oder dem BIOS bereitgestellt wird. Der Hauptzweck des Treibers besteht darin, eine grafische Ausgabe in den frühen Phasen des Bootvorgangs zu ermöglichen, bevor ein vollständiger DRM-Treiber verwendet werden kann. Der Treiber kann auch als vorübergehende Lösung für Hardware verwendet werden, für die derzeit keine nativen DRM-Treiber verfügbar sind;
    • hinzugefügt Unterstützung für den All-in-One-Computer Raspberry Pi 400;
    • Es wurde ein Treiber dell-wmi-privacy hinzugefügt, um die in Dell-Laptops gelieferten Hardware-Schalter für Kamera und Mikrofon zu unterstützen;
    • Für Lenovo-Laptops wurde hinzugefügt WMI-Schnittstelle zur Änderung der BIOS-Einstellungen über sysfs /sys/class/firmware-attributes/;
    • Die Unterstützung für Geräte mit USB4-Schnittstelle wurde erweitert; Unterstützung für Geräte mit USB4-Schnittstelle hinzugefügt.
    • 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 Verringerung der Verzögerungen beim Start der Audioausgabe auf Geräten mit USB-Schnittstelle.

Quelle – opennet.ru.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4