Nach zwei Monaten Entwicklung stellte Linus Torvalds das Release des Linux-Kernels 5.14 vor. Zu den bemerkenswertesten Änderungen gehören die neuen Systemaufrufe quotactl_fd() und memfd_secret(), die Entfernung der Treiber ide und raw, ein neuer I/O-Prioritätencontroller für cgroup, der SCHED_CORE-Aufgabenplanungsmodus sowie die Infrastruktur zur Erstellung von Bootloadern für verifizierte BPF-Programme.
In die neue Version wurden 15883 Änderungen von 2002 Entwicklern integriert, die Patchgröße beträgt 69 MB (die Änderungen betreffen 12580 Dateien, 861501 Codezeilen wurden hinzugefügt, 321654 Zeilen entfernt). Etwa 47 % der in 5.14 vorgestellten Änderungen beziehen sich auf Gerätetreiber, ungefähr 14 % betreffen Aktualisierungen von architekturspezifischem Code, 13 % sind mit dem Netzwerk-Stack verbunden, 3 % mit Dateisystemen und 3 % mit internen Kernel-Subsystemen.
Hauptneuheiten:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Für cgroup wurde ein neuer I/O-Priorisierungscontroller – rq-qos – implementiert, der die Priorität der Verarbeitung von Anfragen an Blockgeräte, die von Teilnehmern jeder cgroup generiert werden, steuern kann. Die Unterstützung des neuen Prioritätscontrollers wurde in den I/O-Scheduler mq-deadline integriert.
- Im Dateisystem ext4 wurde ein neuer ioctl-Befehl EXT4_IOC_CHECKPOINT implementiert, der alle ausstehenden Transaktionen aus dem Journal und die damit verbundenen Puffer gezwungenermaßen auf die Festplatte schreibt sowie den vom Journal verwendeten Bereich im Speicher neu beschreibt. Diese Änderung wurde im Rahmen einer Initiative zur Verhinderung von Informationslecks aus Dateisystemen entwickelt.
- Im Btrfs wurden Leistungsoptimierungen vorgenommen: 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 % erhöht. Darüber hinaus wurde bei Trimm-Operationen, die keine Extents betreffen, die vollständige Synchronisation deaktiviert, was die Ausführungszeit der Operation um 12 % verkürzt hat. In sysfs wurde eine Einstellung hinzugefügt, um die I/O-Durchsatzbegrenzung während der Überprüfung des FS zu steuern. Es wurden ioctl-Aufrufe zum Rückgängigmachen von Größenänderungs- und Gerätelöschoperationen hinzugefügt.
- Im XFS wurde die Implementierung des Puffer-Caches überarbeitet, die jetzt auf die Seitenallokierung im Batch-Modus umgestellt ist. Die Effizienz der Cache-Nutzung wurde erhöht.
- In F2FS wurde eine Option für den Nur-Lese-Betrieb hinzugefügt und ein Cache-Modus für komprimierte Blöcke (compress_cache) implementiert, um die Leistung beim zufälligen Lesen zu verbessern. Die Unterstützung für das Komprimieren von Dateien, die über die mmap()-Operation in den Speicher gespiegelt werden, wurde realisiert. Eine neue Montierungsoption nocompress wurde vorgeschlagen, um eine selektive Deaktivierung der Dateikomprimierung anhand von Masken zu ermöglichen.
- Im exFAT-Treiber wurde die Kompatibilität mit den Speichern einiger Digitalkameras verbessert.
- Ein Systemaufruf quotactl_fd() wurde hinzugefügt, der es ermöglicht, Quotas nicht über eine spezielle Gerädatei, sondern über die Angabe eines Datei-Deskriptors zu verwalten, der mit dem Dateisystem verknüpft ist, für das die Quote gilt.
- Alte Treiber für Blockgeräte mit IDE-Schnittstelle wurden aus dem Kernel entfernt, da diese bereits seit langem durch das libata-Subsystem ersetzt wurden.
- Der «raw»-Treiber, der unpufferierten Zugriff auf Blockgeräte über die Schnittstelle /dev/raw bereitstellt, wurde aus dem Kernel entfernt. Diese Funktionalität wurde bereits lange in Anwendungen mittels des Flags O_DIRECT implementiert.
- Speicher und Systemdienste
- Im Task-Scheduler wurde ein neuer Planungsmodus SCHED_CORE implementiert, der es ermöglicht, zu steuern, welche Prozesse auf einem einzelnen CPU-Kern gemeinsam 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 Ausführung von Code kann der Scheduler die gemeinsame Nutzung eines CPU-Kerns nur für Prozesse gewährleisten, die mit einem Eigentümer verbunden sind, was eingesetzt werden kann, um bestimmte Angriffe der Spectre-Klasse zu blockieren, indem das gleichzeitige Ausführen von vertrauenswürdigen und nicht vertrauenswürdigen Aufgaben in einem SMT-Thread (Hyper-Threading) verhindert wird.
- Für cgroup wurde die Unterstützung für die kill-Operation implementiert, die es ermöglicht, alle Prozesse, die der Gruppe zugeordnet sind, 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 gespaltenen Sperren („split lock“), die beim Zugriff auf unalignierte Daten im Speicher auftreten, wurden erweitert, da bei der Ausführung atomarer Anweisungen die Daten zwei CPU-Caches überschreiten. Solche Sperren führen zu erheblichen Leistungseinbußen, weshalb zuvor die Möglichkeit bestand, die Anwendung, die die Sperre verursachte, gezwungenermaßen zu beenden. In der neuen Version wurde der Kernel-Befehlszeilenparameter „split_lock_detect=ratelimit:N“ hinzugefügt, der es ermöglicht, eine gesamt-systemweite Begrenzung der Intensität von Sperroperationen pro Sekunde festzulegen, nach deren Überschreitung jeder Prozess, der eine gespaltene Sperre verursacht, anstelle einer Beendigung für 20 ms gezwungen gestoppt wird.
- Im CFS-Bandbreitenkontrolleur (CFS bandwidth controller), der bestimmt, wie viel CPU-Zeit jeder cgroup zugewiesen werden kann, wurde die Möglichkeit zur Festlegung von zeitlich begrenzten Limits implementiert, was eine bessere Regulierung latenzempfindlicher Lasten ermöglicht. Zum Beispiel ermöglicht 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.
- Ein grundlegendes Infrastruktur-Setup zum Erstellen von BPF-Programm-Loadern wurde hinzugefügt, wodurch künftig nur BPF-Programme geladen werden können, die mit einem vertrauenswürdigen digitalen Schlüssel signiert sind.
- Eine neue futex-Operation FUTEX_LOCK_PI2 wurde hinzugefügt, die einen monotonen Timer zur Berechnung des Zeitlimits verwendet, das die im Schlafmodus verbrachte Zeit berücksichtigt.
- Für die RISC-V-Architektur wurde die Unterstützung für große Speicherseiten (Transparent Huge-Pages) und die Möglichkeit zur Nutzung des KFENCE-Mechanismus zur Erkennung von Speicherfehlern implementiert.
- Im Systemaufruf madvise() wurden die Flags MADV_POPULATE_READ und MADV_POPULATE_WRITE hinzugefügt, um "Page Faults" für alle Seiten im Speicher zu generieren, die für Lese- oder Schreiboperationen zugewiesen sind, ohne dass tatsächliche Lese- oder Schreibvorgänge ausgeführt werden (Prefault). Die Verwendung dieser Flags kann hilfreich sein, um die Verzögerungen während der Programmausführung zu verringern, indem der Handler für "Page Faults" vorab für alle nicht zugewiesenen Seiten ausgeführt wird, ohne auf tatsächliche Zugriffe zu warten.
- Im Unit-Testsystem kunit wurde die Unterstützung für das Ausführen von Tests in der QEMU-Umgebung hinzugefügt.
- Neue Tracer wurden hinzugefügt: "osnoise" zum Nachverfolgen von Verzögerungen in Anwendungen, die durch Interrupt-Verarbeitung verursacht werden, und "timerlat" zur Ausgabe detaillierter Informationen über Verzögerungen beim Aufwecken aufgrund von Timer-Signalen.
- Virtualisierung und Sicherheit
- Der Systemaufruf memfd_secret() wurde hinzugefügt, der es ermöglicht, einen privaten Speicherbereich in einem isolierten Adressraum zu erstellen, der nur für den Eigentümerprozess sichtbar und nicht für andere Prozesse zugänglich ist sowie nicht direkt vom Kernel erreichbar ist.
- Im Seccomp-System zur Filterung von Systemaufrufen wurde beim Auslagern von Blockierern in den Benutzermodus die Möglichkeit geschaffen, eine atomare Operation zu verwenden, um einen Dateideskriptor für die isolierte Aufgabe zu erstellen und diesen während der Bearbeitung des Systemaufrufs zurückzugeben. Der vorgeschlagene Vorgang löst das Problem der Unterbrechung des Handlers im Benutzermodus bei Erhalt eines Signals.
- Ein neuer Mechanismus zur Verwaltung der Ressourcenkontingentierung im Benutzernamensraum wurde hinzugefügt, der separate rlimit-Zähler an den Benutzer im "user namespace" bindet. Diese Änderung löst das Problem der Anwendung gemeinsamer Ressourcen-Zähler, wenn ein Benutzer Prozesse in verschiedenen Containern startet.
- Im Hypervisor KVM Für ARM64-Systeme wurde die Möglichkeit hinzugefügt, die MTE-Erweiterung (MemTag, Memory Tagging Extension) in Gastbetriebssystemen zu verwenden, die es ermöglicht, Tags jeder Speicheroperation zuzuweisen und die Korrektheit der Verwendung von Zeigern zu überprüfen, um die Ausnutzung von Schwachstellen zu verhindern, die durch Zugriffe auf bereits freigegebene Speicherblöcke, Pufferüberläufe, Zugriffe vor der Initialisierung und Verwendungen außerhalb des aktuellen Kontexts verursacht werden.
- Die von der ARM64-Plattform bereitgestellten Mittel zur Pointer-Authentifizierung können nun separat für den Kernel und den Benutzermodus konfiguriert werden. Die Technologie ermöglicht die Verwendung spezialisierter 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 umgesetzt wird, hinzugefügt.
- Für x86-Systeme wurde die Unterstützung des paravirtualisierten Geräts 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 zu Coffee Lake, ist die Verwendung der Intel TSX (Transactional Synchronization Extensions) standardmäßig deaktiviert. Diese Erweiterungen bieten Mittel zur Leistungssteigerung von Multithread-Anwendungen durch die dynamische Ausnahme überflüssiger Synchronisationsoperationen. Die Erweiterungen sind deaktiviert worden, um Angriffen wie Zombieload vorzubeugen, die Datenlecks über Seitenkanäle ausnutzen, die während des Betriebs des asynchronen Interrupt-Mechanismus auftreten (TAA, TSX Asynchronous Abort).
- Netzwerksubsystem
- Die Integration von MPTCP (MultiPath TCP) in den Kernel wurde fortgesetzt, ein Protokollerweiterung für die Organisation des TCP-Verbindungsbetriebs mit gleichzeitiger Paketauslieferung über mehrere Routen durch verschiedene Netzwerk-Schnittstellen, die unterschiedlichen zugeordnet sind. IP-AdressenIn der neuen Version wurde ein Mechanismus zur Festlegung eigener Hash-Richtlinien für den Datenverkehr für IPv4 und IPv6 (multipath hash policy) hinzugefügt, der es ermöglicht, aus dem Benutzermodus zu bestimmen, welche Felder in den Paketen, einschließlich der gekapselten, zur Berechnung des Hashs verwendet werden, der den Weg für das Paket festlegt.
- In den virtuellen Transport virtio wurde die Unterstützung für SOCK_SEQPACKET-Sockets (geordnetes und zuverlässiges Übertragen von Datagrammen) hinzugefügt.
- Die Möglichkeiten des Mechanismus SO_REUSEPORT für Sockets wurden erweitert, der es mehreren hörenden Sockets ermöglicht, sich mit einem einzigen Port zu verbinden, um Verbindungen zu empfangen, wobei die eingehenden Anfragen gleichzeitig auf alle über SO_REUSEPORT verbundenen Sockets verteilt werden. Dies vereinfacht die Erstellung von multithreaded Serveranwendungen. In der neuen Version wurden Mittel hinzugefügt, um im Falle eines Fehlers bei der Verarbeitung einer Anfrage durch den ursprünglich gewählten Socket die Kontrolle an einen anderen Socket zu übergeben (löst das Problem des Verlusts einzelner Verbindungen bei einem Neustart von Diensten).
- Ausrüstung
- Der amdgpu-Treiber unterstützt die neuen AMD Radeon RX 6000 GPU-Serien, die unter den Codenamen „Beige Goby“ (Navi 24) und „Yellow Carp“ entwickelt werden, und verbessert die Unterstützung für die GPU Aldebaran (gfx90a) und APU Van Gogh. Es wurde die Möglichkeit hinzugefügt, mehrere eDP-Panel 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 heiße Entfernen von Grafikkarten (hot-unplug) wurde hinzugefügt. Für die GPU Radeon RX 6000 (Navi 2x) und ältere AMD-GPUs wurde die Unterstützung des Energiesparmechanismus ASPM (Active State Power Management), der zuvor nur für die GPUs Navi 1x, Vega und Polaris aktiviert war, standardmäßig eingeschaltet.
- Für AMD-Chips wurde die Unterstützung des Shared Virtual Memory (SVM) auf Basis des Heterogeneous Memory Management (HMM) hinzugefügt, das die Verwendung von Geräten mit eigenen Speicherverwaltungseinheiten (MMUs) ermöglicht, die auf den Hauptspeicher zugreifen können. Mit HMM kann 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 AMD Smart Shift wurde hinzugefügt, die die Energieverbrauchsparameter von CPU und GPU auf Notebooks mit AMD-Chipsatz und -Grafikkarte dynamisch anpasst, um die Leistung bei Spielen, Videoschnitt und 3D-Rendering zu maximieren.
- Der i915-Treiber für Intel-Grafikkarten unterstützt jetzt Intel Alder Lake P-Chips.
- Ein Treiber für drm/hyperv für den virtuellen Grafikadapter Hyper-V wurde hinzugefügt.
- Die Unterstützung für den All-in-One-Computer Raspberry Pi 400 wurde hinzugefügt.
- Der Treiber dell-wmi-privacy wurde hinzugefügt, um die in Dell-Notebooks gelieferten Hardware-Buttons für Kamera und Mikrofon zu unterstützen.
- Für Lenovo-Notebooks wurde ein WMI-Interface zur Änderung der BIOS-Parameter über sysfs /sys/class/firmware-attributes/ hinzugefügt.
- Die Unterstützung von Geräten mit USB4-Schnittstelle wurde erweitert.
- Die 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 wurde hinzugefügt. Die Unterstützung für den Sound auf HP- und ASUS-Notebooks wurde verbessert. Patches zur Verringerung der Verzögerungen beim Start der Soundwiedergabe auf Geräten mit USB-Schnittstelle wurden hinzugefügt.
Quelle: opennet.ru
