Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds die Kernel-Version . Unter den bemerkenswertesten Änderungen: Einschränkung des Imports von Symbolen aus proprietären Modulen in GPL-Module, Beschleunigung der Kontextwechseloperationen durch die Prozessoranweisung FSGSBASE, Unterstützung der Kompression des Kernel-Images mit Zstd, Überarbeitung der Priorisierung von Threads im Kernel, Unterstützung des PRP-Protokolls (Parallel Redundancy Protocol), bandbreitenbewusstes Scheduling im Deadline-Scheduler, vorausschauende Speicherseitenkompression, Capability-Flag CAP_CHECKPOINT_RESTOR, Systemaufruf close_range(), Leistungsteigerung von dm-crypt, Entfernung von Code für 32-Bit Gastsysteme Xen PV, neuer Slab-Speicherverwaltung, Option „rescue“ in Btrfs, Unterstützung von Inline-Verschlüsselung in ext4 und F2FS.
In die neue Version wurden 16074 Korrekturen von 2011 Entwicklern übernommen,
die Patch-Größe beträgt 62 MB (Änderungen betrafen 14548 Dateien, 782155 neue Codezeilen wurden hinzugefügt, 314792 Zeilen wurden gelöscht). Ungefähr 45% aller Änderungen in 5.9
Änderungen stehen im Zusammenhang mit Gerätetreibern, rund 15 % der Änderungen betreffen
beziehen sich auf die Aktualisierung von kodera spezifisch für Hardwarearchitekturen, 13%
gehört zum Netzwerk-Stack, 3% – zu Dateisystemen und 3% zu internen
Subsystemen des Kernels.
:
- Speicher und Systemdienste
- Schutz vor der Verwendung von GPL-Schichten zur Verknüpfung proprietärer Treiber mit Kernelkomponenten, die nur für GPL-lizenzierte Module exportiert werden. Das Flag TAINT_PROPRIETARY_MODULE wird nun in allen Modulen vererbt, die Symbole aus Modulen mit diesem Flag importieren. Wenn ein GPL-Modul versucht, Symbole aus einem nicht-GPL-Modul zu importieren, erbt dieses GPL-Modul das Label TAINT_PROPRIETARY_MODULE und kann nicht auf Kernelkomponenten zugreifen, die nur für GPL-lizenzierte Module verfügbar sind, selbst wenn das Modul zuvor Symbole aus der Kategorie „gplonly“ importiert hat. Eine Rückwärtsblockade (Export nur von EXPORT_SYMBOL_GPL in Modulen, die EXPORT_SYMBOL_GPL importiert haben), die die Funktionsweise proprietärer Treiber beeinträchtigen könnte, wurde nicht implementiert (nur das Flag des proprietären Moduls wird vererbt, jedoch nicht die GPL-Bindung).
- Unterstützung des kcompactd-Mechanismus für Im Hintergrund ermöglicht es, die Anzahl der großen Speicherseiten, die dem Kernel zur Verfügung stehen, zu erhöhen. Vorausichtlich ermöglicht die Hintergrundverpackung mit minimalen Overheadkosten eine Reduzierung der Verzögerungen bei der Zuweisung großer Speicherseiten (huge-page) um das 70-80-fache im Vergleich zu dem zuvor verwendeten Verpackungsmechanismus, der nach Bedarf aktiviert wird (on-demand). Um die Grenzen der externen Fragmentierung, die kcompactd bereitstellt, festzulegen, wurde sysctl vm.compaction_proactiveness hinzugefügt.
- Unterstützung der Kernel-Image-Komprimierung mit dem Algorithmus (zstd).
- Für x86-Systeme wurde die Unterstützung der Prozessoranweisung , die es ermöglicht, den Inhalt der FS/GS-Register aus dem Benutzerspeicher zu lesen und zu ändern, implementiert. Im Kernel wird FSGSBASE verwendet, um die Kontextwechseloperationen zu beschleunigen, indem unnötige MSR-Schreiboperationen für GSBASE vermieden werden. Im Benutzerspeicher ermöglicht es, ohne unnötige Systemaufrufe zur Änderung von FS/GS auszukommen.
- Der Parameter „allow_writes“, der das Ändern der MSR-Register des Prozessors aus dem Benutzerspeicher verbietet und den Zugriff auf den Inhalt dieser Register auf Leseoperationen beschränkt, da das Ändern der MSR zu Problemen führen kann. Standardmäßig ist das Schreiben derzeit nicht verboten, und die Änderung der MSR wird im Protokoll festgehalten, aber in Zukunft ist geplant, den Standardzugriff in den Nur-Lese-Modus zu versetzen.
- In die Schnittstelle für asynchrone Eingabe/Ausgabe wurde die vollständige Unterstützung asynchroner Operationen für gepufferte Lesevorgänge, die keine Einbindung von Kernel-Threads erfordern, hinzugefügt. Die Unterstützung für das Schreiben wird in der nächsten Version erwartet.
- Im I/O-Planer Deadline werden Planungsstrategien unter Berücksichtigung der Bandbreite korrekte Entscheidungen auf asymmetrischen Systemen zu treffen, wie z.B. ARM-Systeme basierend auf den Architekturen und big.LITTLE, die leistungsstarke und weniger leistungsfähige energieeffiziente CPU-Kerne in einem Chip kombinieren. Insbesondere ermöglicht der neue Modus, Planungsinkonsistenzen zu vermeiden, wenn ein langsamer CPU-Kern nicht über die erforderlichen Ressourcen verfügt, um eine Aufgabe fristgerecht auszuführen.
- Das Energieverbrauchsmodell im Kernel (Energy Model Framework) deckt jetzt nicht nur das Verhalten des Energieverbrauchs der CPU ab, sondern auch die Peripheriegeräte.
- Der Systemaufruf close_range() wurde implementiert, der es einem Prozess ermöglicht, einen gesamten Bereich von offenen Dateideskriptioren gleichzeitig zu schließen.
- Aus der Implementierung der Textkonsole und des Treibers fbcon , der die Möglichkeit der programmgesteuerten Rückwärtsblättern von Text (CONFIG_VGACON_SOFT_SCROLLBACK) über den verfügbaren Videoramumfang des VGA-Textmodus hinaus ermöglichte, entfernt.
- ein Algorithmus zur Zuweisung von Prioritäten für Threads innerhalb des Kernels. Die neue Variante sorgt für eine bessere Konsistenz in allen Subsystemen des Kernels bei der Zuweisung von Prioritäten für Echtzeitarbeiten.
- Ein neuer sysctl wurde hinzugefügt, um die Parameter der CPU-Taktfrequenzzuweisung für Echtzeitsysteme zu steuern (z. B. kann das Verhalten bei der Ausführung von Echtzeitarbeiten zur Energieeinsparung beim Wechsel auf Batteriestrom oder in mobilen Systemen dynamisch angepasst werden).
- Die Vorbereitung zur Implementierung der Unterstützung für die Technologie Transparent Huge Pages im Seiten-Cache wurde abgeschlossen.
- Im Mechanismus fanotify wurden neue Flags FAN_REPORT_NAME und FAN_REPORT_DIR_FID implementiert, um Informationen über den übergeordneten Namen und die eindeutige FID-Identifikation bei den Ereignissen von Erstellen, Löschen oder Verschieben von Katalogelementen und nicht kataloggebundenen Objekten zu übertragen.
- Für cgroups wurde ein neuer Slab-Speichercontroller (slab memory controller) implementiert, der bemerkenswerterweise die Zählung von Slab vom Seitenlevel auf die Objektebene des Kernels verlagert, was die gemeinsame Nutzung von Slab-Seiten in verschiedenen cgroups ermöglicht, anstatt separate Slab-Caches für jede cgroup zu reservieren. Der vorgeschlagene Ansatz ermöglicht eine effizientere Nutzung von Slab und verringert den für Slab verwendeten Speicher um 30-45%, reduziert den Gesamtspeicherverbrauch des Kernels erheblich und verringert die Speicherfragmentierung.
- Im Audiosubsystem und , in Übereinstimmung mit den Empfehlungen zur Verwendung inklusiver Terminologie im Linux-Kernel wurde eine Bereinigung von politisch nicht korrekten Begriffen durchgeführt. Der Code wurde von den Verwendungen der Begriffe „slave“, „master“, „blacklist“ und „whitelist“ befreit.
- Virtualisierung und Sicherheit
- Bei der Kernel-Kompilierung mit dem Compiler Clang kann die Option zur automatischen Initialisierung aller Variablen im Stack mit null (CONFIG_INIT_STACK_ALL_ZERO) konfiguriert werden (bei der Kompilierung wird „-ftrivial-auto-var-init=zero“ angegeben).
- Im Seccomp-Subsystem, bei der Verwendung des Modus zur Prozesskontrolle im Benutzermodus, Ersatz in den überwachten Prozess von Dateideskriptoren zur vollständigen Emulation von Systemaufrufen, die zur Erstellung von Dateideskriptoren führen. Diese Funktionalität ist in Systemen mit isolierten Containern und in der Realisierung von Sandboxes für Chrome gefragt.
- Für die Architekturen xtensa und csky wurde die Unterstützung für die Begrenzung von Systemaufrufen über das seccomp-Subsystem hinzugefügt. Für xtensa wurde zusätzlich die Unterstützung für den Audit-Mechanismus implementiert.
- neues Fähigkeit-Flag CAP_CHECKPOINT_RESTORE, das erlaubt, ohne zusätzliche Privilegien auf Funktionen im Zusammenhang mit dem Einfrieren und der Wiederherstellung des Zustands von Prozessen zuzugreifen.
- In GCC 11 wurden alle notwendigen Funktionen realisiert für
das Debugging-Tool KCSAN (Kernel Concurrency Sanitizer), das zur dynamischen Erkennung von Race Conditions im Kernel dient. Somit kann KCSAN jetzt mit in GCC kompilierten Kernen verwendet werden. - Für AMD Zen und neuere CPU-Modelle wurde die Unterstützung der P2PDMA-Technologie hinzugefügt, die es ermöglicht, DMA für die direkte Datenübertragung zwischen dem Speicher zweier an den PCI-Bus angeschlossenen Geräte zu nutzen.
- In dm-crypt wurde ein Modus hinzugefügt, der die Latenzzeit reduziert, indem die kryptographische Datenverarbeitung ohne Verwendung von Worker-Queues durchgeführt wird. Der angegebene Modus ist auch notwendig für die korrekte Arbeit mit Blockgeräten (Geräte mit Bereichen, die sequentiell mit der vollständigen Aktualisierung aller Blockgruppen geschrieben werden müssen). Es wurden Arbeiten zur Verbesserung der Durchsatzrate und zur Reduzierung der Latenzzeit in dm-crypt durchgeführt.
- Der Code zur Unterstützung von 32-Bit-Gastsystemen, die im Paravirtualisierungsmodus unter dem Xen-Hypervisor betrieben werden, wurde entfernt. Benutzer solcher Systeme sollten auf die Verwendung von 64-Bit-Kernen in Gastsystemen umsteigen oder anstelle von Paravirtualisierung (PV) die Modi der vollständigen (HVM) oder kombinierten (PVH) Virtualisierung verwenden.
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Btrfs-Dateisystem wurde die Mount-Option „rescue“ eingeführt, die den Zugang zu allen anderen Wiederherstellungsoptionen vereinheitlicht. Die Unterstützung für die Optionen „alloc_start“ und „subvolrootid“ wurde entfernt, und die Option „inode_cache“ wurde für veraltet erklärt. Es wurden Leistungsoptimierungen durchgeführt, insbesondere das fsync()-Operationen deutlich beschleunigt. die Möglichkeit, alternative Prüfzifferntypen anders als CRC32c zu verwenden.
- Die Möglichkeit der Verwendung von Inline-Verschlüsselung (Inline Encryption) in den Dateisystemen ext4 und F2FS, für die eine Montageoption "inlinecrypt" vorgesehen ist. Der Modus der Inline-Verschlüsselung ermöglicht es, die in den Speichercontroller integrierten Verschlüsselungsmechanismen zu nutzen, die eine transparente Verschlüsselung und Entschlüsselung von Ein- und Ausgaben ermöglichen.
- In XFS Asynchrone Rücksetzung von Inodes (flush), die die Prozesse während der Speicherbereinigung nicht blockiert. Ein langjähriges Problem mit Quoten wurde behoben, bei dem Warnungen über das Überschreiten der weichen Grenzen und der Einschränkungen für die Anzahl von Inodes nicht korrekt überwacht wurden. Die Implementierung der DAX-Unterstützung für ext4 und xfs wurde vereinheitlicht.
- In Ext4 Vorausschauendes Laden der Bitmaps zur Blockverteilung. In Kombination mit der Einschränkung des Scannens von nicht initialisierten Gruppen hat diese Optimierung die Zeit für das Mounten sehr großer Partitionen verkürzt.
- In F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, das die Verwendung von TRIM-/discard-Befehlen zum physischen Löschen der angegebenen Daten in einer Datei ermöglicht, beispielsweise zur Entfernung von Zugriffsschlüsseln ohne verbleibende Daten auf dem Speicher.
In F2FS ebenfalls ein neuer Modus der Müllsammlung GC_URGENT_LOW, der aggressiver arbeitet, indem er einige Kontrollen des Leerlaufs (idle) vor dem Start des Müllsammlers ausschließt. - In bcache wurde die Größe von bucket_size für Extents von 16 auf 32 Bit erhöht, um die Möglichkeit der Anwendung auf den Cache von zonierten Geräten vorzubereiten.
- In das SCSI-Subsystem wurde die Möglichkeit der Verwendung von Inline-Verschlüsselung auf Basis integrierter Hardware-Verschlüsselungsfunktionen, die von UFS-Controllern bereitgestellt werden, hinzugefügt ().
- Ein neuer Kernel-Befehlszeilenparameter "debugfs" wurde hinzugefügt, um die Verfügbarkeit des gleichnamigen Pseudo-Dateisystems zu steuern.
- Im NFSv4.2-Client wurden erweiterte Dateiattribute (xattr) unterstützt.
- In dm-dust eine Schnittstelle zur sofortigen Ausgabe aller identifizierten Bad Blocks auf der Festplatte ("dmsetup message dust1 0 listbadblocks").
- Für md/raid5 wurde der Parameter /sys/block/md1/md/stripe_size zur Anpassung der STRIPE-Blockgröße hinzugefügt.
- Für NVMe-Speichergeräte wurde die Unterstützung von Befehlen zum Zonieren von Speicher (ZNS, NVM Express Zoned Namespace) hinzugefügt, die es ermöglichen, den Speicherbereich in Zonen zu unterteilen, die Gruppen von Blöcken bilden, um die Datenplatzierung auf dem Speicher besser zu steuern.
- Netzwerksubsystem
- In Netfilter Möglichkeit der Paketverweigerung vor der Überprüfung der Weiterleitung (der Ausdruck REJECT kann jetzt nicht nur in den Ketten INPUT, FORWARD und OUTPUT, sondern auch in der PREROUTING-Phase für icmp und tcp verwendet werden).
- In nftables Möglichkeit zur Überwachung von Ereignissen, die mit der Änderung von Konfigurationen verbunden sind.
- In nftables im netlink-API Unterstützung anonymer Ketten, deren Namen dynamisch vom Kernel vergeben werden. Beim Löschen der zugehörigen Regel wird auch die anonyme Kette automatisch gelöscht.
- In BPF wurde Unterstützung für Iteratoren hinzugefügt, um Elemente von assoziativen Arrays (map) ohne Kopieren der Daten in den Benutzerspeicher zu durchlaufen, zu filtern und zu ändern. Iteratoren können für TCP- und UDP-Sockets verwendet werden, was es BPF-Programmen ermöglicht, Listen offener Sockets zu durchlaufen und benötigte Informationen daraus zu extrahieren.
- Ein neuer Typ von BPF-Programmen BPF_PROG_TYPE_SK_LOOKUP wurde hinzugefügt, der ausgeführt wird, wenn der Kernel nach einem geeigneten hörenden Socket für eine eingehende Verbindung sucht. Mit einem solchen BPF-Programm können Handler erstellt werden, die Entscheidungen darüber treffen, mit welchem Socket die Verbindung verknüpft werden soll, ohne an den Systemaufruf bind() gebunden zu sein. Beispielsweise kann eine Zuordnung eines Sockets zu einem Adress- oder Portbereich eingerichtet werden. Außerdem wurde in bpf_setsockopt() die Unterstützung für das Flag SO_KEEPALIVE hinzugefügt und die Möglichkeit zur Einrichtung von BPF_CGROUP_INET_SOCK_RELEASE-Handlern realisiert, die beim Freigeben des Sockets aufgerufen werden.
- Unterstützung für das Protokoll (Parallel Redundancy Protocol), das es ermöglicht, auf Basis von Ethernet einen nahtlosen Wechsel zu einem Backup-Kanal im Falle eines Ausfalls eines Netzwerkkomponenten zu realisieren.
- Im Stack mac80211 Unterstützung für das vierstufige Aushandlungsverfahren WPA/WPA2-PSK im Access-Point-Modus.
- Die Möglichkeit wurde hinzugefügt, den Scheduler qdisc (queuing discipline) standardmäßig auf den Algorithmus FQ-PIE (Flow Queue PIE) einzustellen, der darauf abzielt, die negativen Auswirkungen von Zwischenpufferung von Paketen in grenzwertigen Netzgeräten (bufferbloat) in Kabelmodemnetzwerken zu verringern.
- Neue Funktionen in MPTCP (MultiPath TCP), eine Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen gleichzeitig über mehrere Routen über verschiedene Netzwerk-Schnittstellen zu realisieren, die an unterschiedliche IP-Adressen gebunden sind. Unterstützung für syn cookie, DATA_FIN, automatische Puffereinstellungen, Socket-Diagnose und die Verwendung der Flags REUSEADDR, REUSEPORT und V6ONLY in setsockopt wurde hinzugefügt.
- Für virtuelle Routing-Tabellen VRF (Virtual Routing and Forwarding), die den Betrieb mehrerer Routing-Domänen auf einem System ermöglichen, wurde der Modus „strict“ implementiert. In diesem Modus kann die virtuelle Tabelle nur mit einer Routing-Tabelle assoziiert werden, die nicht in anderen virtuellen Tabellen verwendet wird.
- Im drahtlosen Treiber ath11k wurde die Unterstützung für die Frequenz 6GHz und .
- Ausrüstung
- Der Code zur Unterstützung der UniCore-Architektur, die im Mikroprozessorzentrum der Peking-Universität entwickelt und 2011 in den Linux-Kernel aufgenommen wurde, wurde entfernt. Diese Architektur wird seit 2014 nicht mehr unterstützt und hat keine Unterstützung in GCC.
- Für die RISC-V-Architektur wurde Unterstützung für (debugfs-Schnittstelle zur Analyse der Codeabdeckung des Kernels), kmemleak (System zur Erkennung von Speicherlecks), Stackschutz, Sprungmarken und tickless-Operationen (signalunabhängige Zeitschaltbarkeit des Multitasking).
- Für die PowerPC-Architektur wurde Unterstützung für Warteschlangen für Spinlock implementiert, was die Leistung in Konfliktsituationen erheblich verbessert hat.
- Für die Architekturen ARM und ARM64 wurde standardmäßig der Mechanismus zur Regelung der Prozessorgeschwindigkeit aktiviert, (cpufreq governor), der zur Entscheidungsfindung über die Änderung der Frequenz direkt Informationen vom Task-Scheduler nutzt und sofort auf cpufreq-Treiber zugreifen kann, um die Frequenz sofort anzupassen und die CPU-Leistung an die aktuelle Last anzupassen.
- Im DRM-Treiber i915 für Intel-Grafikkarten wurde Unterstützung für Chips auf Basis der Mikroarchitektur hinzugefügt und eine erste Unterstützung für diskrete Karten .
- wurde implementiert. Der Treiber amdgpu unterstützt jetzt zunächst die AMD GPU (Navy Flounder) und (Sienna Cichlid). Unterstützung für die Video-Encoding- und Decoding-Beschleunigung UVD/VCE für GPUs der Southern Islands (Radeon HD 7000) wurde hinzugefügt.
Eine Eigenschaft zur Drehung der Anzeige um 90, 180 oder 270 Grad wurde hinzugefügt.Es ist interessant, dass der Treiber für AMD-GPUs Der größte Treiber im Kern — er umfasst etwa 2,71 Millionen Codezeilen, was etwa 10 % der Gesamtgröße des Kerns (27,81 Millionen Zeilen) entspricht. Davon entfallen 1,79 Millionen Zeilen auf automatisch generierte Header-Dateien mit Daten für GPU-Register, während C-Code 366.000 Zeilen ausmacht (zum Vergleich: Der Intel i915-Treiber umfasst 209.000 Zeilen und Nouveau 149.000).
- die anfängliche Unterstützung für die GPU NVIDIA GA100 auf der Basis der Mikroarchitektur Ampere hinzugefügt. Unterstützung der frame-by-frame Integritätsprüfung mittels (Cyclic Redundancy Checks) in den Display-Treibern von NVIDIA GPUs. Die Implementierung basiert auf der von NVIDIA bereitgestellten Dokumentation.
- Treiber für LCD-Panels hinzugefügt: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 und Xingbangda XBD599.
- Im ALSA-Audiosubsystem wurde Unterstützung für ein neues Gerät zur Steuerung der Hintergrundbeleuchtung der Mikrofonaktivierungstasten und zur Stummschaltung hinzugefügt, ebenso wie Unterstützung für neue Hardware, einschließlich des Controllers .
- Unterstützung von ARM-Plattformen, Geräten und Plattformen hinzugefügt: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (verwendet in Sony Xperia 10, 10 Plus, XA2, XA2 Plus und XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, fünf neue Boards basierend auf NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Gleichzeitig hat die lateinamerikanische Free Software Foundation
Variante — , bereinigt von Firmware-Elementen und Treibern, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Verwendung durch den Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern für WiFi rtw8821c und MediaTek SoC mt8183 deaktiviert. Der Code zur Bereinigung von Blobs in Treibern und Subsystemen von Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) und x86 Touchscreen wurde aktualisiert.
Quelle: opennet.ru
