Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds die Kernel-Version . Zu den bemerkenswertesten Änderungen gehören: eine neue Schnittstelle für asynchronen Input/Output io_uring, die Möglichkeit, NVDIMM als RAM zu verwenden, Unterstützung in Nouveau für geteilten virtuellen Speicher, Unterstützung für skalierbares Monitoring sehr großer FS über fanotify, die Möglichkeit, Zstd-Komprimierungsstufen in Btrfs anzupassen, einen neuen cpuidle-Behandler TEO, die Implementierung von Systemaufrufen zur Lösung des Problems des Jahres 2038, die Möglichkeit, von device-mapper-Geräten ohne initramfs zu booten, ein LSM-Modul SafeSetID und die Unterstützung kombinierter Live-Patches.
:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Eine neue Schnittstelle für asynchronen Input/Output wurde implementiert — , die durch Unterstützung von Input/Output-Polling und die Möglichkeit, sowohl mit als auch ohne Pufferspeicherung zu arbeiten, bemerkenswert ist. Es sei daran erinnert, dass der zuvor angebotene Mechanismus für asynchronen Input/Output „aio“ keine gepufferte Eingabe/Ausgabe unterstützte, nur im O_DIRECT-Modus (ohne Pufferung und um den Cache herum) arbeiten konnte, Probleme mit Blockierungen aufgrund des Wartens auf die Verfügbarkeit von Metadaten hatte und erhebliche Overheads aufgrund des Kopierens von Daten im Speicher aufwies.
Im Rahmen der API
io_uring haben die Entwickler versucht, die Mängel des alten aio-Interfaces zu beseitigen. Laut io_uring ist sehr nah an und übertrifft libaio erheblich bei der Arbeit mit aktiviertem Polling. Für die Verwendung von io_uring in Endanwendungen, die im Benutzerspeicher arbeiten, wurde eine Bibliothek vorbereitet, , die eine hochgradige Wrapper über die Schnittstelle des Kernels bietet; - Im Ereignisverfolgungsmechanismus in FS fanotify() wird die Unterstützung für die Verfolgung von Änderungen am Superblock und der Struktur (Ereignisse zum Erstellen, Löschen und Verschieben von Verzeichnissen). Die bereitgestellten Funktionen helfen dabei, Probleme mit der Skalierbarkeit zu lösen, die beim Erstellen von rekursiven Änderungsverfolgungen in sehr großen FS mit dem Mechanismus inotify auftreten (frühere dirent-Änderungen konnten nur über inotify verfolgt werden, aber
die Effizienz unter den Bedingungen rekursiver Verfolgung großer verschachtelter Verzeichnisse ließ zu wünschen übrig). Jetzt kann eine solche Überwachung effektiv über fanotify durchgeführt werden; - In dem Dateisystem Btrfs Die Möglichkeit, die Komprimierungsstufe für den Zstd-Algorithmus einzustellen, der als optimaler Kompromiss zwischen dem schnellen, aber ineffizienten LZ4 und dem langsamen, aber gut komprimierenden XZ betrachtet werden kann. Analog zu früher, als man die Komprimierungsstufe bei der Verwendung von Zlib für Zstd einstellen konnte, wurde die Unterstützung der Montierungsoption „-o compress=zstd:level“ hinzugefügt. Bei den Tests gewährte die erste minimale Stufe eine Datenkomprimierung 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 maximale Stufe 15 eine Kompression von 3,126 Mal, jedoch mit einer Komprimierungsgeschwindigkeit von 37,30 MB/s, einer Dekomprimierung von 878,84 MB/s und einem Speicherverbrauch von 2547 MB aufwies;
- Die Möglichkeit, vom Dateisystem zu booten, das auf einem Gerät des Device-Mappers gespeichert ist, ohne initramfs zu verwenden. Ab der aktuellen Kernelversion kann der Device-Mapper direkt im Bootprozess verwendet werden, zum Beispiel als Partition mit dem Root-Dateisystem. Die Partitionierung erfolgt über den Bootparameter „dm-mod.create“. Zu den erlaubten Bootmodulen des Device-Mappers gehören: „crypt“, „delay“, „linear“, „snapshot-origin“ und „verity“;
- Im Flash-Speicher ausgerichteten Dateisystem 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 , das eine Variante von ext2 darstellt, die für die Verwendung mit Object-based Storage Devices (OSDs) angepasst wurde. Außerdem wurde die Unterstützung des SCSI-Protokolls für solche Objektspeicher entfernt;
- Eine neue Schnittstelle für asynchronen Input/Output wurde implementiert — , die durch Unterstützung von Input/Output-Polling und die Möglichkeit, sowohl mit als auch ohne Pufferspeicherung zu arbeiten, bemerkenswert ist. Es sei daran erinnert, dass der zuvor angebotene Mechanismus für asynchronen Input/Output „aio“ keine gepufferte Eingabe/Ausgabe unterstützte, nur im O_DIRECT-Modus (ohne Pufferung und um den Cache herum) arbeiten konnte, Probleme mit Blockierungen aufgrund des Wartens auf die Verfügbarkeit von Metadaten hatte und erhebliche Overheads aufgrund des Kopierens von Daten im Speicher aufwies.
- Virtualisierung und Sicherheit
- In prctl() wurde die Option PR_SPEC_DISABLE_NOEXEC hinzugefügt, um die spekulative Ausführung von Anweisungen für einen bestimmten Prozess zu steuern. Die neue Option ermöglicht es, die spekulative Ausführung selektiv für Prozesse zu deaktivieren, die potenziell durch eine Spectre-Attacke angegriffen werden können. Die Blockierung gilt bis zum ersten exec()-Aufruf;
- Ein LSM-Modul wurde implementiert , das es Systemdiensten ermöglicht, Benutzer sicher zu verwalten, ohne dabei erweiterte Berechtigungen (CAP_SETUID) und ohne Root-Rechte zu erhalten. Die Zuweisung von Berechtigungen erfolgt durch die Definition von Regeln in securityfs, basierend auf einer Whitelist zulässiger Bindungen (in der Form „UID1:UID2“);
- Niedrigstufige Änderungen wurden hinzugefügt, die für die Stapelorganisation des Ladens von Sicherheitsmodulen (LSM) erforderlich sind. Der Kernel-Ladeparameter "lsm" wurde eingeführt, der steuert, welche Module geladen werden und in welcher Reihenfolge;
- Im Auditsystem wurde die Unterstützung von Dateinamenräumen hinzugefügt;
- Fähigkeiten des GCC-Plugins structleak, das potenzielle Speicherinhalte blockieren kann. Die Initialisierung aller Variablen, die durch Referenzaufruf im Stapel verwendet werden, wurde sichergestellt;
- Netzwerksubsystem
- Für Sockets eine neue Option "SO_BINDTOIFINDEX", ähnlich wie
"SO_BINDTODEVICE", aber die anstelle des Namens des Schnittstellens ein Indexnummer des Netzwerkinterfaces als Argument akzeptiert; - Im mac80211-Stack wurde die Möglichkeit hinzugefügt, mehreren BSSID (MAC-Adressen) einem Gerät zuzuordnen. Im Rahmen des Projekts zur Optimierung der WiFi-Leistung wurde im mac80211-Stack die Berücksichtigung der Verteilung der Sendezeit hinzugefügt und die Möglichkeit, die Sendezeit zwischen mehreren Stationen zu verteilen (im Access Point-Modus wird weniger Zeit für langsame drahtlose Stationen zugewiesen, anstatt die Zeit gleichmäßig auf alle Stationen aufzuteilen);
- Ein Mechanismus "" wurde hinzugefügt, der Benachrichtigungen bei Problemen mit der Netzwerkschnittstelle bereitstellt;
- Für Sockets eine neue Option "SO_BINDTOIFINDEX", ähnlich wie
- Speicher und Systemdienste
- sichere Signalübertragung, die die Möglichkeit der Wiederverwendung von PID berücksichtigt. Beispielsweise konnte bei einem Aufruf von kill zuvor die Situation eintreten, dass direkt nach dem Senden des Signals die Ziel-PID aufgrund des Abschlusses des Prozesses freigegeben und von einem anderen Prozess übernommen wurde, so dass das Signal an einen anderen Prozess übermittelt 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 sicherzustellen. Selbst wenn die PID während der Verarbeitung 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 zur Verwendung von persistenter 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 auf Wunsch der Nutzer implementiert, die bereit sind, eine gewisse Leistungseinbuße in Kauf zu nehmen und den standartmäßigen API zur Speicherverwaltung des Linux-Kernels anstelle der bestehenden Benutzer-Raum-Speichersysteme, die auf mmap für dax-Dateien basieren, zu nutzen.
- Ein neuer CPU-Leerlauf-Handler (cpuidle, der entscheidet, wann die CPU in tiefere Energiesparmodi versetzt werden kann, wobei tiefere Modi — mehr Einsparungen, aber auch mehr Zeit zum Ausstieg aus dem Modus benötigen) wurde hinzugefügt — TEO (Timer Events Oriented Governor). Bisher wurden zwei cpuidle-Handler — 'menu' und 'ladder' — angeboten, die sich hinsichtlich der Heuristik unterscheiden. Der 'menu'-Handler hat bekannte Probleme bei der Annahme heuristischer Entscheidungen, weshalb beschlossen wurde, einen neuen Handler vorzubereiten. TEO wird als Alternative zum 'menu'-Handler positioniert, die eine höhere Leistung bei gleichbleibendem Energieverbrauch ermöglicht.
Der neue Handler kann mit dem Bootparameter 'cpuidle.governor=teo' aktiviert werden; - Im Rahmen der Arbeiten zur Behebung , verursacht durch ein Überlauf des 32-Bit time_t-Typs, wurden Systemaufrufe eingefügt, die für 32-Bit-Architekturen 64-Bit-Zeitnehmer anbieten. Somit kann die 64-Bit-Struktur time_t jetzt auf allen Architekturen verwendet werden. Ähnliche Änderungen wurden auch im Netzwerk-Subsystem für die Optionen von Netzwerksockets vorgenommen;
- In das System des dynamischen Patchens des Kernels (live patching) Die Funktion «Atomic Replace» ermöglicht atomare Änderungen an einer Funktion vorzunehmen. Mit dieser Funktion können konsolidierte Patches, die mehrere Änderungen umfassen, verteilt werden, anstelle des komplexen Prozesses der schrittweisen Anwendung von Live-Patches in einer festgelegten Reihenfolge. Während jede nachfolgende Änderung zuvor vom Zustand der Funktion nach der letzten Änderung abgeleitet werden musste, ist es nun möglich, mehrere Änderungen an einem Ausgangszustand anzubringen (d.h. die Unterstützenden können einen konsolidierten Patch in Bezug auf den Basis-Kernel anstatt einer Kette abhängiger Patches bereitstellen);
- wurde die Unterstützung für das a.out-Format von ausführbaren Dateien und
den Code zur Erstellung von Core-Dateien im a.out-Format, welches im Abandonment-Zustand ist. Das a.out-Format wird seit langem nicht mehr auf Linux-Systemen verwendet, und die Erstellung von a.out-Dateien wird seit langem nicht mehr von modernen Werkzeugen in den Standardkonfigurationen für Linux unterstützt. Außerdem kann der Loader für a.out-Dateien vollständig im Benutzerraum implementiert werden; - In den Verifizierungsmechanismus für BPF-Programme wurde die Möglichkeit zur Identifizierung und Entfernung ungenutzten Codes hinzugefügt. Die Kernel-Updates enthalten auch Patches zur Unterstützung von Spinlocks für das BPF-Subsystem, die zusätzliche Möglichkeiten für das Management der parallelen Ausführung von BPF-Programmen bieten;
- Ausrüstung
- die anfängliche Unterstützung für die GPU NVIDIA GA100 auf der Basis der Mikroarchitektur Ampere hinzugefügt. Unterstützung des heterogenen Speichermanagements, das es CPU und GPU ermöglicht, auf gemeinsame synchronisierte Speicherräume zuzugreifen. Das System des gemeinsamen virtuellen Speichers (SVM, shared virtual memory) basiert auf dem HMM-Subsystem (Heterogeneous memory management), das die Verwendung von Geräten mit eigenen Speichermanagementeinheiten (MMU, memory management unit) ermöglicht, die auf den Hauptspeicher zugreifen können. Auch mit HMM kann ein gemeinsamer Adressraum zwischen GPU und CPU organisiert 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 die Unterstützung auch für GPUs der Volta- und Turing-Architektur bereitgestellt wird. Außerdem wird in Nouveau ein neuer ioctl zur Verwaltung der Migration von Prozessspeicherbereichen in den GPU-Speicher;
- Im DRM-Treiber von Intel für die GPU Skylake und neuer (gen9+) Im Standardmodus ist der Fastboot-Modus aktiviert, der überflüssige Moduswechsel während des Bootvorgangs ausschließt. Geräte-IDs für Chips auf Basis der Mikroarchitekturen Coffeelake und Ice Lake. Für Coffeelake-Chips Unterstützung für GVT (). Für virtuelle GPUs Unterstützung von VFIO EDID. Für LCD-Displays mit MIPI/DSI Unterstützung für ACPI/PMIC-Elemente. Neue TV-Modi 1080p30/50/60 TV;
- Der amdgpu-Treiber unterstützt jetzt die GPUs Vega10/20 BACO. Energieverwaltung für Vega 10/20 sowie Lüftersteuerungstabellen für Vega 10 wurden implementiert. Neue PCI-Geräte-IDs für die GPU Picasso wurden hinzugefügt. Schnittstelle zur Verwaltung geplanter Abhängigkeiten zur Vermeidung von Deadlocks;
- DRM/KMS-Treiber für Beschleuniger bei 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 Audioplattform Mediatek MT8183 hinzugefügt;
- Unterstützung für NAND-Flash-Controller von STMicroelectronics FMC2, Amlogic Meson hinzugefügt;
- Unterstützung für Beschleuniger für 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 Lateinamerikanischer Fonds für freies Software
Variante — , bereinigt von Firmware-Elementen und Treibern, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern mt7603 und goya deaktiviert. Der Code zur Bereinigung 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 eingestellt, da er aus dem Kernel entfernt wurde.
Quelle: opennet.ru
