Linux-Kernel 5.14

Linux-Kernel 5.14

Nach zwei Monaten der Entwicklung stellte Linus Torvalds den 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, ein neuer Eingabe/Ausgabe-Prioritätscontroller für cgroups, der SCHED_CORE-Aufgabenplanungsmodus sowie Infrastruktur zur Erstellung von Bootloadern für verifiziertes BPF-Programm.

In die neue Version wurden 15883 Korrekturen von 2002 Entwicklern aufgenommen, die Patchgröße beträgt 69 MB (die Änderungen betreffen 12580 Dateien, 861501 Zeilen Code wurden hinzugefügt und 321654 Zeilen entfernt). Etwa 47% aller in 5.14 enthaltenen Änderungen betreffen Gerätetreiber, ungefähr 14% der Änderungen sind auf Aktualisierungen von hardwarearchitekturspezifischem Code zurückzuführen, 13% betreffen den Netzwerk-Stack, 3% die Dateisysteme und 3% interne Kernel-Subsysteme.

Haupt Neuheiten:

  • Datenträgersubsystem, Ein-/Ausgabe und Dateisysteme:
    • für cgroup implementiert. neuer Eingabe/Ausgabe-Prioritätscontroller — rq-qos, der den Prioritätsgrad der Bearbeitung von Anfragen an Blockgeräte steuern kann, die von Mitgliedern jeder cgroup generiert werden. Unterstützung für den neuen Prioritätscontroller wurde im mq-deadline I/O-Scheduler hinzugefügt;
    • im ext4-Dateisystem wurde Ein neuer ioctl-Befehl EXT4_IOC_CHECKPOINT, der alle ausstehenden Transaktionen aus dem Journal sowie die damit verbundenen Puffer auf die Festplatte schreibt und den vom Journal verwendeten Bereich im Speicher überschreibt. Diese Änderung wurde im Rahmen einer Initiative zur Verhinderung von Datenlecks aus Dateisystemen vorbereitet.
    • in Btrfs wurden vorgenommen. Leistungsoptimierungen: Durch den Ausschluss überflüssiger Journaleinträge erweiterter Attribute während der Ausführung von fsync konnte die Leistung intensiver Operationen mit erweiterten Attributen um bis zu 17 % gesteigert werden. Außerdem wurde bei Ausführungen von Trimm-Operationen, die keine Extents betreffen, die vollständige Synchronisierung deaktiviert, was die Ausführungszeit um 12 % verkürzt hat. In sysfs wurde eine Einstellung hinzugefügt, um die E/A-Durchsatzrate während der Überprüfung des Dateisystems zu begrenzen. ioctl-Aufrufe zum Abbrechen von Größenänderungs- und Geräteentfernungsoperationen wurden hinzugefügt.
    • in XFS überarbeitet die Implementierung des Puffercaches, die jetzt auf die seitenweisen Zuweisungen im Batch-Modus umgestellt wurde. Die Effizienz des Caches wurde verbessert.
    • In F2FS wurde die Option für den Betrieb im Nur-Lese-Modus hinzugefügt, und der Modus zur Zwischenspeicherung von komprimierten Blöcken (compress_cache) wurde implementiert, um die Leistung beim zufälligen Lesen zu erhöhen. Zudem ist die Unterstützung für die Komprimierung von Dateien, die durch die mmap()-Operation in den Speicher abgebildet werden, umgesetzt worden. Eine neue Montageoption nocompress wurde vorgeschlagen, um die Komprimierung von Dateien nach Masken selektiv zu deaktivieren.
    • Im exFAT-Treiber wurde an der Verbesserung der Kompatibilität mit Speichermedien einiger Digitalkameras gearbeitet.
    • Ein Systemaufruf wurde hinzugefügt: quotactl_fd(), der es ermöglicht, Quoten nicht über eine spezielle Geräte-Datei, sondern über die Angabe eines Dateideskriptors, der mit dem Dateisystem verbunden ist, für das die Quote gilt, zu verwalten.
    • Im Kern wurden alte Treiber für Blockgeräte mit IDE-Schnittstelle entfernt, die mittlerweile von der libata-Subsystem ersetzt wurden. Die Unterstützung für alte Geräte bleibt in vollem Umfang erhalten; die Änderungen betreffen lediglich die Möglichkeit, alte Treiber zu verwenden, bei denen die Laufwerke als /dev/hd* und nicht als /dev/sd* bezeichnet wurden.
    • Der Treiber «raw», der einen unbuffered Zugriff auf Blockgeräte über die Schnittstelle /dev/raw ermöglicht, wurde aus dem Kernel entfernt. Diese Funktionalität wird seit langem in Anwendungen mittels des Flags O_DIRECT implementiert;
  • Speicher und Systemdienste:
    • Im Task-Scheduler wurde ein neuer Planungsmodus implementiert SCHED_CORE, der es ermöglicht zu steuern, welche Prozesse auf einem CPU-Kern gemeinsam ausgeführt werden können. Jeder Prozess kann mit einer Cookie-ID versehen werden, die den Vertrauensbereich zwischen den Prozessen definiert (zum Beispiel die Zugehörigkeit zu einem bestimmten Benutzer oder Container). Bei der Organisation der Codeausführung kann der Scheduler sicherstellen, dass ein CPU-Kern nur für Prozesse genutzt wird, die demselben Besitzer zugeordnet sind, was zur Abwehr bestimmter Angriffe der Spectre-Klasse verwendet werden kann, indem die Ausführung von vertrauenswürdigen und nicht vertrauenswürdigen Aufgaben in einem SMT-Thread (Hyper Threading) verhindert wird;
    • Für den cgroup-Mechanismus wurde die Unterstützung der Kill-Operation implementiert, die es ermöglicht, alle zugehörigen Prozesse der Gruppe gleichzeitig zu beenden (SIGKILL zu senden), indem man «1» in die virtuelle Datei cgroup.kill schreibt;
    • Die Möglichkeiten zur Reaktion auf das Erkennen von Split-Locks, die beim Zugriff auf nicht ausgerichtete Daten im Speicher auftreten, wurden erweitert. Dies geschieht, wenn bei der Ausführung einer atomaren Anweisung die Daten zwei Cache-Linien der CPU überschreiten. Solche Sperren führen zu einem erheblichen Leistungsabfall. Daher gab es zuvor die Möglichkeit, die Anwendung, die die Sperre verursacht hat, zwangsweise zu beenden. In der neuen Version wurde der Kernel-Befehlszeilenparameter „split_lock_detect=ratelimit:N“ hinzugefügt, der es ermöglicht, das allgemeine Systemlimit für die Intensität von Sperroperationen pro Sekunde festzulegen. Wenn dieses Limit überschritten wird, wird jeder Prozess, der eine Split-Lock verursacht hat, anstelle einer Beendigung für 20 ms zwangsweise gestoppt.
    • Im CFS-Bandbreitencontroller (CFS bandwidth controller), der festlegt, wie viel CPU-Zeit jeder cgroup zugewiesen werden kann, wurde die Möglichkeit zur Definition von zeitlich begrenzten Limits implementiert, um besser auf latenzempfindliche Lasten reagieren zu können. Beispielsweise ermöglicht die Einstellung von cpu.cfs_quota_us auf 50000 und cpu.cfs_period_us auf 100000, dass eine Prozessgruppe alle 100 ms 50 ms CPU-Zeit nutzen kann.
    • hinzugefügt Die initiale Infrastruktur zur Erstellung von BPF-Programmladern, die künftig die Möglichkeit bietet, nur BPF-Programme zu laden, die mit einem vertrauenswürdigen digitalen Schlüssel signiert sind.
    • Eine neue futex-Operation FUTEX_LOCK_PI2 wurde hinzugefügt, die einen monotonic Timer zur Berechnung des Timeouts verwendet, welcher die Zeit berücksichtigt, die das System im Schlafmodus verbracht hat.
    • 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 Erkennung von Speicherfehlern implementiert.
    • Im Systemaufruf madvise() wurden Mittel zur Optimierung des Speichermanagements des Prozesses bereitgestellt. wurden hinzugefügt Die Flags MADV_POPULATE_READ und MADV_POPULATE_WRITE ermöglichen die Generierung von "Page Faults" für alle im Arbeitsspeicher abgebildeten Seiten bei Lese- oder Schreibvorgängen, ohne dass tatsächlich gelesen oder geschrieben wird (Prefault). Die Verwendung dieser Flags kann hilfreich sein, um Latenzen während der Programmausführung zu verringern, indem der Page Fault-Handler im Voraus für alle nicht zugewiesenen Seiten aufgerufen wird, ohne auf einen tatsächlichen Zugriff zu warten.
    • im Unit-Testsystem kunit hinzugefügt Unterstützung zum Ausführen von Tests in der QEMU-Umgebung;
    • neue Tracer hinzugefügt: "osnoise" zur Überwachung von Verzögerungen in Anwendungen, die durch Interruptverarbeitung verursacht werden, und "timerlat" zur Bereitstellung detaillierter Informationen über Verzögerungen beim Aufwecken durch einen Timer-Signal;
  • Virtualisierung und Sicherheit:
    • ein Systemaufruf memfd_secret(), der es ermöglicht, einen privaten Speicherbereich im isolierten Adressraum zu erstellen, der nur für den Eigentümerprozess sichtbar ist, nicht in andere Prozesse abgebildet wird und direkt nicht vom Kernel zugänglich ist;
    • Im Sekcomp-Systemaufruf-Filter wurde die Möglichkeit geschaffen, eine atomare Operation zu verwenden, um einen Dateideskriptor für eine isolierte Aufgabe zu erstellen und ihn bei der Verarbeitung des Systemaufrufs zurückzugeben. Dieser Operation löst das Problem, ein Problem löst. indem der Handler im Benutzermodus bei Eintreffen eines Signals unterbrochen wird;
    • ein ein neuer Mechanismus zur Verwaltung von Ressourcenbeschränkungen im Benutzer-ID-Namensraum, der separate rlimit-Zähler an Benutzer im „user namespace“ bindet. Diese Änderung löst das Problem der Verwendung gemeinsamer Ressourcen-Zähler, wenn von einem Benutzer Prozesse in verschiedenen Containern gestartet werden;
    • Im KVM-Hypervisor für ARM64-Systeme wurde die Möglichkeit eingeführt, in Gastbetriebssystemen die MTE-Erweiterung (MemTag, Memory Tagging Extension) zu nutzen. Dies ermöglicht die Zuordnung von Tags zu jeder Speicherzuweisung und ermöglicht die Überprüfung der korrekten Verwendung von Zeigern, um die Ausnutzung von Sicherheitsanfälligkeiten zu verhindern, die durch den Zugriff auf bereits freigegebene Speicherblöcke, Pufferüberläufe, Zugriffe vor der Initialisierung und die Verwendung außerhalb des aktuellen Kontexts verursacht werden.
    • Die von der ARM64-Plattform bereitgestellten Mittel zur Zeiger-Authentifizierung (Pointer Authentication) können nun getrennt für den Kernel und den Benutzermodus konfiguriert werden. Diese Technologie ermöglicht die Verwendung spezieller ARM64-Anweisungen zur Überprüfung von Rücksprungadressen mithilfe von digitalen Signaturen, die in den ungenutzten oberen Bits des Zeigers gespeichert sind.
    • unter 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 des paravirtualisierten Geräts virtio-iommu hinzugefügt, das die Übermittlung von IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über das virtio-Transportprotokoll ohne Emulation von Speichertabellen ermöglicht.
    • Für Intel-CPUs, von der Skylake-Familie bis zu Coffee Lake, ist die Verwendung von Intel TSX (Transactional Synchronization Extensions) standardmäßig deaktiviert. Diese Erweiterungen bieten Mittel zur Leistungssteigerung von Mehrkernanwendungen durch dynamisches Ausblenden überflüssiger Synchronisationsvorgänge. Die Deaktivierung erfolgt aufgrund der Möglichkeit von Angriffen. Zombieload, die Informationen über Seitenkanäle manipulieren, die bei der Arbeit mit dem Mechanismus der asynchronen Unterbrechung von Operationen (TAA, TSX Asynchronous Abort) entstehen;
  • Netzwerksubsystem:
    • Die Integration in den MPTCP-Kernel (MultiPath TCP) wird fortgesetzt, eine Erweiterung des TCP-Protokolls zur gleichzeitigen Durchführung von TCP-Verbindungen über mehrere Routen hinweg durch verschiedene Netzwerk-Interfaces, die unterschiedlichen IP-Adressen zugeordnet sind. In der neuen Version. ein Ein Mechanismus zur Festlegung eigener Verkehrshashing-Richtlinien für IPv4 und IPv6 (Multipath-Hash-Policy), der es ermöglicht, aus dem Benutzerspace zu bestimmen, welche Felder in den Paketen, einschließlich der inkapsulierten, zur Berechnung des Hashs verwendet werden, der den Pfad für das Paket bestimmt.
    • Im virtuellen Transport virtio wurde die Unterstützung für Sockets hinzugefügt. SOCK_SEQPACKET (geordnetes und zuverlässiges Senden von Datagrammen);
    • Die Funktionalität des SO_REUSEPORT-Socket-Mechanismus wurde erweitert, die es mehreren hörenden Sockets ermöglicht, sich mit einem einzigen Port zu verbinden, um Verbindungen entgegenzunehmen und die eingehenden Anfragen gleichmäßig auf alle über SO_REUSEPORT verbundenen Sockets zu verteilen, was die Erstellung von Multithread-Serveranwendungen erleichtert. In der neuen Version wurden hinzugefügt sind Mittel zur Übergabe der Kontrolle an einen anderen Socket im Falle eines Fehlers bei der Bearbeitung einer Anfrage durch den ursprünglich ausgewählten Socket vorhanden (löst das Problem des Verlusts einzelner Verbindungen beim Neustart von Diensten);
  • Hardware:
    • Im amdgpu-Treiber wurde Unterstützung neuer AMD Radeon RX 6000 GPU-Serien mit den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ wurde implementiert, sowie die Unterstützung für die GPU Aldebaran (gfx90a) und APU Van Gogh verbessert. Es wurde die Möglichkeit hinzugefügt, mehrere eDP-Panels gleichzeitig zu betreiben. Für die APU Renoir wurde die Unterstützung für den Betrieb mit verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) realisiert. Die Unterstützung für das heiße Entfernen von Grafikkarten (hot-unplug) wurde hinzugefügt. Für die GPU Radeon RX 6000 (Navi 2x) und ältere AMD-GPUs ist der Energieverwaltungssystem ASPM (Active State Power Management), der zuvor nur für die GPUs Navi 1x, Vega und Polaris aktiviert war, jetzt standardmäßig aktiviert.
    • Für AMD-Chips wurde die Unterstützung für Shared Virtual Memory (SVM) auf Basis des Heterogeneous Memory Management (HMM) hinzugefügt, das die Verwendung von Geräten mit eigenen Speicherverwaltungseinheiten (MMU) ermöglicht, die auf den Hauptspeicher zugreifen können. Mit HMM kann auch ein gemeinsamer Adressraum zwischen GPU und CPU organisiert werden, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann.
    • Die erste Unterstützung für die Technologie wurde hinzugefügt. AMD Smart Shift, dynamisch die Energieverbrauchsparameter von CPU und GPU auf Laptops mit AMD-Chipsatz und Grafikkarte zu ändern, um die Leistung beim Spielen, Video-Editing und 3D-Rendering zu steigern;
    • im Treiber i915 für Intel-Grafikkarten wurde hinzugefügt Unterstützung für Intel Alder-Lake P-Chips;
    • Der drm/hyperv-Treiber für den virtuellen Grafikadapter Hyper-V wurde hinzugefügt;
    • ein Der Grafiktreiber simpledrm verwendet für die Ausgabe den EFI-GOP oder VESA-Framebuffer, bereitgestellt durch das UEFI-BIOS oder die BIOS-Firmware. Der Hauptzweck dieses Treibers besteht darin, eine grafische Ausgabe in den frühen Phasen des Bootvorgangs zu ermöglichen, bevor ein vollständiger DRM-Treiber verfügbar ist. 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 All-in-One-Computer Raspberry Pi 400;
    • Der dell-wmi-privacy-Treiber wurde hinzugefügt, um die Hardware-Schalter für Kamera und Mikrofon der in Dell-Laptops eingebauten Geräte zu unterstützen;
    • für Lenovo-Laptops ein WMI-Schnittstelle zur Änderung der BIOS-Parameter über sysfs /sys/class/firmware-attributes/;
    • erweitert Unterstützung für USB4-geräte;
    • hinzugefügt Unterstützung für Soundkarten und Codecs wie AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 und Texas Instruments TAS2505. Verbesserte Audio-Unterstützung für HP- und ASUS-Laptops. Es wurden hinzugefügt Patches zur Verringerung der Latenz vor dem Start der Audioausgabe auf Geräten mit USB-Schnittstelle.

Quelle – opennet.ru.

Quelle: linux.org.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster