Nach zwei Monaten Entwicklung stellte Linus Torvalds das Release des Linux-Kernels 5.12 vor. Zu den bemerkenswertesten Änderungen gehören: Unterstützung für zonierte Blockgeräte in Btrfs, die Möglichkeit zur Zuordnung von Benutzerkennungen für das Dateisystem, Bereinigung veralteter ARM-Architekturen, ein ‘ungeduldiger’ Schreibmodus in NFS, der Mechanismus LOOKUP_CACHED zur Bestimmung von Dateipfaden aus dem Cache, Unterstützung atomarer Befehle in BPF, das Debugging-System KFENCE zur Erkennung von Speicherfehlern, ein im Kernel-Thread laufender NAPI-Polling-Modus im Netzwerk-Stack, der Hypervisor ACRN, die Möglichkeit, die Preemptionsstrategie im Scheduler dynamisch zu ändern und die Unterstützung von LTO-Optimierungen beim Kompilieren in Clang.
In die neue Version wurden 14.170 (im vorherigen Release 15.480) Korrekturen von 1.946 (1.991) Entwicklern integriert. Die Größe des Patches beträgt 38 MB (Änderungen betreffen 12.102 (12.090) Dateien, hinzugefügt wurden 538.599 (868.025) Codezeilen, während 333.377 (261.456) Zeilen entfernt wurden). Etwa 43 % aller Änderungen in 5.12 beziehen sich auf Geräte-Treiber, ungefähr 17 % der Änderungen betreffen die Aktualisierung von architekturspezifischem Code, 12 % sind mit dem Netzwerk-Stack verbunden, 5 % mit Dateisystemen und 4 % mit internen Subsystemen des Kernels.
Hauptneuheiten:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Die Möglichkeit zur Zuordnung von Benutzeridentifikatoren für gemountete Dateisysteme wurde implementiert (es ist möglich, Dateien eines Benutzers auf einer gemounteten Partition eines anderen Benutzers mit einem anderen Benutzer im aktuellen System abzugleichen). Die Zuordnung wird für die Dateisysteme FAT, ext4 und XFS unterstützt. Diese Funktionalität vereinfacht die gemeinsame Nutzung von Dateien durch verschiedene Benutzer und an verschiedenen Computern. Insbesondere wird die Zuordnung im Mechanismus der tragbaren Home-Verzeichnisse von systemd-homed angewendet, was es den Benutzern erlaubt, ihre Home-Verzeichnisse auf externe Speichermedien zu verschieben und sie an verschiedenen Computern zu verwenden, deren Benutzeridentifikatoren nicht übereinstimmen. Eine weitere nützliche Anwendung ist die Ermöglichung des Datei-Zugriffs von externen Hosts, ohne die Eigentümerdaten der Dateien im Dateisystem tatsächlich zu ändern.
- Im Kern wurden Patches für LOOKUP_CACHED aufgenommen, die es ermöglichen, Pfadbestimmungsoperationen aus dem Benutzerspeicher ohne Blockierung nur basierend auf den im Cache vorhandenen Daten durchzuführen. Der LOOKUP_CACHED-Modus wird im Aufruf von openat2() durch Übergabe des Flags RESOLVE_CACHED aktiviert, bei dem die Daten ausschließlich aus dem Cache bereitgestellt werden. Wenn die Pfadbestimmung einen Zugriff auf das Speichermedium erfordert, wird der Fehler EAGAIN zurückgegeben.
- Im Btrfs-Dateisystem wurde eine erste Unterstützung für zonierte Blockgeräte hinzugefügt (Geräte auf herkömmlichen Festplatten oder NVMe-SSDs, bei denen der Speicherplatz in Zonen unterteilt ist, die Gruppen von Blöcken oder Sektoren bilden, in die nur sequenziell Daten hinzugefügt werden dürfen, wobei die gesamte Gruppe aktualisiert wird). Im Nur-Lese-Modus wird die Unterstützung für Blöcke mit Metadaten und Daten, die kleiner als eine Seite (subpage) sind, implementiert.
- Im F2FS-Dateisystem wurde die Möglichkeit hinzugefügt, den Algorithmus und das Kompressionsniveau auszuwählen. Hohe Kompression für den Algorithmus LZ4 wurde hinzugefügt. Die Option zum Mounten von checkpoint_merge wurde implementiert.
- Ein neuer ioctl-Befehl FS_IOC_READ_VERITY_METADATA wurde implementiert, um Metadaten von Dateien zu lesen, die durch fs-verity geschützt sind.
- Im NFS-Client wurde der Modus der 'ungeduldigen' Schreibvorgänge (writes=eager) eingeführt, bei dem Schreiboperationen sofort an den Server gesendet werden, ohne den Seiten-Cache zu durchlaufen. Dieser Modus trägt zur Reduzierung des Speicherverbrauchs bei, ermöglicht eine sofortige Rückmeldung über den verfügbaren Speicherplatz im Dateisystem und kann in bestimmten Situationen die Leistung verbessern.
- In CIFS (SMB) wurden neue Montageoptionen hinzugefügt: acregmax zur Steuerung des Datei-Cachings und acdirmax zur Steuerung des Caching von Katalogmetadaten.
- In XFS wurde der Modus für die mehrfädige Überprüfung von Quoten aktiviert, die fsync-Ausführung beschleunigt und der Code von growfs vorbereitet, um die Funktion zur Verkleinerung der Dateisystemgröße zu implementieren.
- Speicher und Systemdienste
- Ein neues Untersystem DTMP (Dynamic Thermal Power Management) wurde hinzugefügt, das eine dynamische Regulierung des Energieverbrauchs verschiedener Geräte basierend auf festgelegten allgemeinen Temperaturgrenzen ermöglicht.
- Die Möglichkeit, den Kernel mit dem Clang-Compiler zu erstellen, wurde implementiert, wobei Optimierungen in der Link-Phase (LTO, Link Time Optimization) einbezogen werden. LTO-Optimierungen berücksichtigen den Zustand aller Dateien, die am Build-Prozess beteiligt sind, während traditionelle Optimierungsmodi jede Datei einzeln optimieren und die Bedingungen für Funktionsaufrufe, die in anderen Dateien definiert sind, nicht berücksichtigen. Zum Beispiel ist bei LTO für Funktionen aus anderen Dateien Inline-Expansion möglich, nicht verwendeter Code wird nicht in die ausführbare Datei aufgenommen, Typüberprüfungen werden durchgeführt, und eine umfassende Optimierung auf Projektebene erfolgt. Die Unterstützung für LTO ist derzeit auf die Architekturen x86 und ARM64 beschränkt.
- Im Task-Scheduler besteht nun die Möglichkeit, die Preemptionsmodi (PREEMPT) während des Bootvorgangs (preempt=none/voluntary/full) oder über debugfs (/debug/sched_debug) zu wählen, sofern bei der Kernel-Kompilierung die Einstellung PREEMPT_DYNAMIC angegeben wurde. Zuvor konnte der Preemptionsmodus nur auf Ebene der Kompilierungsparameter festgelegt werden. Diese Änderung ermöglicht es Distributionen, Kerne mit aktiviertem PREEMPT-Modus anzubieten, der minimale Latenzen für Desktops bei geringfügig reduzierter Durchsatzleistung bietet und bei Bedarf auf die Modi PREEMPT_VOLUNTARY (Zwischenmodus für Desktops) oder PREEMPT_NONE (maximale Durchsatzleistung) zurückzugreifen. Server).
- Das BPF-Subsystem hat Unterstützung für atomare Operationen BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG und BPF_CMPXCHG hinzugefügt.
- BPF-Anwendungen erhalten die Möglichkeit, auf Daten im Stack über Zeiger mit variablen Offsets zuzugreifen. Zum Beispiel konnte zuvor für den Zugriff auf ein Array im Stack nur ein fester Index des Elements verwendet werden, jetzt ist es möglich, einen variierenden Index zu nutzen. Der Zugriff wird von einem BPF-Validator innerhalb der vorhandenen Grenzen überwacht. Diese Möglichkeit steht nur privilegierten Programmen zur Verfügung, um das Ausnutzen von Schwachstellen im Zusammenhang mit spekulativer Codeausführung zu vermeiden.
- Es wurde die Möglichkeit hinzugefügt, BPF-Programme an "nackte" Tracepoints zu koppeln, die nicht mit den im Benutzerraum sichtbaren Traceing-Ereignissen verbunden sind (für solche Tracepoints ist die ABI-Kompatibilität nicht garantiert).
- Die Unterstützung für den CXL 2.0-Bus (Compute Express Link) wurde implementiert, der für die Hochgeschwindigkeitskommunikation zwischen CPU und Speichereinheiten verwendet wird (er ermöglicht die Verwendung externer Speichereinheiten als Teil des RAM oder des Flash-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 vom Firmware reservierten, direkt für Linux nicht zugänglichen Speicherbereichen abzurufen (z.B. EEPROM-Speicher, der physisch nur für die Firmware zugänglich ist, oder Daten, die nur in einer frühen Bootphase verfügbar sind).
- Die Unterstützung des Profilierungssystems "oprofile" wurde entfernt, da es nicht weit verbreitet war und durch den moderneren Mechanismus perf ersetzt wurde.
- Im Interface für asynchrone Eingabe/Ausgabe io_uring wurde die Integration mit cgroup realisiert, die die Speichernutzung steuert.
- Für die RISC-V-Architektur wurde die Unterstützung von NUMA-Systemen sowie von kprobes- und uprobes-Mechanismen implementiert.
- Die Möglichkeit, den Systemaufruf kcmp() unabhängig von der Funktionalität der Prozesszustandsschnappschüsse (checkpoint/restore) zu nutzen, wurde hinzugefügt.
- Die Makros EXPORT_UNUSED_SYMBOL() und EXPORT_SYMBOL_GPL_FUTURE() wurden entfernt, da sie seit vielen Jahren nicht mehr verwendet werden.
- Virtualisierung und Sicherheit
- Ein Schutzmechanismus namens KFence (Kernel Electric Fence) wurde hinzugefügt, der Fehler im Umgang mit Arbeitsspeicher erkennt, wie z.B. Puffergrenzüberläufe und Zugriffe auf bereits freigegebenen Speicher. Im Gegensatz zum Debugging-Mechanismus KASAN zeichnet sich die KFence-Subsystem durch hohe Geschwindigkeit und geringe Kosten aus, was es ermöglicht, Speicherfehler zu erkennen, die nur in produktiven Systemen oder bei längerer Nutzung auftreten.
- Die Unterstützung des Hypervisors ACRN wurde hinzugefügt, der mit Blick auf Echtzeitanforderungen und den Einsatz in kritischen Systemen entwickelt wurde. ACRN bietet minimale Overheadkosten, garantiert niedrige Latenzzeiten und eine angemessene Reaktionsfähigkeit bei der Hardwareinteraktion. Die Virtualisierung von CPU-Ressourcen, Eingabe/Ausgabe, Netzwerk-Subsystemen sowie Grafik- und Audiooperationen wird unterstützt. ACRN kann verwendet werden, um mehrere isolierte Umgebungen zu betreiben. virtuellen Maschinen in Steuergeräten, Armaturenbrettern, Fahrzeuginformationssystemen, Verbraucher-IoT-Geräten und anderen eingebetteten Technologien. ACRN unterstützt zwei Arten von Gastsystemen — 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 Hash-Datenbank zur Überprüfung der Integrität von Dateien und zugehörigen Metadaten aufrechterhält, wurde die Möglichkeit zur Überprüfung der Integrität der Kernel-Daten eingeführt, um beispielsweise Änderungen der SELinux-Regeln nachverfolgen zu können.
- Der KVM-Hypervisor hat die Möglichkeit erhalten, Xen-Hypercalls abzufangen und an den im Benutzermodus laufenden Emulator weiterzuleiten.
- Jetzt können Sie Linux als Root-Umgebung für den Hyper-V-Hypervisor nutzen. Die Root-Umgebung hat direkten Zugriff auf die Hardware und wird verwendet, um Gastbetriebssysteme zu starten (vergleichbar mit 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, um die integrierten Verschlüsselungsmechanismen des Controllers zu nutzen, die eine 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 sowie den Stromchiffrieralgorithmus Salsa20 wurde aus dem Kryptosystem entfernt; stattdessen wird der Algorithmus ChaCha20 verwendet. Der Algorithmus blake2 wurde auf die Implementierung blake2s aktualisiert.
- Netzwerksubsystem
- Die Möglichkeit, den NAPI-Polling-Handler von Netzwerkgeräten in einen separaten Kernel-Thread auszulagern, wurde hinzugefügt. Dies ermöglicht eine Leistungssteigerung bei bestimmten Lasttypen. Zuvor fand das Polling im Kontext von Softirq statt und wurde nicht vom Task-Scheduler erfasst, was eine feine Optimierung zur Erreichung maximaler Leistung erschwerte. Die Ausführung in einem separaten Kernel-Thread ermöglicht es, den Polling-Handler aus dem Benutzerspeicher heraus zu überwachen, ihn an bestimmte CPU-Kerne anzubinden und bei der Planung von Taskwechseln zu berücksichtigen. Um den neuen Modus zu aktivieren, wurde der Parameter /sys/class/net//threaded vorgeschlagen.
- Die Integration von MPTCP (MultiPath TCP) in den Kernel wurde fortgesetzt, eine Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen mit gleichzeitiger Paketübertragung über mehrere Routen verschiedener Netzwerk-Schnittstellen, die an unterschiedliche IP-Adressen gebunden sind, zu organisieren. In dieser neuen Version wurde die Möglichkeit hinzugefügt, bestimmten Streams Prioritäten zuzuweisen, was es ermöglicht, beispielsweise Backup-Streams zu aktivieren, die nur bei Problemen mit dem primären Stream eingesetzt werden.
- In IGMPv3 wurde Unterstützung für den EHT-Mechanismus (Explicit Host Tracking) hinzugefügt.
- Im netfilter-Paketfiltermechanismus wurde die Möglichkeit implementiert, bestimmte Tabellen zu besitzen, um exklusiven Zugriff zu erhalten (z. B. kann ein Hintergrundprozess der Firewall bestimmte Tabellen an sich binden und anderen verbieten, darauf zuzugreifen).
- Ausrüstung
- Es wurde eine Bereinigung veralteter und nicht gewarteter ARM-Plattformen durchgeführt. Der Code für die Plattformen efm32, picoxcell, prima2, tango, u300, zx und c6x sowie deren 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) realisiert. Unterstützung für das Pixel-Format FP16 wurde für DCE (Display Controller Engine) von der 8. bis zur 11. Generation hinzugefügt. Für den GPU 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 die Option i915.mitigations implementiert, um Isolations- und Schutzmechanismen zugunsten einer höheren Leistung zu deaktivieren. Für Chips ab Tiger Lake wird die Unterstützung des VRR-Mechanismus (Variable Rate Refresh) aktiviert, der die Bildwiederholfrequenz des Monitors adaptiv anpasst, um ein flüssiges Spielerlebnis ohne Ruckler zu gewährleisten. Die Unterstützung für die Intel Clear Color-Technologie zur Verbesserung der Farbgenauigkeit wurde hinzugefügt. Es wurde Unterstützung für DP-HDMI 2.1 implementiert. Die Möglichkeit zur Steuerung der Beleuchtung von eDP-Panels wurde realisiert. Für GPUs der Generation 9 mit LSPCON-Unterstützung (Level Shifter and Protocol Converter) wird HDR unterstützt.
- Im Nouveau-Treiber wurde die erste Unterstützung für NVIDIA-GPUs auf Basis der GA100-Architektur (Ampere) hinzugefügt.
- Der MSM-Treiber unterstützt jetzt die GPUs Adreno 508, 509 und 512, 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 wurde hinzugefügt. Es wird Unterstützung für das Audiomodul Intel Alder Lake PCH-P geboten. Außerdem wurde die Unterstützung für die softwarebasierte Simulation des An- und Absteckens von Audioanschlüssen zur Fehlersuche bei den Benutzermodulen implementiert.
- Unterstützung für die Nintendo 64 Spielkonsolen hinzugefügt, die von 1996 bis 2003 hergestellt wurden (frühere Versuche, Linux für die Nintendo 64 zu portieren, wurden nicht abgeschlossen und hatten den Status Vaporware). Der Anreiz für die Erstellung eines neuen Ports für diese veraltete Plattform, die seit fast zwanzig Jahren nicht mehr produziert wird, liegt im Wunsch, die Entwicklung von Emulatoren voranzutreiben und die Portierung von Spielen zu vereinfachen.
- Treiber für den Sony PlayStation 5 DualSense Controller 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 Broadcom VK Beschleunigerkarten (z.B. PCIe-Karten Valkyrie und Viper) hinzugefügt, die verwendet werden können, um Operationen zur Verarbeitung von Audio, Video und Bildern sowie Verschlüsselungsoperationen auf ein separates Gerät auszulagern.
- Unterstützung der Lenovo IdeaPad-Plattform hinzugefügt, mit der Möglichkeit, die Dauerladung und die Tastaturbeleuchtung zu steuern. Zudem wurde die Unterstützung des ACPI-Profils der ThinkPad-Plattform mit der Möglichkeit zur Steuerung der Energieverbrauchsmodi sichergestellt. Treiber für das HID-System des Lenovo ThinkPad X1 Tablet Gen 2 hinzugefügt.
- Treiber ov5647 mit Unterstützung für das Kameramodul für Raspberry Pi hinzugefügt.
- Unterstützung für den RISC-V SoC FU740 und die HiFive Unleashed-Plattform hinzugefügt. Außerdem wurde ein neuer Treiber für den Kendryte K210-Chip hinzugefügt.
Quelle: opennet.ru
