Release des Linux-Kernels 5.14

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.14. Zu den bemerkenswertesten Änderungen gehören die neuen Systemaufrufe quotactl_fd() und memfd_secret(), das Entfernen der Treiber ide und raw, ein neuer I/O-Prioritätencontroller für cgroups und der SCHED_CORE-Task-Scheduling-Modus sowie die Infrastruktur zur Erstellung von Bootloadern für verifizierte BPF-Programme.

In die neue Version wurden 15.883 Änderungen von 2.002 Entwicklern aufgenommen, die Patch-Größe beträgt 69 MB (geändert wurden 12.580 Dateien, 861.501 Zeilen Code wurden hinzugefügt und 321.654 Zeilen entfernt). Etwa 47 % aller in 5.14 enthaltenen Änderungen beziehen sich auf Gerätetreiber, etwa 14 % betreffen Aktualisierungen spezifischer Hardwarearchitekturcodes, 13 % betreffen den Netzwerkstack, 3 % die Dateisysteme und 3 % die internen Subsysteme des Kernels.

Hauptneuheiten:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Für cgroups wurde ein neuer I/O-Prioritätscontroller — rq-qos — implementiert, der die Priorität der Verarbeitung von Blockgeräteanforderungen steuern kann, die von Mitgliedern jeder cgroup generiert werden. Die Unterstützung für den neuen Prioritätscontroller wurde dem I/O-Scheduler mq-deadline hinzugefügt.
    • Im ext4-Dateisystem wurde ein neuer ioctl-Befehl EXT4_IOC_CHECKPOINT eingeführt, der alle ausstehenden Transaktionen aus dem Protokoll sowie die damit verbundenen Puffer zwangsweise auf die Festplatte schreibt und den vom Protokoll verwendeten Bereich im Speicher neu überschreibt. Diese Änderung erfolgt im Rahmen einer Initiative zur Verhinderung von Informationslecks aus Dateisystemen.
    • Im Btrfs wurden Leistungsoptimierungen vorgenommen: Durch die Eliminierung unnötiger Protokollierung von erweiterten Attributen während der Ausführung von fsync konnte die Leistung intensiver Vorgänge mit erweiterten Attributen um bis zu 17 % gesteigert werden. Zudem wurde die vollständige Synchronisation bei Ausschneideoperationen, die keine Extents betreffen, deaktiviert, was die Ausführungszeit dieser Operationen um 12 % reduzierte. Im sysfs wurde eine Einstellung hinzugefügt, um die Ein-/Ausgabe-Bandbreite bei der Überprüfung des Dateisystems zu begrenzen. Zudem wurden ioctl-Aufrufe hinzugefügt, um Größenänderungsoperationen und das Löschen von Geräten abzubrechen.
    • Im XFS wurde die Implementierung des Puffercaches überarbeitet, der nun auf die Seitenzuweisung im Batch-Modus umgestellt wurde. Dadurch wurde die Effizienz des Caches erhöht.
    • In F2FS wurde eine Option für den Schreibschutzmodus hinzugefügt, und ein Caching-Modus für komprimierte Blöcke (compress_cache) wurde implementiert, um die Leistung bei zufälligem Lesen zu verbessern. Die Unterstützung für die Komprimierung von Dateien, die durch die mmap()-Operation in den Speicher gespiegelt werden, wurde implementiert. Um die Komprimierung von Dateien selektiv auszuschalten, wurde eine neue Mount-Option nocompress vorgeschlagen.
    • Im exFAT-Treiber wurde die Kompatibilität mit Speichermedien bestimmter Digitalkameras verbessert.
    • Ein Systemaufruf quotactl_fd() wurde hinzugefügt, der es ermöglicht, Quotas nicht über eine Spezialgerädatei, sondern über die Angabe eines Dateideskriptors zu verwalten, der mit dem Dateisystem verknüpft ist, für das die Quote angewendet wird.
    • Alte Treiber für Blockgeräte mit IDE-Schnittstelle wurden aus dem Kernel entfernt, nachdem sie schon lange durch das libata-Subsystem ersetzt wurden.
    • Der 'raw'-Treiber, der unbufferierten Zugriff auf Blockgeräte über die Schnittstelle /dev/raw ermöglicht, wurde aus dem Kernel entfernt. Diese Funktionalität wird seit langem in Anwendungen über das O_DIRECT-Flag realisiert.
  • Speicher und Systemdienste
    • Im Task-Manager wurde ein neuer Planungsmodus SCHED_CORE implementiert, der es ermöglicht, zu steuern, welche Prozesse auf einem CPU-Kern gemeinsam ausgeführt werden können. Jedem Prozess kann ein Cookie-Identifier zugewiesen werden, der den Vertrauensbereich zwischen Prozessen definiert (z. B. die Zugehörigkeit zu einem bestimmten Benutzer oder Container). Wenn der Code ausgeführt wird, kann der Planer die gemeinsame Nutzung eines CPU-Kerns nur für Prozesse sicherstellen, die mit demselben Eigentümer verbunden sind. Dies kann genutzt werden, um bestimmte Spectre-Angriffe zu blockieren, indem die gleichzeitige Ausführung von vertrauenswürdigen und nicht vertrauenswürdigen Aufgaben in einem SMT-Thread (Hyper-Threading) verhindert wird.
    • Für cgroup wurde die Unterstützung der Kill-Operation implementiert, die es ermöglicht, alle an die Gruppe gebundenen Prozesse gleichzeitig zu beenden (SIGKILL zu senden), indem eine „1“ in die virtuelle Datei cgroup.kill geschrieben wird.
    • Die Möglichkeiten zur Reaktion auf erkannte Split-Lock-Probleme wurden erweitert, die bei Zugriffen auf nicht ausgerichtete Daten im Speicher auftreten, wenn aufgrund der Ausführung einer atomaren Anweisung Daten zwei Cache-Linien der CPU überschreiten. Solche Sperren führen zu erheblichen Leistungseinbußen, weshalb zuvor die Möglichkeit bestand, die Anwendung, die die Sperre verursacht hat, zwangsweise zu beenden. In der neuen Version wurde eine Kernel-Parameteroption „split_lock_detect=ratelimit:N“ hinzugefügt, mit der der gesamte systeweite Limit für die Intensität von Sperroperationen pro Sekunde festgelegt werden kann. Nach Überschreiten dieses Limits wird jeder Prozess, der eine Split-Lock-Sperre verursacht hat, statt beendet, für 20 ms gezwungen angehalten.
    • Im Cgroup-Bandbreitenkontroller CFS (CFS bandwidth controller), der festlegt, wie viel CPU-Zeit jeder Cgroup zugewiesen werden kann, wurde die Möglichkeit integriert, befristete Limits festzulegen. Dies ermöglicht eine bessere Steuerung von Latency-empfindlichen Lasten. Wenn beispielsweise der Wert von cpu.cfs_quota_us auf 50000 und cpu.cfs_period_us auf 100000 gesetzt wird, kann die Prozessgruppe alle 100 ms 50 ms CPU-Zeit aufwenden.
    • Die grundlegende Infrastruktur zur Erstellung von BPF-Programmladern wurde hinzugefügt, wodurch künftig nur BPF-Programme, die mit einem vertrauenswürdigen digitalen Schlüssel signiert sind, geladen werden können.
    • Eine neue Futex-Operation FUTEX_LOCK_PI2 wurde hinzugefügt, die einen monotonen Timer verwendet, um einen Timeout zu berechnen, der die Zeit berücksichtigt, die das System im Schlafmodus verbringt.
    • Unterstützung für große Speicher Seiten (Transparent Huge Pages) wurde für die Architektur RISC-V implementiert, sowie die Anwendung des KFENCE-Mechanismus zur Erkennung von Speicherfehlern.
    • Im Systemaufruf madvise(), der Optionen zur Optimierung der Speicherverwaltung eines Prozesses bereitstellt, wurden die Flags MADV_POPULATE_READ und MADV_POPULATE_WRITE hinzugefügt. Diese erzeugen 'page faults' für alle im Speicher nachgelagerten Seiten, die für Lese- oder Schreiboperationen vorgesehen sind, ohne dass tatsächlich gelesen oder geschrieben werden muss (prefault). Der Einsatz dieser Flags kann dazu beitragen, Verzögerungen während der Programmausführung zu reduzieren, indem der Handler für 'page faults' im Voraus für alle nicht zugewiesenen Seiten ausgeführt wird, bevor tatsächlich auf diese zugegriffen wird.
    • Im Einheitstest-Framework kunit wurde die Unterstützung für das Ausführen von Tests in der QEMU-Umgebung hinzugefügt.
    • Neue Tracer wurden hinzugefügt: 'osnoise', um Verzögerungen in Anwendungen zu verfolgen, die durch Interruptverarbeitung verursacht werden, und 'timerlat', um detaillierte Informationen über Verzögerungen bei der Aktivierung durch einen Timer-Signal auszugeben.
  • Virtualisierung und Sicherheit
    • Der Systemaufruf memfd_secret() wurde hinzugefügt, der es ermöglicht, einen privaten Speicherbereich im isolierten Adressraum zu erstellen, der nur für den Besitzerprozess sichtbar ist, nicht in andere Prozesse abgebildet wird und direkt nicht für den Kernel zugänglich ist.
    • Im seccomp-Systemaufruf-Filter wurde die Möglichkeit eingeführt, in den Userspace blockierende Handler mit einer atomaren Operation zu erstellen, um einen Dateideskriptor für einen isolierten Task zu generieren und diesen während der Bearbeitung des Systemaufrufs zurückzugeben. Der vorgeschlagene Vorgang löst das Problem der Unterbrechung des Handlers im Userspace bei Eintreffen eines Signals.
    • Ein neuer Mechanismus zur Verwaltung von Ressourcenbeschränkungen im Benutzer-ID-Namensraum wurde hinzugefügt, der einzelne rlimit-Zähler an Benutzer im 'user namespace' bindet. Diese Änderung löst das Problem der Verwendung gemeinsamer Ressourcen-Zähler bei der Ausführung von Prozessen durch einen Benutzer in verschiedenen Containern.
    • Im Hypervisor KVM Für ARM64-Systeme wurde die Möglichkeit hinzugefügt, in Gastbetriebssystemen die Erweiterung MTE (MemTag, Memory Tagging Extension) zu verwenden. Diese ermöglicht es, Tags mit jeder Speicherzuweisungsoperation zu verknüpfen und die Korrektheit der Zeigerverwendung zu überprüfen, um die Ausnutzung von Schwachstellen 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 können jetzt separat für den Kernel und den Benutzerraum konfiguriert werden. Diese Technologie ermöglicht die Verwendung spezieller ARM64-Anweisungen zur Überprüfung von Rückgabeadressen mithilfe digitaler Signaturen, die in den ungenutzten oberen Bits des Zeigers gespeichert sind.
    • In User-mode Linux wurde die 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, hinzugefügt.
    • Für x86-Systeme wurde die Unterstützung für das paravirtualisierte Gerät virtio-iommu hinzugefügt, das es ermöglicht, IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über das virtio-Transportprotokoll ohne Emulation von Seitentabellen zu senden.
    • Für Intel-CPUs, beginnend mit der Skylake-Familie bis hin zu Coffee Lake, sind standardmäßig die Intel TSX-Erweiterungen (Transactional Synchronization Extensions) deaktiviert. Diese Erweiterungen bieten Mittel zur Leistungssteigerung von Mehrprozessanwendungen durch dynamisches Ausblenden überflüssiger Synchronisationsoperationen. Die Deaktivierung erfolgt aufgrund der Möglichkeit von Zombieload-Angriffen, die auf das Auslösen von Informationslecks über Seitenkanäle abzielen, welche im Rahmen der asynchronen Unterbrechung von Operationen (TAA, TSX Asynchronous Abort) auftreten.
  • Netzwerksubsystem
    • Die Integration in den MPTCP (MultiPath TCP)-Kernel für die Erweiterung des TCP-Protokolls geht weiter, um die gleichzeitige Paketübertragung über mehrere Routen durch verschiedene Netzwerkschnittstellen zu ermöglichen. IP-Adressen. In der neuen Version wurde ein Mechanismus zur Festlegung eigener Hash-Richtlinien für den Verkehr mit IPv4 und IPv6 (multipath hash policy) hinzugefügt. Damit können Benutzer festlegen, welche Felder in den Paketen, einschließlich der gekapselten, bei der Berechnung des Hashes verwendet werden, der den Pfad für das Paket bestimmt.
    • Im virtuellen Transport virtio wurde die Unterstützung für SOCK_SEQPACKET-Sockets hinzugefügt (geordnetes und zuverlässiges Datagramm-Streaming).
    • Die Funktionalität des SO_REUSEPORT-Socket-Mechanismus wurde erweitert, die es mehreren Listener-Sockets ermöglicht, sich mit einem einzigen Port zu verbinden, um eingehende Verbindungen zu akzeptieren und die eingehenden Anfragen gleichzeitig auf alle über SO_REUSEPORT verbundenen Sockets zu verteilen. Dies erleichtert die Erstellung von Multithread-Serveranwendungen. In der neuen Version wurden auch Mittel zur Übertragung der Kontrolle an einen anderen Socket im Falle eines Fehlers beim Handling der Anfrage durch den ursprünglich ausgewählten Socket hinzugefügt (löst das Problem des Verlusts einzelner Verbindungen beim Neustart von Diensten).
  • Ausrüstung
    • Im amdgpu-Treiber wurde die Unterstützung für die neuen GPU-Serien AMD Radeon RX 6000, die unter den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ entwickelt werden, implementiert. Zudem wurde die Unterstützung für die GPU Aldebaran (gfx90a) und die 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 die Verarbeitung von verschlüsselten Puffern im Videospeicher (TMZ, Trusted Memory Zone) implementiert. Die Unterstützung für das Hot-Unplug 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 verfügbar war.
    • Für AMD-Chips wurde die Unterstützung für Shared Virtual Memory (SVM, gemeinsame virtuelle Speicherverwaltung) auf Basis des HMM-Subsystems (Heterogeneous Memory Management) hinzugefügt, das die Verwendung von Geräten mit eigenen Speicherverwaltungseinheiten (MMU, memory management unit) ermöglicht, die auf den Hauptspeicher zugreifen können. Mithilfe von HMM kann zudem ein gemeinsamer Adressraum zwischen GPU und CPU eingerichtet werden, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann.
    • Die anfängliche Unterstützung der AMD Smart Shift-Technologie wurde hinzugefügt, die die Energieverbrauchseinstellungen von CPU und GPU in Notebooks mit AMD-Chipsatz und -Grafikkarte dynamisch anpasst, um die Leistung beim Spielen, Videobearbeiten und 3D-Rendering zu maximieren.
    • Der i915-Treiber für Intel-Grafikkarten unterstützt jetzt Intel Alder Lake P-Chips.
    • Der drm/hyperv-Treiber wurde für den virtuellen Grafikadapter Hyper-V hinzugefügt.
    • Die Unterstützung für den All-in-One-PC Raspberry Pi 400 wurde hinzugefügt.
    • Ein dell-wmi-privacy-Treiber wurde hinzugefügt, um die in Dell-Notebooks integrierten Hardware-Schalter für Kamera und Mikrofon zu unterstützen.
    • Für Lenovo-Notebooks wurde eine WMI-Schnittstelle hinzugefügt, um BIOS-Einstellungen über sysfs /sys/class/firmware-attributes/ zu ändern.
    • Die Unterstützung für Geräte mit USB4-Schnittstelle wurde erweitert.
    • Die 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 wurde hinzugefügt. Die Audioqualität in HP- und ASUS-Notebooks wurde verbessert. Es wurden Patches hinzugefügt, um die Latenz vor dem Start der Audioausgabe auf Geräten mit USB-Schnittstelle zu reduzieren.

Quelle: opennet.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