Nach zwei Monaten Entwicklung präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 5.12. Zu den auffälligsten Änderungen gehören: Unterstützung für zonierte Blockgeräte in Btrfs, die Möglichkeit der Zuordnung von Benutzer-IDs für das Dateisystem, Bereinigung veralteter ARM-Architekturen, ein „ungeduldiger“ Schreibmodus in NFS, der LOOKUP_CACHED-Mechanismus zur Bestimmung von Dateipfaden aus dem Cache, Unterstützung für atomare Instruktionen in BPF, das Debugging-System KFENCE zur Identifizierung von Speicherfehlern, der im Kernel in einem separaten Thread arbeitende NAPI-Polling-Modus im Netzwerkstack, der Hypervisor ACRN, die Möglichkeit zur dynamischen Änderung des Preempt-Modells im Task-Scheduler und die Unterstützung von LTO-Optimierungen beim Build in Clang.
In die neue Version wurden 14170 (im vorherigen Release 15480) Korrekturen von 1946 (1991) Entwicklern aufgenommen, die Patch-Größe beträgt 38 MB (Änderungen betreffen 12102 (12090) Dateien, es wurden 538599 (868025) Codezeilen hinzugefügt und 333377 (261456) Zeilen entfernt). Etwa 43 % aller in 5.12 präsentierten Änderungen stehen im Zusammenhang mit Gerätetreibern, etwa 17 % beziehen sich auf die Aktualisierung von architekturspezifischem Code, 12 % betreffen den Netzwerkstack, 5 % die Dateisysteme und 4 % interne Subsysteme des Kernels.
Hauptneuheiten:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Es wurde die Möglichkeit zur Zuordnung von Benutzer-IDs für eingehängte Dateisysteme realisiert (es können Dateien eines Benutzers auf einem gemounteten fremden Laufwerk mit einem anderen Benutzer im aktuellen System zugeordnet werden). Die Zuordnung wird für die Dateisysteme FAT, ext4 und XFS unterstützt. Die vorgeschlagene Funktionalität ermöglicht eine vereinfachte gemeinsame Nutzung von Dateien durch verschiedene Benutzer und auf unterschiedlichen Computern, einschließlich der Anwendung der Zuordnung im Mechanismus für portable Home-Verzeichnisse systemd-homed, der es Benutzern ermöglicht, ihre Home-Verzeichnisse auf externe Träger zu verschieben und auf verschiedenen Computern zu nutzen, deren Benutzer-IDs nicht übereinstimmen. Eine weitere nützliche Anwendung ist die Organisation der Bereitstellung des gemeinsamen Zugriffs auf Dateien von einem externen Host, ohne die Daten über die Eigentümer der Dateien im Dateisystem tatsächlich zu ändern.
- In den Kernel wurden die LOOKUP_CACHED-Patches aufgenommen, die es ermöglichen, Pfadoperationen aus dem Benutzerspeicher durchzuführen, ohne Blockierungen, ausschließlich auf der Grundlage der im Cache vorhandenen Daten. Der LOOKUP_CACHED-Modus wird beim Aufruf von openat2() durch die Übergabe des Flags RESOLVE_CACHED aktiviert, bei dem die Daten ausschließlich aus dem Cache bereitgestellt werden und eine Fehlermeldung EAGAIN zurückgegeben wird, wenn die Pfadbestimmung einen Zugriff auf den Speicher erfordert.
- Im Dateisystem Btrfs wurde die anfängliche Unterstützung für zonierte Blockgeräte hinzugefügt (Geräte auf harten magnetischen Festplatten oder NVMe SSD, deren Speicherplatz in Zonen unterteilt ist, die Gruppen von Blöcken oder Sektoren bilden, in die nur sequenzielle Datenhinzufügungen zulässig sind, wobei die gesamte Gruppe von Blöcken aktualisiert wird). Im Nur-Lese-Modus wurde die Unterstützung für Blöcke mit Metadaten und Daten eingeführt, die kleiner als eine Seite (subpage) sind.
- Im Dateisystem F2FS wurde die Möglichkeit zur Auswahl des Algorithmus und der Komprimierungsstufe hinzugefügt. Es wurde eine Unterstützung für hohen Komprimierungsgrad für den Algorithmus LZ4 hinzugefügt. Die Option zum Einhängen checkpoint_merge wurde implementiert.
- Der neue ioctl-Befehl FS_IOC_READ_VERITY_METADATA zur Lesezugriff auf Metadaten aus Dateien, die mit fs-verity geschützt sind, wurde implementiert.
- Im NFS-Client wurde der Modus für "unverschämtes" Schreiben (writes=eager) implementiert, bei dem Schreiboperationen sofort an den Server weitergeleitet werden, ohne den Seiten-Cache zu nutzen. Dieser Modus reduziert den Speicherverbrauch, ermöglicht sofortige Informationen über den freien Speicherplatz im FS und bietet in bestimmten Situationen die Möglichkeit, die Leistung zu steigern.
- In CIFS (SMB) wurden neue Einhängeoptionen hinzugefügt: acregmax zur Verwaltung des Caching von Dateien und acdirmax zur Verwaltung des Caching von Metadaten von Verzeichnissen.
- In XFS wurde der Modus zur mehrstufigen Überprüfung von Quoten aktiviert, die Ausführung von fsync beschleunigt und der Code growfs für die Implementierung der Funktion zur Verkleinerung der FS vorbereitet.
- Speicher und Systemdienste
- Das DTMP (Dynamic Thermal Power Management)-Subsystem wurde hinzugefügt, das die dynamische Regulierung des Energieverbrauchs verschiedener Geräte basierend auf festgelegten allgemeinen Temperaturgrenzen ermöglicht.
- Die Möglichkeit, den Kern des Compilers Clang mit aktivierten Optimierungen in der Linkzeit-Optimierung (LTO - Link Time Optimization) zu erstellen, wurde implementiert. LTO-Optimierungen berücksichtigen den Zustand aller Dateien, die am Erstellungsprozess beteiligt sind, während traditionelle Optimierungsmodi jede Datei einzeln optimieren und keine Bedingungen der in anderen Dateien definierten Funktionen berücksichtigen. Zum Beispiel ist bei LTO ein Inline-Entfaltung für Funktionen aus anderen Dateien möglich, nicht genutzter Code wird nicht in die ausführbare Datei aufgenommen, Typüberprüfungen werden durchgeführt und die Optimierung auf Projektebene erfolgt insgesamt. Die Unterstützung von LTO ist derzeit auf die Architekturen x86 und ARM64 beschränkt.
- Die Möglichkeit zur Auswahl von Preemption-Modi (PREEMPT) im Aufgabenplaner während des Bootvorgangs (preempt=none/voluntary/full) oder während des Betriebs über debugfs (/debug/sched_debug) wurde bereitgestellt, sofern bei der Erstellung des Kernels die Einstellung PREEMPT_DYNAMIC angegeben wurde. Zuvor konnte der Preemption-Modus nur auf der Ebene der Erstellungseinstellungen festgelegt werden. Diese Änderung ermöglicht es Distributionen, Kernel mit aktivem PREEMPT-Modus bereitzustellen, der minimale Latenzen für Desktops bei geringfügigem Verlust an Durchsatz bietet, und bei Bedarf auf die Modi PREEMPT_VOLUNTARY (Zwischenmodus für Desktops) oder PREEMPT_NONE (maximaler Durchsatz für) zurückzugreifen. Server).
- Der BPF-Subsystem wurde um die Unterstützung für atomare Operationen wie BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG und BPF_CMPXCHG erweitert.
- BPF-Programmen wurde der Zugriff auf Daten im Stack über Zeiger mit variablem Offset ermöglicht. Frühere Zugriffe auf Arrays im Stack konnten nur mit einem festen Elementindex erfolgen, jetzt ist auch ein variabler Index möglich. Der Zugriff erfolgt nur im Rahmen der vorhandenen Grenzen und wird vom BPF-Überprüfer kontrolliert. Diese Funktion ist nur für privilegierte Programme verfügbar, um die Ausnutzung von Schwachstellen im Zusammenhang mit spekulativer Codeausführung zu verhindern.
- Die Möglichkeit, BPF-Programme an „unbare“ Tracemarker (bare tracepoints) zu verknüpfen, die nicht mit den für Benutzer sichtbaren Tracereignissen verbunden sind, wurde hinzugefügt (für solche Tracemarker wird keine ABI-Kompatibilität garantiert).
- Die Unterstützung des CXL 2.0-Busses (Compute Express Link) wurde implementiert, der für die Organisation einer hochgeschwindigkeitsfähigen Interaktion zwischen CPU und Speichereinheiten verwendet wird (er ermöglicht die Nutzung von externen Speichereinheiten als Teil des RAM oder permanenten Speichers, als ob dieser Speicher über einen regulären Speichercontroller an die CPU angeschlossen wäre).
- Ein nvmem-Treiber wurde hinzugefügt, um Daten aus von Firmware reservierten Speicherbereichen abzurufen, die für Linux direkt nicht zugänglich sind (zum Beispiel EEPROM-Speicher, der physisch nur für die Firmware zugänglich ist, oder Daten, die nur in der frühen Boot-Phase verfügbar sind).
- Die Unterstützung des Profilierungssystems „oprofile“ wurde entfernt, da es nicht ausreichend verbreitet war und durch den moderneren Mechanismus perf ersetzt wurde.
- Im asynchronen Eingabe-/Ausgabe-Interface io_uring wurde die Integration mit cgroup, das die Speichernutzung kontrolliert, bereitgestellt.
- Für die RISC-V-Architektur wurde die Unterstützung von NUMA-Systemen sowie der Mechanismen kprobes und uprobes implementiert.
- Die Möglichkeit, den Systemaufruf kcmp() unabhängig von der Funktionalität der Prozesszustands-Snapshots (Checkpoint/Restore) zu verwenden, wurde hinzugefügt.
- Die Makros EXPORT_UNUSED_SYMBOL() und EXPORT_SYMBOL_GPL_FUTURE() wurden entfernt, die seit vielen Jahren in der Praxis nicht mehr verwendet werden.
- Virtualisierung und Sicherheit
- Ein Schutzmechanismus KFence (Kernel Electric Fence) wurde implementiert, der Fehler beim Umgang mit Speicher erfasst, wie etwa Pufferüberläufe und Zugriffe nach Freigabe von Speicher. Im Gegensatz zum Debugging-Mechanismus KASAN zeichnet sich der KFence-Untersystem durch hohe Geschwindigkeit und geringe Overhead-Kosten aus, was es ermöglicht, Fehler beim Umgang mit Speicher zu erfassen, die sich nur in produktiven Systemen oder bei längerer Laufzeit zeigen.
- Die Unterstützung des Hypervisors ACRN wurde hinzugefügt, der mit Blick auf die Bereitschaft zur Ausführung von Echtzeitanforderungen und die Eignung für den Einsatz in kritischen Systemen entwickelt wurde. ACRN bietet minimale Overhead-Kosten, garantiert niedrige Latenzen und eine angemessene Reaktionsfähigkeit beim Umgang mit Hardware. Die Virtualisierung von CPU-Ressourcen, Ein-/Ausgabeverwaltung, Netzwerksubsystem, Grafik- und Tonoperationen wird unterstützt. ACRN kann verwendet werden, um mehrere isolierte Umgebungen zu starten. virtuelle Maschinen in elektronischen Steuergeräten, Armaturenbrettern, automobilen Informationssystemen, Verbrauchs-IoT-Geräten und anderer eingebetteter Technik. ACRN unterstützt zwei Arten von Gast-Systemen – privilegierte Service-VMs, die zur Verwaltung der Systemressourcen (CPU, Speicher, Ein-/Ausgabe usw.) verwendet werden, und benutzerdefinierte User-VMs, in denen Linux-Distributionen, Android und Windows ausgeführt werden können.
- Im IMA (Integrity Measurement Architecture)-Subsystem, das die Aufrechterhaltung einer Hash-Datenbank zur Überprüfung der Integrität von Dateien und den zugehörigen Metadaten sicherstellt, wurde die Möglichkeit hinzugefügt, die Integrität der Kern-Daten selbst zu überprüfen, um beispielsweise Änderungen der SELinux-Regeln nachzuvollziehen.
- Im Hypervisor KVM wurde die Fähigkeit hinzugefügt, Xen-Hypercalls abzufangen und an den im Benutzermodus betriebenen Emulator weiterzuleiten.
- Die Möglichkeit wurde hinzugefügt, Linux als Wurzelumgebung für den Hypervisor Hyper-V zu verwenden. Die Wurzelumgebung hat direkten Zugriff auf die Hardware und wird verwendet, um Gast-Systeme zu starten (analog zu Dom0 in Xen). Bislang unterstützte Hyper-V (Microsoft Hypervisor) Linux nur in Gastumgebungen, während der Hypervisor selbst aus einer Windows-basierten Umgebung verwaltet wurde.
- Inline-Verschlüsselung für eMMC-Karten wurde hinzugefügt, die es ermöglicht, die im Speichercontroller integrierten Verschlüsselungsmechanismen zu nutzen, welche die transparente Verschlüsselung und Entschlüsselung von Ein-/Ausgaben durchführen.
- Die Unterstützung für ungenutzte Hashes RIPE-MD 128/256/320 und Tiger 128/160/192 wurde aus dem Kryptosubsystem entfernt, während der Stream-Cipher Salsa20 durch den Algorithmus ChaCha20 ersetzt wurde. Der Algorithmus blake2 wurde auf die Implementierung blake2s aktualisiert.
- Netzwerksubsystem
- Die Möglichkeit wurde hinzugefügt, den NAPI-Polling-Handler für Netzwerktegeräte in einen separaten Kernel-Thread auszulagern, was zu einer Leistungssteigerung bei bestimmten Lasttypen führt. Zuvor wurde das Polling im Kontext von softirq durchgeführt und nicht vom Task-Scheduler erfasst, was eine feine Optimierung zur Maximierung der Leistung erschwerte. Die Ausführung in einem separaten Kernel-Thread ermöglicht die Überwachung des Polling-Handlers aus dem Benutzermodus, das Anhängen an spezielle CPU-Kerne und die Berücksichtigung bei der Planung des Task-Wechsels. Um den neuen Modus in sysfs zu aktivieren, wurde der Parameter /sys/class/net//threaded vorgeschlagen.
- Die Integration in den MPTCP-Kernel (MultiPath TCP), eine Erweiterung des TCP-Protokolls zur gleichzeitigen Übertragung von TCP-Paketen über mehrere Routen durch verschiedene Netzwerk-Interfaces mit unterschiedlichen IP-Adressen, wurde fortgesetzt. In der neuen Version wurde die Möglichkeit hinzugefügt, bestimmten Streams Prioritäten zuzuweisen, was beispielsweise die Einrichtung von Backup-Streams ermöglicht, die nur bei Problemen mit dem Hauptstream aktiviert werden.
- In IGMPv3 wurde die Unterstützung für den Mechanismus EHT (Explicit Host Tracking) hinzugefügt.
- Im Paketfiltermechanismus netfilter wurde die Möglichkeit implementiert, bestimmte Tabellen zur exklusiven Kontrolle zu besitzen (z. B. kann ein Hintergrundprozess der Firewall bestimmte Tabellen für sich beanspruchen und anderen das Eingreifen verweigern).
- Ausrüstung
- Es wurde eine Bereinigung von nicht mehr genutzten und nicht gewarteten ARM-Plattformen durchgeführt. Der Code für die Plattformen efm32, picoxcell, prima2, tango, u300, zx und c6x sowie die zugehörigen Treiber wurde entfernt.
- Im amdgpu-Treiber wurde die Möglichkeit zur Übertaktung (OverDrive) für Karten auf Basis des GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx) implementiert. Unterstützung für das Pixel-Format FP16 für den DCE (display controller engine) der Generationen 8 bis 11 wurde hinzugefügt. Für die GPUs Navy Flounder (Navi 21) und APU Van Gogh wurde die Möglichkeit zur GPU-Rücksetzung implementiert.
- Im i915-Treiber für Intel-Grafikkarten wurde der Parameter i915.mitigations implementiert, um Isolations- und Schutzmechanismen zugunsten einer Leistungssteigerung zu deaktivieren. Für Chips ab Tiger Lake wurde die Unterstützung des Mechanismus VRR (Variable Rate Refresh) aktiviert, der die Aktualisierungsrate des Monitors adaptiv anpasst, um ein flüssiges Erlebnis ohne Ruckler beim Spielen zu gewährleisten. Unterstützung für die Technologie Intel Clear Color wurde aktiviert, um die Farbgenauigkeit zu verbessern. Unterstützung für DP-HDMI 2.1 wurde hinzugefügt. Es wurde die Möglichkeit zur Steuerung der Hintergrundbeleuchtung von eDP-Panels implementiert. Für die GPU Gen9 mit Unterstützung für LSPCON (Level Shifter and Protocol Converter) wurde die Unterstützung für HDR aktiviert.
- Im nouveau-Treiber wurde erste Unterstützung für die NVIDIA GPU basierend auf der Architektur GA100 (Ampere) hinzugefügt.
- Im MSM-Treiber wurde die Unterstützung für die GPUs Adreno 508, 509 und 512 hinzugefügt, die in den SDM (Snapdragon) Chips 630, 636 und 660 verwendet werden.
- Unterstützung für die Soundkarten Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s und Pioneer DJM-750 hinzugefügt. Unterstützung für das Audio-Subsystem Intel Alder Lake PCH-P implementiert. Unterstützung für die softwareseitige Simulation des Anschlusses und Trennens des Audioanschlusses zur Fehlersuche in der Benutzerumgebung realisiert.
- Unterstützung für die Spielkonsolen Nintendo 64, die von 1996 bis 2003 hergestellt wurden, hinzugefügt (frühere Versuche, Linux für Nintendo 64 zu portieren, wurden nicht abgeschlossen und hatten den Status Vaporware). Das Motiv für die Schaffung eines neuen Ports für diese veraltete Plattform, die seit fast zwanzig Jahren nicht mehr produziert wird, ist der Wunsch, die Entwicklung von Emulatoren und die Vereinfachung der Portierung von Spielen zu fördern.
- Ein Treiber für den Spielcontroller Sony PlayStation 5 DualSense hinzugefügt.
- Unterstützung für ARM-Plattformen, Geräte und Plattformen hinzugefügt: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
- Unterstützung für die Smartphones Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070 hinzugefügt.
- Der bcm-vk Treiber für die Broadcom VK Beschleunigerkarten (z. B. PCIe-Karten Valkyrie und Viper) hinzugefügt, die zum Auslagern von Audiobearbeitung, Video- und Bildverarbeitung sowie von Verschlüsselungsaufgaben auf ein separates Gerät verwendet werden können.
- Unterstützung für die Lenovo IdeaPad Plattform mit der Möglichkeit, die permanente Aufladung und die Hintergrundbeleuchtung der Tastatur zu steuern, hinzugefügt. Zudem wird die Unterstützung des ACPI-Profils der ThinkPad Plattform mit der Möglichkeit zur Steuerung der Energiesparmodi gewährleistet. Ein Treiber für das HID-Subsystem des Lenovo ThinkPad X1 Tablet Gen 2 wurde hinzugefügt.
- Der ov5647 Treiber mit Unterstützung für das Kameramodul für Raspberry Pi hinzugefügt.
- Unterstützung für das RISC-V SoC FU740 und die HiFive Unleashed Platinen hinzugefügt. Ein neuer Treiber für den Kendryte K210 Chip wurde ebenfalls hinzugefügt.
Quelle: opennet.ru
