Nach zwei Monaten der Entwicklung stellte Linus Torvalds Release des Kernels . Zu den bemerkenswertesten Änderungen gehören der Fall-unabhängige Betrieb von Ext4, separate Systemaufrufe für das Einhängen von Dateisystemen, Treiber für die GPUs Mali 4xx/6xx/7xx, die Möglichkeit zur Verarbeitung von Änderungen der sysctl-Werte in BPF-Programmen, das Device-Mapper-Modul dm-dust, Schutz vor MDS-Angriffen, Unterstützung von Sound Open Firmware für DSP, Leistungsoptimierung von BFQ und die Überarbeitung der PSI (Pressure Stall Information)-Subsystems für die Verwendung in Android.
In die neue Version wurden 15.100 Korrekturen von 1.882 Entwicklern integriert,
die Patchgröße beträgt 62 MB (Änderungen betreffen 30.889 Dateien, 625.094 Zeilen Code wurden hinzugefügt und 531.864 Zeilen entfernt). Etwa 45% aller in 5.2
Änderungen stehen im Zusammenhang mit Geräten, etwa 21% der Änderungen beziehen sich auf spezifische Hardwarearchitektur.
12% der Änderungen betreffen die Kernsubsysteme. 12,4% aller Änderungen wurden von Intel vorbereitet, 6,3% von Red Hat, 5,4% von Google, 4,0% von AMD, 3,1% von SUSE, 3% von IBM, 2,7% von Huawei, 2,7% von Linaro, 2,2% von ARM, 1,6% von Oracle.
verknüpft mit dem Netzwerk-Stack, 3% – Dateisystemen und 3% mit interne
Kernsubsystemen. 12,4 % aller Änderungen wurden von Intel vorbereitet, 6,3 % von Red Hat, 5,4 % von Google, 4,0 % von AMD, 3,1 % von SUSE, 3 % von IBM, 2,7 % von Huawei, 2,7 % von Linaro, 2,2 % von ARM, 1,6 % von Oracle.
:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Für Ext4 wurde hinzugefügt Die Groß- und Kleinschreibung in Dateinamen wird jetzt unabhängig behandelt. Dies wird aktiviert, wenn man bestimmte leere Verzeichnisse mit dem neuen Attribut „+F“ (EXT4_CASEFOLD_FL) verknüpft. Wird dieses Attribut auf ein Verzeichnis gesetzt, werden alle Operationen mit Dateien und Unterverzeichnissen darin ohne Beachtung der Groß- und Kleinschreibung durchgeführt. Dabei wird die Schreibweise bei Such- und Öffnungsoperationen ignoriert, was bedeutet, dass Dateien wie Test.txt, test.txt und test.TXT in diesen Verzeichnissen als identisch betrachtet werden. Standardmäßig bleibt das Dateisystem jedoch groß- und kleinschreibungsempfindlich, mit Ausnahme von Verzeichnissen mit dem Attribut „chattr +F“;
- Die Funktionen zur Verarbeitung von UTF-8-Zeichen in Dateinamen wurden vereinheitlicht und kommen bei Vergleichs- und Normalisierungsoperationen von Zeichenfolgen zum Einsatz;
- In XFS wurde eine Infrastruktur zur Überwachung des Zustands des Dateisystems hinzugefügt sowie ein neuer ioctl-Befehl zum Anfordern des Betriebsstatus. Eine experimentelle Möglichkeit zur Durchführung eines Online-Scans der Superblock-Zähler wurde implementiert.
- Ein neues Device-Mapper-Modul wurde hinzugefügt:«, das das Auftreten von Badblocks auf dem Medium oder Lese-Fehler vom Disk simuliert. Das Modul ermöglicht die Vereinfachung von Debugging und Testing von Anwendungen und verschiedenen Speichersystemen unter Bedingungen möglicher Ausfälle;
- deutliche Leistungssteigerung des BFQ-I/O-Schedulers. Bei hoher I/O-Last führen die vorgenommenen Optimierungen zu einer Reduzierung der Zeiten solcher Vorgänge wie dem Starten von Anwendungen um bis zu 80%;
- Eine Reihe von Systemaufrufen zum Einbinden von Dateisystemen wurde hinzugefügt: , , , , und . Diese Systemaufrufe ermöglichen es, die verschiedenen Phasen der Einbindung (Superblock behandeln, Informationen zum Dateisystem abrufen, einbinden, an einen Einbindungspunkt anhängen) separat zu verarbeiten, die zuvor über den allgemeinen Systemaufruf mount() durchgeführt wurden. Die getrennten Aufrufe ermöglichen es, komplexere Einbindungsszenarien durchzuführen und Vorgänge wie die Neukonfiguration des Superblocks, das Aktivieren von Optionen, das Ändern des Einbindungspunkts und das Verschieben in einen anderen Namensraum separat durchzuführen. Darüber hinaus ermöglicht die separate Verarbeitung eine genaue Bestimmung der Ursachen für Fehlercodes und die Festlegung mehrerer Quellen für mehrschichtige Dateisysteme wie overlayfs.
- In die Schnittstelle für asynchrones I/O io_uring wurde eine neue Operation IORING_OP_SYNC_FILE_RANGE hinzugefügt, die Aktionen ausführt, die dem Systemaufruf entsprechen, sowie die Möglichkeit implementiert, eventfd mit io_uring zu registrieren und Benachrichtigungen über den Abschluss von Operationen zu erhalten.
- Für das Dateisystem CIFS wurde ioctl FIEMAP hinzugefügt, das eine effiziente Zuordnung von Extents ermöglicht, sowie Unterstützung für die Modi SEEK_DATA und SEEK_HOLE.
- In der FUSE-Subsystem API zur Verwaltung von Daten-Caching;
- In Btrfs wurde die Implementierung von qgroups optimiert und die Geschwindigkeit von fsync für Dateien mit mehreren harten Links erhöht. Der Code zur Überprüfung der Datenintegrität wurde verbessert, sodass mögliche Beschädigungen von Informationen im Arbeitsspeicher vor dem Speichern auf der Festplatte berücksichtigt werden;
- In CEPH wurde die Unterstützung für den Export von Snapshots über NFS hinzugefügt;
- Die Implementierung des NFSv4-Mounts im «soft»-Modus wurde verbessert. Wenn ein Zugriffsfehler auf den Server im «soft»-Modus auftritt, wird sofort ein Fehlercode zurückgegeben, während im «hard»-Modus die Kontrolle bis zur Wiederherstellung der Verfügbarkeit des FS oder eines Timeouts nicht zurückgegeben wird. In dieser neuen Version wurde die Timeout-Verarbeitung präziser gestaltet, die Wiederherstellung nach einem Ausfall beschleunigt und eine neue Mount-Option «softerr» hinzugefügt, mit der der Fehlercode (ETIMEDOUT) geändert werden kann, der bei Erreichen des Timeouts zurückgegeben wird;
- Im API nfsdcld, das zum Verfolgen des Zustands von NFS-Clients dient, wurde die Möglichkeit geschaffen, den Zustand des Clients durch den NFS-Server nach einem Neustart korrekt zu verfolgen. Damit kann der Demon nfsdcld nun als Handler für nfsdcltrack fungieren;
- Für AFS Byte-Range-Sperrsimulation in Dateien ();
- Virtualisierung und Sicherheit
- Es wurden Maßnahmen zur Behebung von Stellen im Kernel ergriffen, die die Ausführung von Code aus beschreibbaren abgebildeten Speicherbereichen zuließen, was potenzielle Schwachstellen, die bei Angriffe ausgenutzt werden könnten, blockiert.
- Ein neuer Kernel-Befehlszeilenparameter „mitigations=“ wurde hinzugefügt, der eine vereinfachte Möglichkeit bietet, die Aktivierung bestimmter Schutztechniken gegen Schwachstellen beim spekulativen Ausführen von Befehlen in der CPU zu steuern. Die Übertragung von „mitigations=off“ schaltet alle vorhandenen Methoden aus, während der standardmäßig verwendete Modus „mitigations=auto“ den Schutz aktiviert, ohne die Nutzung von Hyper-Threading zu beeinträchtigen. Der Modus „mitigations=auto,nosmt“ schaltet zusätzlich Hyper-Threading ab, falls die Schutzmaßnahme dies erfordert.
- Unterstützung für elektronische digitale Signaturen gemäß GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), von Vitali Chikunov von „Basalt SPO“. In die integrierte TLS-Implementierung wurde Unterstützung für AES128-CCM hinzugefügt. Im Modul crypto_simd wurde Unterstützung für AEAD-Algorithmen integriert;
- In Kconfig eine separate Sektion „Kernel-Härtung“ mit Optionen zur Verbesserung des Kernel-Schutzes. Derzeit sind in der neuen Sektion nur Einstellungen zur Aktivierung der verstärkenden GCC-Plugin-Überprüfungen gesammelt;
- Der Kernel-Code ist fast befreit (ohne return oder break nach jedem case-Block). Es verbleiben 32 von 2311 Fällen ähnlicher switch-Nutzung zu beheben, nach denen beim Zusammenbauen des Kernels der Modus „-Wimplicit-fallthrough“ angewendet werden kann;
- Für die PowerPC-Architektur wurde Unterstützung für hardwareseitige Mechanismen zur Einschränkung unerwünschter Zugriffswege des Kernels auf Daten im Benutzerspeicher implementiert;
- Code zum Blockieren wurde hinzugefügt. MDS-Klasse (Microarchitectural Data Sampling) in Intel-Prozessoren. Die Anfälligkeit des Systems kann über die SysFS-Variable „/sys/devices/system/cpu/vulnerabilities/mds“ überprüft werden. zwei Schutzmodi: einen vollständigen, der aktualisierten Mikrokode erfordert, und einen Umgehungsmodus, der keine vollständige Reinigung der CPU-Puffer beim Übergang zur Benutzer- oder Gastumgebung garantiert. Um die Schutzmodi zu steuern, wurde dem Kernel der Parameter „mds=“ hinzugefügt, der die Werte „full“, „full,nosmt“ (+ Deaktivierung von Hyper-Threads) und „off“ annehmen kann;
- Auf x86-64-Systemen wurde für IRQs, Debugging-Mechanismen und Ausnahmebehandler der „Stack Guard-Page“-Schutz eingeführt. Dabei wird an der Grenze zum Stack ein Seitenbereich eingefügt, dessen Zugriff eine Ausnahme (Page-Fault) auslöst.
- Es wurde eine sysctl-Konfiguration vm.unprivileged_userfaultfd hinzugefügt, die die Verwendung des Systemaufrufs userfaultfd() durch nicht privilegierte Prozesse regelt.
- Netzwerksubsystem
- Unterstützung von IPv6-Gateways für IPv4-Routen. Beispielsweise können Routing-Regeln wie „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0“ angegeben werden.
- Für ICMPv6 wurden die ioctl-Aufrufe icmp_echo_ignore_anycast und icmp_echo_ignore_multicast implementiert, um ICMP ECHO für Anycast und
Multicast-Adressen zu ignorieren. Möglichkeit zur Begrenzung der Intensität der ICMPv6-Paketverarbeitung. - Für das Mesh-Protokoll B.A.T.M.A.N. („Better Approach To Mobile Adhoc Networking“), das die Erstellung dezentraler Netzwerke ermöglicht, bei denen jeder Knoten über Nachbarknoten verbunden ist, Unterstützung der Umwandlung von Multicast in Unicast sowie die Möglichkeit der Steuerung über sysfs.
- In ethtool wurde ein neuer Parameter Fast Link Down hinzugefügt, der die Zeit zur Meldung eines Link-Abschaltereignisses für 1000BaseT verkürzt (unter normalen Bedingungen beträgt die Verzögerung bis zu 750 ms).
- Es wurde Bindungen von Foo-Over-UDP-Tunneln an eine bestimmte Adresse, Netzwerkschnittstelle oder Socket (früher wurde die Bindung nur über eine allgemeine Maske durchgeführt);
- Im Wireless-Stack die Möglichkeit zur Implementierung von Handlern
OWE (Opportunistic Wireless Encryption) im Benutzerspeicher; - Im Netfilter wurde Unterstützung für die Adressfamilie inet zu den nat-Ketten hinzugefügt (jetzt kann eine Regel für die Verarbeitung von IPv4 und IPv6 verwendet werden, ohne dass Regeln für IPv4 und IPv6 getrennt werden müssen);
- In netlink strict für eine strenge Validierung aller Nachrichten und Attribute, bei der eine Überschreitung der erwarteten Attributgröße nicht erlaubt ist und die Hinzufügung zusätzlicher Daten am Ende von Nachrichten verboten ist;
- Speicher und Systemdienste
- Im Systemaufruf clone() wurde das Flag CLONE_PIDFD hinzugefügt, bei dessen Angabe dem übergeordneten Prozess der Dateideskriptor "pidfd" zurückgegeben wird, der mit dem erstellten Kindprozess identifiziert ist. Dieser Dateideskriptor kann beispielsweise verwendet werden, um Signale zu senden, ohne die Gefahr eines Rennens zu befürchten (kurz nach dem Senden eines Signals kann die Ziel-PID aufgrund des Abschlusses des Prozesses freigegeben und von einem anderen Prozess verwendet werden);
- In der zweiten Version von cgroups wurde die Funktionalität des Freezer-Controllers hinzugefügt, mit dem es möglich ist, die Arbeit in einem cgroup anzuhalten und vorübergehend einige Ressourcen (CPU, E/A und potenziell sogar Speicher) für andere Aufgaben freizugeben. Die Steuerung erfolgt über die Steuerdateien cgroup.freeze und cgroup.events im cgroup-Baum. Das Schreiben von 1 in cgroup.freeze friert die Prozesse in der aktuellen cgroup und allen untergeordneten Gruppen ein. Da das Einfrieren einige Zeit in Anspruch nimmt, wird zusätzlich die Datei cgroup.events angeboten, über die man den Abschluss der Operation erfahren kann.
- der Export von Speicherattributen, die an jeden Knoten in sysfs angehängt sind, was es ermöglicht, aus dem Benutzerspace den Charakter der Abwicklung von Speicherseiten in Systemen mit heterogenem Speicher zu bestimmen;
- Das PSI (Pressure Stall Information)-Subsystem wurde verbessert, was es ermöglicht, Informationen über die Wartezeiten beim Erhalt verschiedener Ressourcen (CPU, Arbeitsspeicher, I/O) für bestimmte Aufgaben oder Prozessgruppen in cgroups zu analysieren. Mithilfe von PSI können Anwendungen im Benutzerraum die Systemauslastung und die Art der Verlangsamung präziser einschätzen als mit Load Average. In der neuen Version gibt es Unterstützung für die Anpassung der Sensitivitätsschwellen und die Möglichkeit, den Aufruf poll() zu verwenden, um eine Benachrichtigung über das Auslösen festgelegter Schwellenwerte in einem bestimmten Zeitraum zu erhalten. Diese Funktion ermöglicht es, in Android frühzeitig einen Mangel an Arbeitsspeicher zu überwachen, die Ursachen von Problemen zu identifizieren und unwichtige Anwendungen zu beenden, bevor es für den Benutzer zu spürbaren Problemen kommt. Bei Stresstests haben Monitoring-Tools zur Speicherauslastung auf Basis von PSI zehnmal weniger Fehlalarme im Vergleich zu den Statistiken von vmpressure gezeigt.
- Der Code zur Überprüfung von BPF-Programmen wurde optimiert, sodass große Programme die Überprüfung bis zu 20 Mal schneller durchführen können. Diese Optimierung hat das Limit für die Größe von BPF-Programmen von 4096 auf eine Million Anweisungen erhöht.
- Für BPF-Programme die Möglichkeit, auf globale Daten zuzugreifen, was die Definition globaler Variablen und Konstanten in Programmen ermöglicht;
- Hinzugefügt , das es ermöglicht, Änderungen der sysctl-Parameter aus BPF-Programmen zu steuern;
- Für die MIPS32-Architektur wurde ein JIT-Compiler für die eBPF-VM implementiert;
- Für die 32-Bit-Architektur PowerPC wurde Unterstützung für das Debugging-Tool KASan (Kernel Address Sanitizer) hinzugefügt, das bei der Erkennung von Speicherfehlern hilft;
- Auf x86-64-Systemen wurde die Einschränkung für die Platzierung von Kernabsturz-Dump-Dateien (Crash-Dump) in Speicherbereichen über 896 MB aufgehoben;
- Für die s390-Architektur wurde die Unterstützung für die Randomisierung des Kernel-Adressenraums (KASLR) sowie die Möglichkeit der Verifizierung digitaler Signaturen beim Laden des Kernels über kexec_file_load() implementiert;
- Für die PA-RISC-Architektur wurde die Unterstützung für den Kernel-Debugger (KGDB), Sprungmarken und kprobes hinzugefügt;
- Ausrüstung
- Ein Treiber wurde integriert für die GPU Mali 400/450, die in vielen älteren ARM-basierten Chips verwendet wird. Neuere Mali-GPUs haben den Panfrost-Treiber hinzugefügt, der Chips mit den Mikroarchitekturen Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) und Bifrost (Mali G3x, G5x, G7x) unterstützt;
- Unterstützung für Audiogeräte mit offenen Firmware-Varianten wurde hinzugefügt. (). Trotz der verfügbaren offenen Treiber bleibt der Code der Firmware für Audioprozessoren weiterhin geschlossen und wird in binärer Form bereitgestellt. Das Projekt Sound Open Firmware wurde von Intel entwickelt, um offene Firmware für DSP-Chips zur Audioverarbeitung zu schaffen (später wurde auch Google in die Entwicklung einbezogen). Derzeit wurden im Rahmen des Projekts bereits offene Firmware-Versionen für Audioprozessoren auf Intel-Plattformen wie Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake und IceLake vorbereitet;
- Im Intel-DRM-Treiber (i915) wurde die Unterstützung für Chips
Elkhartlake (Gen11) hinzugefügt. PCI-Identifizierer für Comet Lake-Chips (Gen9) wurden ergänzt. Die Unterstützung für Icelake-Chips wurde stabilisiert, für die ebenfalls zusätzliche PCI-Geräteidentifizierer hinzugefügt wurden.
der asynchrone Wechselmodus zwischen zwei Pufferspeichern im Videospeicher (async flip) während der Schreibvorgänge über mmio, was die Leistung einiger 3D-Anwendungen erheblich steigerte (z. B. erhöhte sich die Leistung im 3DMark Ice Storm-Test um 300-400%). Unterstützung für die Technologie (High-bandwidth Digital Content Protection) zum Verschlüsseln von Videosignalen, die über HDMI übertragen werden; - Im amdgpu-Treiber für die GPU Vega20 unterstützt RAS (Reliability, Availability, Serviceability) und experimentelle Unterstützung des SMU 11-Subsystems, das die Powerplay-Technologie ersetzt. Für die GPU Vega12 unterstützt den BACO-Modus (Bus Active, Chip Off). Erste Unterstützung für XGMI, die Hochgeschwindigkeitsbusverbindung (PCIe 4.0) zur Verbindung von GPUs. Im amdkfd-Treiber wurden die fehlenden Identifikatoren für Karten auf Polaris10-GPU-Basis hinzugefügt;
- Im Nouveau-Treiber wurde die Unterstützung für Karten auf Basis des NVIDIA Turing 117-Chipsatzes (TU117, verwendet in der GeForce GTX 1650) hinzugefügt. In
kconfig Einstellungen zum Deaktivieren veralteter Funktionen, die in den aktuellen Versionen von libdrm nicht mehr verwendet werden; - Im DRM-API und im amdgpu-Treiber wurde Unterstützung für Synchronisierungsobjekte „Timeline“ hinzugefügt, die klassische Sperren überflüssig machen.
- Der vboxvideo-Treiber für das virtuelle GPU VirtualBox wurde aus dem Staging-Zweig in den Hauptzweig übertragen;
- Der aspeed-Treiber für den GFX-Chip SoC ASPEED wurde hinzugefügt;
- Unterstützung für ARM SoCs und Intel Agilex-Platten (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510 hinzugefügt.
ST Micro (stm32mp157a, stm32mp157c), NXP (
Eckelmann ci4x10 (i.MX6DL),i.MX8MM EVK (i.MX8MM),
ZII i.MX7 RPU2 (i.MX7),
ZII SPB4 (VF610),
Zii Ultra (i.MX8M),
TQ TQMa7S (i.MX7Solo),
TQ TQMa7D (i.MX7Dual),
Kobo Aura (i.MX50),
Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).
Gleichzeitig der Lateinamerikanische Freie Software-Fonds
Variante ist gut gelungen. — , bereinigt von Firmware-Elementen und Treibern, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Einsatz vom Hersteller beschränkt ist. Die neue Version beinhaltet das Laden von Dateien
Sound Open Firmware. Das Laden von Blobs in den Treibern
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp und ucsi_ccg wurde deaktiviert. Der Blob-Reinigungs-Code in den Treibern und Subsystemen ixp4xx, imx-sdma, amdgpu, nouveau und goya sowie in der Dokumentation zum Mikrocode wurde aktualisiert. Die Reinigung der Blobs im Treiber r8822be wurde aufgrund seiner Entfernung eingestellt.
Quelle: opennet.ru
