Nach zwei Monaten der Entwicklung stellte Linus Torvalds Release des Kernels . Zu den auffälligsten Änderungen gehören: eine neue Schnittstelle für asynchronen I/O io_uring, die Möglichkeit, NVDIMM als RAM zu verwenden, Unterstützung für Shared Virtual Memory in Nouveau, Unterstützung für skalierbares Monitoring von sehr großen Dateisystemen über fanotify, die Möglichkeit, die Zstd-Komprimierungsstufen in Btrfs einzustellen, einen neuen cpuidle-Handler TEO, die Implementierung von Systemaufrufen zur Lösung des Jahres 2038-Problems, die Möglichkeit, von Geräten des device-mapper ohne initramfs zu booten, das LSM-Modul SafeSetID, Unterstützung für kombinierte Live-Patches.
:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Es wurde eine neue Schnittstelle für asynchronen I/O implementiert — , die bemerkenswert ist durch die Unterstützung von I/O-Polling und die Möglichkeit, sowohl mit Pufferung als auch ohne Pufferung zu arbeiten. Erinnern Sie sich daran, dass der zuvor angebotene Mechanismus für asynchronen I/O "aio" keine gepufferte I/O unterstützte, nur im O_DIRECT-Modus (ohne Pufferung und um den Cache herum) funktionierte, Probleme mit Blockierungen aufgrund von Warteschlangen bei der Verfügbarkeit von Metadaten hatte und hohe Overheads aufgrund der Datenkopierung im Speicher zeigte.
Im Rahmen der API
Die io_uring-Entwickler haben versucht, die Mängel der alten aio-Schnittstelle zu beseitigen. Dies führt zu io_uring steht in sehr engem Zusammenhang mit und übertrifft libaio erheblich bei der Arbeit mit aktivem Polling. Für die Verwendung von io_uring in Endanwendungen, die im Benutzerspeicher arbeiten, wurde die Bibliothek , die eine hochgradige Bindung an die Kernschnittstelle bietet, erstellt. - Im Ereignisverfolgungsmechanismus der FS fanotify() gibt es Unterstützung zur Verfolgung von Änderungen am Superblock und an der Struktur (Ereignisse wie Erstellen, Löschen und Verschieben von Verzeichnissen). Die vorgestellten Funktionen helfen, Skalierungsprobleme zu lösen, die bei der Erstellung rekursiver Änderungsverfolgen in sehr großen FS mit dem inotify-Mechanismus auftreten (Änderungen an dirent konnten zuvor nur über inotify verfolgt werden, aber
die Effizienz bei der rekursiven Verfolgung großer verschachtelter Verzeichnisse ließ zu wünschen übrig). Nun kann eine solche Überwachung effizient über fanotify durchgeführt werden; - Im Dateisystem Btrfs Möglichkeit zur Einstellung des Komprimierungsgrades für den zstd-Algorithmus, der als optimaler Kompromiss zwischen dem schnellen, aber ineffizienten lz4 und dem langsamen, aber gut komprimierenden xz betrachtet werden kann. Ähnlich wie bei der vorherigen Möglichkeit, den Komprimierungsgrad beim Einsatz von zlib für zstd festzulegen, wurde die Unterstützung für die Mount-Option „-o compress=zstd:level“ hinzugefügt. Bei Tests erzielte die niedrigste erste Stufe eine Datenkompression von 2,658-mal bei einer Komprimierungsgeschwindigkeit von 438,47 MB/s, einer Dekomprimierungsgeschwindigkeit von 910,51 MB/s und einem Speicherverbrauch von 780 MB, während die maximal höchste Stufe 3,126-mal erreichte, jedoch mit einer Komprimierungsgeschwindigkeit von 37,30 MB/s, einer Dekomprimierung von 878,84 MB/s und einem Speicherverbrauch von 2547 MB.
- Die Möglichkeit, von einem Dateisystem, das auf einem device-mapper-Gerät gehostet wird, ohne die Verwendung von initramfs zu booten. Ab dieser aktuellen Kernel-Version kann das device-mapper-Gerät direkt im Bootprozess verwendet werden, beispielsweise als Partition mit dem Root-Dateisystem. Die Konfiguration der Partition erfolgt über den Bootparameter „dm-mod.create“. Zu den für das Booten zugelassenen device-mapper-Modulen gehören: „crypt“, „delay“, „linear“, „snapshot-origin“ und „verity“.
- Im Flash-Speichersystem F2FS wurde das Flag F2FS_NOCOW_FL hinzugefügt, das es ermöglicht, den Copy-on-Write-Modus für eine bestimmte Datei zu deaktivieren;
- Das Dateisystem wurde aus dem Kern entfernt , das eine Variante von ext2 darstellt, die für die Arbeit mit objektbasierten Speichersystemen OSD (Object-based Storage Device) angepasst wurde. Auch die Unterstützung des SCSI-Protokolls für solche Objektspeichergeräte wurde entfernt;
- Es wurde eine neue Schnittstelle für asynchronen I/O implementiert — , die bemerkenswert ist durch die Unterstützung von I/O-Polling und die Möglichkeit, sowohl mit Pufferung als auch ohne Pufferung zu arbeiten. Erinnern Sie sich daran, dass der zuvor angebotene Mechanismus für asynchronen I/O "aio" keine gepufferte I/O unterstützte, nur im O_DIRECT-Modus (ohne Pufferung und um den Cache herum) funktionierte, Probleme mit Blockierungen aufgrund von Warteschlangen bei der Verfügbarkeit von Metadaten hatte und hohe Overheads aufgrund der Datenkopierung im Speicher zeigte.
- Virtualisierung und Sicherheit
- In prctl() wurde die Option PR_SPEC_DISABLE_NOEXEC hinzugefügt, um die spekulative Ausführung von Anweisungen für den gewählten Prozess zu steuern. Diese neue Option ermöglicht es, die spekulative Ausführung selektiv für Prozesse zu deaktivieren, die potenziell anfällig für Spectre-Angriffe sein könnten. Die Sperre bleibt bis zum ersten Aufruf von exec() in Kraft;
- Ein LSM-Modul wurde implementiert , das es Systemdiensten ermöglicht, Benutzer sicher zu verwalten, ohne Privilegien zu erhöhen (CAP_SETUID) und ohne die Berechtigungen des Root-Benutzers zu erhalten. Die Zuweisung von Privilegien erfolgt durch die Definition von Regeln in securityfs, die auf einer Whitelist zulässiger Bindungen basieren (in der Form „UID1:UID2“);
- Niedrigstufige Änderungen wurden hinzugefügt, die für die stapelweise Organisation des LSM-Sicherheitsmodul-Loadings erforderlich sind. Eine Kernel-Startoption "lsm" wurde eingeführt, die steuert, welche Module geladen werden und in welcher Reihenfolge.
- Die Auditsubsystem unterstützt nun Dateinamensräume.
- Die Funktionen des GCC-Plugins structleak ermöglichen es, potenzielle Speicherlecks zu blockieren. Die Initialisierung aller Variablen erfolgt jetzt durch den Bezug über den Stack.
- Netzwerksubsystem
- Für Sockets gibt es eine neue Option "SO_BINDTOIFINDEX", die ähnlich wie
"SO_BINDTODEVICE" ist, jedoch den Index des Netzwerkinterfaces anstelle des Namens als Argument akzeptiert. - Im mac80211-Stack wurde die Möglichkeit hinzugefügt, einem Gerät mehrere BSSIDs (MAC-Adressen) zuzuweisen. Im Rahmen des Projekts zur Leistungsoptimierung von WiFi wurde im mac80211-Stack die Berücksichtigung der Verteilung der Übertragungszeit eingeführt, sowie die Möglichkeit, die Übertragungszeit zwischen mehreren Stationen zu verteilen (im Access-Point-Betrieb wird weniger Zeit für langsame drahtlose Stationen zugewiesen, anstatt die Zeit gleichmäßig zwischen allen Stationen zu verteilen);
- Ein Mechanismus hinzugefügt:«, der Benachrichtigungen bei Problemen mit der Netzwerkschnittstelle bereitstellt;
- Für Sockets gibt es eine neue Option "SO_BINDTOIFINDEX", die ähnlich wie
- Speicher und Systemdienste
- sichere Signalübertragung, die eine Wiederverwendung von PID berücksichtigt. Beispielsweise konnte bei einem vorherigen kill-Befehl eine Situation auftreten, in der der Ziel-PID unmittelbar nach dem Senden des Signals durch das Beenden des Prozesses freigegeben und von einem anderen Prozess übernommen wurde, wodurch das Signal an einen anderen Prozess gesendet wurde. Um solche Situationen zu vermeiden, wurde ein neuer Systemaufruf pidfd_send_signal hinzugefügt, der Dateideskriptoren aus /proc/pid verwendet, um eine stabile Bindung an den Prozess zu gewährleisten. Selbst wenn der PID während der Bearbeitung des Systemaufrufs erneut verwendet wird, bleibt der Dateideskriptor unverändert und kann sicher verwendet werden, um das Signal an den Prozess zu senden;
- die Möglichkeit, persistente Speichergeräte (persistent memory, z.B. ) als RAM. Bisher wurden solche Geräte im Kernel als Speichergeräte unterstützt, aber jetzt können sie auch als zusätzlichen Arbeitsspeicher verwendet werden. Diese Möglichkeit wurde umgesetzt, um den Wünschen der Nutzer nachzukommen, die bereit sind, eine geringere Leistung zu akzeptieren und das standardisierte API zur Speichermanagement im Linux-Kernel anstelle der vorhandenen Speichersysteme im Benutzerspeicher, die über mmap für das dax-Dateisystem arbeiten, zu nutzen;
- Ein neuer CPU-Leerlauf-Handler (cpuidle) wurde hinzugefügt, der regelt, wann die CPU in tiefere Energiesparmodi versetzt werden kann. Je tiefer der Modus, desto größer die Einsparungen, aber auch die Zeit, die benötigt wird, um aus dem Modus zurückzukehren – TEO (Timer Events Oriented Governor). Bisher gab es zwei cpuidle-Handler – "menu" und "ladder", die sich in ihrer Heuristik unterscheiden. Der Handler "menu" hat bekannte Probleme mit der Annahme heuristischer Entscheidungen, weshalb beschlossen wurde, einen neuen Handler zu entwickeln. TEO positioniert sich als Alternative zum Handler "menu" und ermöglicht eine höhere Leistung bei gleich bleibendem Energieverbrauch.
Der neue Handler kann über den Bootparameter "cpuidle.governor=teo" aktiviert werden; - Im Rahmen der Maßnahmen zur Behebung , das durch das Überlaufen des 32-Bit-Typs time_t verursacht wird, wurden Systemaufrufe integriert, die für 32-Bit-Architekturen 64-Bit-Zeitstempel anbieten. Dadurch kann die 64-Bit-Struktur time_t nun auf allen Architekturen eingesetzt werden. Ähnliche Änderungen wurden auch im Netzwerksubsystem für die Optionen von Netzwerksockets umgesetzt;
- In das Live-Patching-System die Funktion 'Atomic Replace' für die atomare Anwendung einer Reihe von Änderungen an einer Funktion. Diese Funktion ermöglicht es, gebündelte Patches zu verteilen, die mehrere Änderungen gleichzeitig abdecken, anstelle des komplexen Prozesses des schrittweisen Live-Patchings in einer festen Reihenfolge. Früher musste jede folgende Änderung auf dem Zustand der Funktion nach der vorherigen Änderung basieren, nun ist es möglich, mehrere Änderungen zu verbreiten, die an einem einzigen Ausgangszustand gebunden sind (d.h. die Betreuer können einen einzigen gebündelten Patch zur Basis des Kernels unterstützen, anstatt eine Kette von voneinander abhängigen Patches zu haben);
- veraltet ist die Unterstützung des Executable-File-Formats a.out und
Der Code zur Erstellung von Kern-Dateien im a.out-Format befindet sich in einem veralteten Zustand. Das a.out-Format wird seit langem nicht mehr auf Linux-Systemen verwendet, und die Generierung von a.out-Dateien wird von modernen Werkzeugen in den Standardkonfigurationen für Linux nicht mehr unterstützt. Außerdem kann der Loader für a.out-Dateien vollständig im Benutzerspeicher implementiert werden. - Im Verifizierungsmechanismus für BPF-Programme wurde die Möglichkeit hinzugefügt, nicht verwendeten Code zu identifizieren und zu entfernen. Das Kernel enthält außerdem Patches mit Unterstützung für Spinlocks in der BPF-Subsystem, die erweiterte Möglichkeiten zur Steuerung der parallelen Ausführung von BPF-Programmen bieten.
- Ausrüstung
- Im Nouveau-Treiber Unterstützung für heterogenes Speichermanagement, das CPU und GPU den Zugriff auf gemeinsame synchronisierte Speicherbereiche ermöglicht. Das System für shared virtual memory (SVM) wird auf Basis des HMM-Subsystems (Heterogeneous memory management) implementiert, welches Geräte mit eigenen Speichermanagement-Einheiten (MMU, memory management unit) berücksichtigt, die auf den Hauptspeicher zugreifen können. Mithilfe von HMM kann ein gemeinsamer Adressraum zwischen GPU und CPU eingerichtet werden, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann. Die SVM-Unterstützung ist derzeit nur für GPUs der Pascal-Familie aktiviert, obwohl Unterstützung auch für die GPUs Volta und Turing bereitgestellt wird. Darüber hinaus in Nouveau neues ioctl zur Verwaltung der Migration von Prozessspeicherbereichen in den GPU-Speicher;
- Im DRM-Treiber von Intel für GPUs Skylake und neuer (gen9+) ist standardmäßig der fastboot-Modus aktiviert, der unnötige Moduswechsel während des Bootvorgangs ausschließt. Geräte-IDs basierend auf den Mikroarchitekturen Coffelake und Ice Lake. Für Coffelake-Chips Unterstützung für GVT (). Für virtuelle GPUs Unterstützung für VFIO EDID. Für LCD-Panels MIPI/DSI Unterstützung für ACPI/PMIC-Elemente. neue TV-Modi 1080p30/50/60 TV;
- Im amdgpu-Treiber wurde die Unterstützung für die GPU Vega10/20 BACO hinzugefügt. Es wurden Energiemanagement-Funktionen für Vega 10/20 sowie Kühlersteuerungstabellen für Vega 10 implementiert. Neue PCI-Geräte-IDs für die GPU Picasso wurden hinzugefügt. Benutzeroberfläche zur Verwaltung geplanter Abhängigkeiten zur Vermeidung von Deadlocks;
- DRM/KMS-Treiber für die Beschleunigung von Bildschirmoperationen (Mali D71);
- Unterstützung für Bildschirm-Panels von Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 und Kingdisplay kd097d04 hinzugefügt;
- Unterstützung für die Audiocodecs Rockchip RK3328, Cirrus Logic CS4341 und CS35L36, MediaTek MT6358, Qualcomm WCD9335 und Ingenic JZ4725B sowie die Audio-Plattform Mediatek MT8183 hinzugefügt;
- Unterstützung für NAND-Controller Flash STMicroelectronics FMC2, Amlogic Meson hinzugefügt;
- Unterstützung für Beschleuniger für die Hardware-Systeme Habana AI hinzugefügt;
- Unterstützung für Gigabit-Ethernet-Controller NXP ENETC und drahtlose Schnittstellen MediaTek MT7603E (PCIe) und MT76x8 hinzugefügt.
Gleichzeitig der Lateinamerikanische Freie Software-Fonds
Variante ist gut gelungen. — , bereinigt von Firmware- und Treiberelementen, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung durch den Hersteller eingeschränkt ist. In dieser neuen Version wurde das Laden von Blobs in den Treibern mt7603 und goya deaktiviert. Der Code zum Bereinigen von Blobs in den Treibern und Subsystemen wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk und touchscreen_dmi wurde aktualisiert. Die Bereinigung von Blobs im Firmware-Bootloader lantiq xrx200 wurde aufgrund seiner Entfernung aus dem Kernel eingestellt.
Quelle: opennet.ru
