Nach zwei Monaten Entwicklung hat Linus Torvalds die Veröffentlichung des Linux-Kernels 6.0 angekündigt. Die signifikante Änderung der Versionsnummer wurde aus ästhetischen Gründen vorgenommen und ist ein formeller Schritt, der das Unbehagen aufgrund der Vielzahl an veröffentlichten Versionen in der Reihe beseitigt (Linus scherzte, dass der Grund für die Änderung der Zweignummer eher darin besteht, dass ihm die Finger an Händen und Füßen zum Zählen der Versionsnummern ausgehen). Zu den auffälligsten Änderungen gehören: Unterstützung von asynchronem gepuffertem Schreiben in XFS, der Blocktreiber ublk, die Optimierung des Task-Schedulers, ein Mechanismus zur Verifizierung der korrekten Funktionsweise des Kernels und die Unterstützung des Blockcipher ARIA.
Die Hauptneuheiten im Kernel 6.0:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Im Dateisystem XFS wurde die Unterstützung für asynchrones gepuffertes Schreiben mit dem io_uring-Mechanismus hinzugefügt. Leistungstests, die mit dem Werkzeug fio durchgeführt wurden (1 Stream, Blockgröße 4KB, 600 Sekunden, sequenzielle Schreibeoperation), zeigen eine Steigerung der Eingabe-/Ausgabeoperationen pro Sekunde (IOPS) von 77k auf 209k, eine Erhöhung der Datenübertragungsrate von 314MB/s auf 854MB/s und einen Rückgang der Latenz von 9600ns auf 120ns (80-fache Verbesserung).
- Im Btrfs-Dateisystem wurde die zweite Version des Protokolls für den Befehl „send“ implementiert, die die Unterstützung zusätzlicher Metadaten, den Versand größerer Datenblöcke (über 64K) und die Übertragung von Extents in komprimierter Form ermöglicht. Die Leistung von direkten Lesevorgängen (direct read) wurde erheblich (bis zu dreimal) durch gleichzeitiges Lesen von bis zu 256 Sektoren gesteigert. Die Konflikte bei Sperren wurden verringert und die Überprüfung der Metadaten beschleunigt, indem der für verzögerte Elemente reservierte Metadatenbedarf reduziert wurde.
- In das ext4-Dateisystem wurden neue ioctl-Operationen EXT4_IOC_GETFSUUID und EXT4_IC_SETFSUUID hinzugefügt, um den im Superblock gespeicherten UUID-Identifikator abzurufen oder festzulegen.
- Im F2FS-Dateisystem wurde ein Modus mit niedrigem Speicherverbrauch vorgeschlagen, der die Leistung auf Geräten mit begrenztem RAM optimiert und den Speicherverbrauch durch eine reduzierte Leistung senkt.
- Die Unterstützung für die Authentifizierung von NVMe-Laufwerken wurde hinzugefügt.
- In Server NFSv4 implementiert eine Begrenzung der aktiven Clients, die auf 1024 zulässige Clients pro Gigabyte RAM im System festgelegt ist.
- Die Leistung des CIFS-Clients wurde im Mehrkanalbetrieb verbessert.
- Ein neuer Flaggen-Eintrag FAN_MARK_IGNORE wurde in das Ereignisverfolgungssystem fanotify hinzugefügt, um spezifische Ereignisse zu ignorieren.
- In Overlayfs, beim Einhängen über ein Dateisystem mit Benutzer-ID-Mapping, wurde die korrekte Unterstützung von POSIX-kompatiblen Zugriffskontrolllisten sichergestellt.
- Ein neuer Blocktreiber ublk wurde hinzugefügt, der spezifische Logik in den Hintergrundprozess im Benutzerspeicher verlagert und das io_uring-System nutzt.
- Speicher und Systemdienste
- Das DAMON (Data Access MONitor)-System erhielt neue Funktionen, die es ermöglichen, den Zugriff von Prozessen auf den Arbeitsspeicher aus dem Benutzermodus zu überwachen und die Speicherverwaltung zu beeinflussen. Insbesondere wurde ein neues Modul "LRU_SORT" vorgeschlagen, das eine Umgruppierung der LRU (Least Recently Used)-Listen zur Priorisierung bestimmter Seiten im Arbeitsspeicher ermöglicht.
- Die Möglichkeit zur Erstellung neuer Speicherräumlichkeiten wurde implementiert, indem die CXL (Compute Express Link)-Technologie genutzt wird, die für die Organisation einer Hochgeschwindigkeitsverbindung zwischen CPU und Speichereinheiten verantwortlich ist. CXL ermöglicht das Anschließen neuer Speicherbereiche, die von externen Speichereinheiten bereitgestellt werden, und deren Nutzung als zusätzliche Ressourcen im physischen Adressraum zur Erweiterung des Systemspeichers (DDR) oder persistenten Speichers (PMEM).
- Leistungsprobleme bei AMD Zen-Prozessoren wurden behoben, die durch einen Code verursacht wurden, der vor 20 Jahren zur Umgehung eines Hardwareproblems in bestimmten Chipsätzen hinzugefügt wurde (eine zusätzliche WAIT-Anweisung wurde hinzugefügt, die den Prozessor verlangsamt, damit der Chipsatz in den Leerlaufmodus wechseln konnte). Diese Änderung führte zu einer Verringerung der Leistung bei Lasten, die häufig zwischen Leerlauf- (idle) und Aktivitätszuständen (busy) wechseln. Nach der Deaktivierung des Umgehungsmechanismus stiegen die durchschnittlichen Ergebnisse des tbench-Tests von 32.191 MB/s auf 33.805 MB/s.
- Der Task-Scheduler hat den Code mit der Heuristik entfernt, der die Migration von Prozessen auf die am wenigsten ausgelasteten CPUs unter Berücksichtigung des prognostizierten Energiegewinne ermöglichte. Die Entwickler kamen zu dem Ergebnis, dass die Heuristik nicht den gewünschten Nutzen brachte und es einfacher ist, Prozesse ohne zusätzliche Bewertungen zu verschieben, wann immer ein solcher Umzug potenziell zu einem geringeren Energieverbrauch führen kann (z. B. wenn die Ziel-CPU auf einem niedrigeren Energieniveau arbeitet). Das Deaktivieren der Heuristik führte zu einer Reduzierung des Energieverbrauchs bei intensiven Aufgaben; beispielsweise sank der Energieverbrauch im Video-Decodierungstest um 5,6%.
- Die Verteilung der Aufgaben auf CPU-Kerne in großen Systemen wurde optimiert, wodurch die Leistung bei bestimmten Arten von Lasten gesteigert werden konnte.
- Im io_uring-Interface für asynchrones Ein- und Ausgeben wurde ein neuer Flag IORING_RECV_MULTISHOT eingeführt. Dieser ermöglicht den Einsatz des "Multi-Shot"-Modus mit dem Systemaufruf recv(), um mehrere Leseoperationen von einem einzigen Netzwerksocket gleichzeitig durchzuführen. Zudem unterstützt io_uring die netzwerkbasierte Datenübertragung ohne Zwischenspeicherung (Zero-Copy).
- Es wurde die Möglichkeit implementiert, BPF-Programme, die an uprobe angehängt sind, in den Ruhemodus zu versetzen. Außerdem wurde dem BPF ein neuer Iterator ksym hinzugefügt, um mit den Symboltabellen des Kernels zu arbeiten.
- Das veraltete "efivars"-Interface im sysfs, das für den Zugriff auf UEFI-Bootvariablen gedacht war, wurde entfernt. Für den Zugriff auf EFI-Daten wird jetzt flächendeckend das virtuelle Dateisystem efivarfs verwendet.
- Das Werkzeug perf bietet jetzt neue Berichte zur Analyse von Lock-Konflikten und der Zeit, die der Prozessor mit der Ausführung von Kernelkomponenten verbringt.
- Die Einstellung CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, die es ermöglichte, den Kernel im Optimierungsmodus „-O3“ zu kompilieren, wurde entfernt. Es wird darauf hingewiesen, dass Experimente mit Optimierungsmodi durch die Übergabe von Flags während des Builds („make KCFLAGS=-O3“) durchgeführt werden können. Um eine Einstellung in Kconfig hinzuzufügen, ist es erforderlich, wiederholbare Leistungsprofilierungen durchzuführen, die zeigen, dass die Anwendung des „-O3“-Modus bei der Schleifenentfaltung gegenüber dem Optimierungsgrad „-O2“ einen Vorteil bietet.
- Ein debugfs-Interface wurde hinzugefügt, um Informationen über die Funktion einzelner „memory shrinker“ (Handler, die bei Speichermangel aufgerufen werden und die Datenstrukturen des Kernels packen, um den Speicherverbrauch zu reduzieren) abzurufen.
- Für die Architekturen OpenRISC und LoongArch wurde die Unterstützung des PCI-Busses implementiert.
- Für die Architektur RISC-V wurde die Erweiterung „Zicbom“ zur Steuerung von Geräten mit DMA, die nicht mit dem Cache abgestimmt sind (non-cache-coherent), implementiert.
- Virtualisierung und Sicherheit
- Ein Mechanismus zur Runtime-Verifizierung (RV) wurde hinzugefügt, um die Korrektheit des Betriebs auf hochverfügbaren Systemen zu überprüfen, die Ausfallzeiten ausschließen. Die Überprüfung erfolgt zur Laufzeit durch die Anbringung von Handlern an Tracepoints, die den tatsächlichen Ablauf mit einem vorher festgelegten deterministischen Modell des Automaten abgleichen, das das erwartete Verhalten des Systems definiert. Der Abgleich mit dem Modell zur Laufzeit wird als leichter umsetzbar und praxisnaher Ansatz zur Bestätigung der Korrektheit auf kritischen Systemen eingeordnet, der die klassischen Methoden zur Zuverlässigkeitsbestätigung ergänzt. Zu den Vorteilen von RV gehört die Möglichkeit, eine strenge Verifizierung ohne eine separate Implementierung des gesamten Systems in einer Modellierungssprache sicherzustellen, sowie die flexible Reaktion auf unvorhergesehene Ereignisse.
- Integrierte Kernkomponenten zur Verwaltung von Enklaven basierend auf der Intel SGX2-Technologie (Software Guard eXtensions), die es Anwendungen ermöglicht, Code in isolierten, verschlüsselten Speicherbereichen auszuführen, auf die der Rest des Systems keinen Zugriff hat. Die Intel SGX2-Technologie wird von den Intel Ice Lake- und Gemini Lake-Chips unterstützt und unterscheidet sich von Intel SGX1 durch zusätzliche Anweisungen zur dynamischen Verwaltung des Speichers von Enklaven.
- Für die x86-Architektur wurde die Möglichkeit implementiert, einen Seed für den Pseudo-Zufallszahlengenerator über die Bootloader-Einstellungen zu übertragen.
- Im LSM-Modul SafeSetID wurde die Möglichkeit zur Verwaltung von Änderungen, die durch den Aufruf von setgroups() vorgenommen werden, integriert. SafeSetID ermöglicht es Systemdiensten, Benutzer sicher zu verwalten, ohne Privilegien zu erhöhen (CAP_SETUID) und ohne die Berechtigungen des Benutzers root zu erhalten.
- Unterstützung für den Blockverschlüsselungsalgorithmus ARIA wurde hinzugefügt.
- Im Sicherheitsverwaltungsmodul auf Basis von BPF wurde die Möglichkeit implementiert, Handler an einzelnen Prozessen und Prozessgruppen (cgroup) zu koppeln.
- Ein Mechanismus mit einer Implementierung des Watchdogs zur Erkennung von Hängern der Gastsysteme basierend auf der Überwachung der vCPU-Aktivität wurde hinzugefügt.
- Netzwerksubsystem
- In das BPF-Subsystem wurden Handler zur Erzeugung und Überprüfung von SYN-Cookies hinzugefügt. Zusätzlich wurde eine Reihe von Funktionen (kfunc) implementiert, um auf den Status von Verbindungen zuzugreifen und ihn zu ändern.
- Im Wireless-Stack wurde die Unterstützung des MLO (Multi-Link Operation) -Mechanismus hinzugefügt, der in der WiFi 7-Spezifikation definiert ist und es Geräten ermöglicht, Daten gleichzeitig über verschiedene Frequenzbänder und Kanäle zu senden und zu empfangen. Dies erlaubt, mehrere Kommunikationskanäle zwischen dem Zugangspunkt und dem Client-Gerät gleichzeitig zu etablieren.
- Die Leistungsfähigkeit der im Kernel integrierten TLS-Protokoll-Implementierung wurde verbessert.
- Es wurde ein Kernel-Startparameter „hostname=“ hinzugefügt, der das Setzen des Hostnamens in einem frühen Stadium des Bootvorgangs ermöglicht, bevor die Komponenten des Benutzerspaces gestartet werden.
- Ausrüstung
- Im i915-Treiber (Intel) wurde die Unterstützung für die diskreten Intel Arc (DG2/Alchemist) Grafikkarten A750 und A770 gewährleistet. Eine erste Implementierung zur Unterstützung von Intel Ponte Vecchio (Xe-HPC) GPUs und Meteor Lake wurde vorgeschlagen. Die Arbeit an der Unterstützung der Intel Raptor Lake-Plattform wurde fortgesetzt.
- Im amdgpu-Treiber wurde die Unterstützung für AMD RDNA3 (RX 7000) und CDNA (Instinct) Plattformen weiter ausgebaut.
- Im Nouveau-Treiber wurde der Code für die Unterstützung von Display-Engines für NVIDIA-GPU nv50 überarbeitet.
- Ein neuer DRM-Treiber logicvc für LogiCVC-Bildschirme wurde hinzugefügt.
- Im v3d-Treiber (für GPU Broadcom Video Core) wurde die Unterstützung für Raspberry Pi 4-Platinen umgesetzt.
- Der MSM-Treiber hat nun Unterstützung für den GPU Qualcomm Adreno 619 erhalten.
- Im Panfrost-Treiber wurde die Unterstützung für die ARM Mali Valhall-GPU hinzugefügt.
- Erste Unterstützung für Qualcomm Snapdragon 8cx Gen3-Prozessoren, die in Lenovo ThinkPad X13s-Laptops verwendet werden, wurde hinzugefügt.
- Soundtreiber für die Plattformen AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake und Mediatek MT8186 wurden hinzugefügt.
- Die Unterstützung für Intel Habana Gaudi 2-Maschinenlernebeschleuniger wurde hinzugefügt.
- Unterstützung für ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530 und Google Chameleon v3 wurde hinzugefügt.
Gleichzeitig hat die lateinamerikanische Frei-Software-Stiftung eine vollständig freie Version des Kernels 6.0 – Linux-libre 6.0-gnu – veröffentlicht, die von Elementen der Firmware und Treibern, die nicht-freie Komponenten oder codeabschnitte enthalten, die vom Hersteller eingeschränkt sind, bereinigt wurde. In der neuen Version wurde die Verwendung von Blobs im CS35L41 HD-Audio-Treiber und im UCSI-Schnittstellentreiber für STM32G0-Mikrocontroller deaktiviert. DTS-Dateien für Qualcomm- und MediaTek-Chips wurden bereinigt. Die Deaktivierung der Blobs im MediaTek MT76-Treiber wurde überarbeitet. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen AMDGPU, Adreno, Tegra VIC, Netronome NFP und Habanalabs Gaudi2 wurde aktualisiert. Die Bereinigung des VXGE-Treibers, der aus dem Kernel entfernt wurde, wurde eingestellt.
Quelle: opennet.ru
