Nach zwei Monaten Entwicklung stellte Linus Torvalds das Release des Linux-Kernels 6.8 vor. Zu den auffälligsten Änderungen gehören: der Xe-Treiber für Intel-GPUs, ein Schutzmodus für Blockgeräte mit gemounteten Dateisystemen, der Deadline-Server-Task-Scheduling-Mechanismus, automatische Optimierung bei der Zusammenführung identischer Arbeitsspeicherseiten, der erste Treiber in der Programmiersprache Rust, die Systemaufrufe listmount und statmount, die Entfernung von bpfilter und SLAB, der Mechanismus guest_memfd in KVM, sowie das Profiling von Datenzugriffen.
In die neue Version wurden 15641 Korrekturen von 2018 Entwicklern übernommen, die Patchgröße beträgt 44 MB (Änderungen betrafen 12212 Dateien, 663864 Codezeilen wurden hinzugefügt und 339094 Zeilen entfernt). In der vorherigen Version gab es 18405 Korrekturen von 2066 Entwicklern, die Patchgröße betrug 72 MB. Etwa 42 % aller in 6.8 präsentierten Änderungen sind mit Gerätetreibern verbunden, ungefähr 15 % beziehen sich auf die Aktualisierung hardwarearchitekturspezifischen Codes, 14 % stehen im Zusammenhang mit dem Netzwerkstack, 6 % mit Dateisystemen und 3 % mit internen Subsystemen des Kernels.
Im Git-Repository des Kernels 6.8 sind 9,996 Millionen Objekte vorhanden, was darauf hindeutet, dass der nächste Kernel 6.9 die symbolische Grenze von 10 Millionen Git-Objekten überschreiten wird. Frühere Wechsel der Versionsnummern 3.x und 4.x korrelierten gut mit der Anzahl der Git-Objekte im Repository – Kernel 3.0 wurde veröffentlicht, als sich etwa 2 Millionen Objekte im Repository befanden, und Kernel 4.0 bei 4 Millionen Objekten. Im Jahr 2019 hat die Veröffentlichung von 5.0 diese logische Kette jedoch unterbrochen, da das Repository bei seiner Erstellung etwa 6,5 Millionen Git-Objekte enthielt.
Die wichtigsten Neuerungen im Kernel 6.8:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Ein Blockierungsmodus für direkte Schreibvorgänge auf Blockgeräten, auf denen gemountete Dateisysteme vorhanden sind, wurde hinzugefügt (nach Aktivierung des Modus kann der Root-Benutzer keine Änderungen am Dateisystem durch Manipulationen auf der Ebene des Blockgeräts vornehmen). Der Modus ist standardmäßig deaktiviert und erfordert die Angabe des Parameters BLK_DEV_WRITE_MOUNTED beim Kompilieren. Für Partitionen mit Btrfs funktioniert die Blockierung derzeit noch nicht, da die notwendigen Änderungen im Btrfs-Code noch nicht angenommen wurden.
- Die Systemaufrufe listmount() und statmount() wurden hinzugefügt, die es Benutzern ermöglichen, detaillierte Informationen über die gemounteten Dateisysteme zu erhalten.
- Im XFS-Dateisystem wurde die Arbeit an der Implementierung der Nutzung des Dienstprogramms fsck zur Überprüfung und Behebung festgestellter Probleme im Online-Modus ohne Aushängen des Dateisystems fortgesetzt.
- In Ext4 wurde für Blöcke, die kleiner als eine Speicherseite sind, der Aufruf dioread_nolock aktiviert, der die Leistung steigert, indem überflüssige Sperren vermieden werden. Einige Funktionen wurden auf die Verwendung von Seitenfolios (page folios) umgestellt.
- In Btrfs wurde die Unterstützung des Montageflags „nospace_cache“ hinzugefügt, um den Cache für freie Blöcke zu deaktivieren. Einige Funktionen wurden auf die Verwendung von Seitenfolios (page folios) umgestellt.
- Im EROFS-Dateisystem (Extendable Read-Only File System), das für die Verwendung auf Partitionen vorgesehen ist, die nur im Nur-Lese-Modus zugänglich sind, wurde die Unterstützung für die Kompression von Subseiten hinzugefügt und die mögliche Leistung bei Speichermangel verbessert.
- Im F2FS-Dateisystem wurde die Unterstützung für zonierte Speichergeräte verbessert (unterteilt in Zonen von Blockgruppen oder Sektoren, in denen nur sequentielles Hinzufügen von Daten erlaubt ist, wobei die gesamte Gruppe von Blöcken aktualisiert wird).
- Für das SMB-Dateisystem wurde die Möglichkeit zur Erstellung von Block- und Zeichenfolgen-Gerätedateien implementiert.
- In Bcachefs wurde die teilweise Unterstützung zur Überprüfung und Wiederherstellung der Integrität der eingehängten Dateisysteme hinzugefügt.
- Im Device-Mapper-Subsystem wurde die Unterstützung für die MD_LINEAR-, MD_MULTIPATH- und MD_FAULTY-Handler eingestellt, die 2021 als veraltet erklärt wurden.
- Speicher und Systemdienste
- Im Zswap-Subsystem wurde eine Funktion hinzugefügt, die bei Speichermangel aktiviert wird, um „kalte“ Seiten mit Seiten, auf die nicht zugegriffen wurde und die höchstwahrscheinlich ungenutzt bleiben, gezwungen auszulagern. Zswap führt das Caching der in den Swap-Bereich ausgelagerten Seiten durch, indem es diese komprimiert im RAM speichert, um möglichst ohne Rückführung in den tatsächlichen unkomprimierten Swap-Bereich auf der Festplatte auszukommen. Die vorgenommenen Änderungen bei Speichermangel ermöglichen es, die Größe des im RAM gespeicherten Zswap-Pools zu verringern und Speicher für das System freizugeben.
- In Zswap wurde ein neuer Modus vorgeschlagen, der die verzögerte Schreiboperation (writeback) in den tatsächlichen Swap-Bereich vollständig deaktiviert, wenn der Schreibversuch erfolglos war, und bereits im Zswap-Pool enthaltene Seiten nicht in den Swap-Bereich zurückschreibt.
- Im Task-Scheduler wurde der SCHED_DEADLINE-Servermechanismus hinzugefügt, der das Problem der unzureichenden CPU-Ressourcennutzung durch reguläre Aufgaben in Situationen der CPU-Monopolisation durch hochpriorisierte (Echtzeit-)Aufgaben löst. Um die CPU-Monopolisation im Kernel zu verhindern, wurde zuvor der Mechanismus Realtime Throttling verwendet, der versuchte, 5 % für niedrigpriorisierte Aufgaben zu reservieren und 95 % für Echtzeitarbeiten. Dieser Mechanismus ließ jedoch zu wünschen übrig, da reguläre Aufgaben in vielen Situationen nicht genügend Rechenzeit erhielten. Der SCHED_DEADLINE-Server implementiert eine effektivere Ressourcenzuweisung.
- In das DAMON-System (Data Access MONitor), das den Zugriff von Prozessen auf Daten im Arbeitsspeicher verfolgt (zum Beispiel kann man herausfinden, auf welche Speicherbereiche der Prozess zugegriffen hat und welche Bereiche ungenutzt blieben), wurde ein Mechanismus zur automatischen Anpassung der Aggressivität des Speicherkonsums basierend auf festgelegten Quoten integriert.
- Unterstützung für mehrgrößige Huge Pages im Speicher (mTHP – multi-size Transparent Huge Pages) wurde hinzugefügt, die eine Speicherzuweisung in Blöcken ermöglichen, die größer sind als die Basis-Seitengröße, aber kleiner als die traditionelle THP-Seite.
- Unterstützung für große Folios (Seitenfolliers, zusammengefasste Seiten im Speicher) für anonymen Speicher (nicht an ein Dateisystem gebunden, zum Beispiel über malloc zugewiesen) wurde hinzugefügt. Diese Änderung zielt darauf ab, die Leistung zu verbessern, indem größere Speicherblöcke beim Zugriff auf nicht zugewiesene Seiten im Speicher (Seitenfehler) zugewiesen werden. Zum Beispiel ermöglichte die Verwendung großer Folianten eine Verringerung der Zeit für das Neucomposen des Kernels um 5 % (bei einer Reduzierung der Zeit auf Kernel-Ebene um 40 %).
- Der Konfigurationsparameter TRANSPARENT_HUGEPAGE_NEVER wurde zur Kernel-Konfigurationsdatei hinzugefügt, um die Nutzung von großen Seiten im Speicher (Transparent Huge Pages) zu deaktivieren.
- Im Systemaufruf userfaultfd(), der es ermöglicht, Handler für Zugriffe auf nicht zugewiesene Seiten im Speicher (Seitenfehler) im Benutzerspeicher zu erstellen, wurde die Operation UFFDIO_MOVE hinzugefügt, die es ermöglicht, Seiten im virtuellen Adressraum bei der Heap-Kompression zu verschieben, ohne eine Seitenzuteilung durchzuführen. In durchgeführten Tests erlaubte die Anwendung von UFFDIO_MOVE eine Reduzierung der Komprimierungszeit um 40 % im Vergleich zur Verwendung der Operation UFFDIO_COPY.
- Der Mechanismus „KSM Advisor“ wurde hinzugefügt, der es ermöglicht, die Parameter des Teilsystems zur Zusammenführung identischer Speicherseiten (KSM – Kernel Samepage Merging) automatisch zu optimieren.
- Der Transfer von Änderungen aus dem Branch Rust-for-Linux wurde fortgesetzt, die sich auf die Nutzung der Programmiersprache Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen beziehen (die Unterstützung von Rust ist standardmäßig nicht aktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört). In dieser neuen Version wurden Änderungen integriert, die ein Rust-Binding über der Abstraktionsschicht phylib hinzufügen, das den Treiber ax88796b_rust verwendet, der die Unterstützung für die PHY-Schnittstelle des Ethernet-Controllers Asix AX88772A (100 MBit) gewährleistet. Funktional ist der Treiber in Rust vollständig äquivalent zum alten Treiber ax88796b, der in C geschrieben ist, und kann mit den Netzwerkarten X-Surf 100 verwendet werden, die mit dem Chip AX88796B ausgestattet sind. Für die Architektur LoongArch wurde die Möglichkeit geschaffen, Module in der Programmiersprache Rust zu schreiben. Der Übergang zu Rust Version 1.74.1 wurde vollzogen.
- Der BPF-Token-Mechanismus wurde hinzugefügt, der es ermöglicht, die Verarbeitung einzelner BPF-Funktionen selektiv an nicht privilegierte Prozesse im Benutzerspeicher zu delegieren, deren Glaubwürdigkeit durch einen speziellen Token bestätigt wird.
- Die Funktionalität des BPF-Programmverifikators wurde erweitert.
- Das Tool perf hat die Unterstützung für Datenprofiling hinzugefügt, das es ermöglicht, Lese- und Schreibvorgänge in Datenstrukturen zu verfolgen, um beispielsweise die am häufigsten modifizierten Felder in Strukturen zu identifizieren. Auf Systemen mit Prozessoren, die die Erfassung von Speichervorgängen unterstützen (Intel, AMD, ARM), sollte zum Sammeln von Statistiken der Befehl „perf mem record“ verwendet werden, und zur Ausgabe eines Berichts über Zugriffe auf Datenstrukturen „perf annotate —data-type“.
- Die Leistung der Verarbeitung von Systemaufrufen auf der Architektur s390 (IBM Z) wurde optimiert, was zu einer etwa 11%igen Beschleunigung der Eingabe in Systemaufrufe in Tests führte.
- Die Möglichkeit zur Änderung der Größe von Trace-Puffern, die zur Pufferung von Informationen über nicht verwendbare Ereignisse verwendet werden, die an den Benutzerraum übertragen werden, wurde bereitgestellt.
- Der zuvor als veraltet erklärte SLAB-Speicherverwaltungsmechanismus wurde entfernt, und im Kernel wird nun ausschließlich SLUB verwendet. Als Grund werden Begleitprobleme, Fehler im Code und die doppelte Funktionalität mit dem leistungsfähigeren SLUB-Allocator angegeben.
- Beim Kompilieren des Kernels wurde das Flag „-Wmissing-prototypes“ aktiviert, das Warnungen für Aufrufe globaler Funktionen generiert, die keinen Prototypen haben.
- Für die Architektur RISC-V auf Systemen mit Unterstützung der SUSP-SBI-Erweiterung wurde die Unterstützung für den Wechsel in den Energiesparmodus bei gleichzeitiger Speicherung des Zustands im RAM implementiert. Es wurde die Möglichkeit eines Systemaufrufs riscv_hwprobe() bereitgestellt, um Informationen über die unterstützten Erweiterungen des RISC-V-Befehlssatzes zu erhalten.
- Virtualisierung und Sicherheit
- Neue Systemaufrufe lsm_list_modules(), lsm_get_self_attr() und lsm_set_self_attr() wurden hinzugefügt, um eine Liste der geladenen LSM-Module (Linux Security Modules) anzuzeigen und Attribute des LSM-Moduls abzurufen oder festzulegen. Eine neue Struktur lsm_ctx wurde hinzugefügt, um die Kommunikation im Kontext von LSM zwischen Benutzerraum und Kernel zu ermöglichen.
- Das AppArmor-Subsystem wurde auf die Verwendung des SHA-256-Algorithmus zur Überprüfung von Regeln umgestellt, anstelle von SHA-1-Hashes.
- Die Implementierung der Funktion strlcpy() wurde aus dem Kernel entfernt, die im Sommer in die C-Bibliothek Glibc 3.38 aufgenommen wurde. Strlcpy ist eine Alternative zur Funktion strncpy(), die einen Schutz vor Pufferüberläufen bietet und immer das Nullbyte als Abschlusszeichen setzt.
- Im Hypervisor KVM Die Unterstützung für das Guest-Memory-Subsystem (guest-first memory) wurde hinzugefügt, das Speicherverwaltungsfunktionen bereitstellt, die Fähigkeiten und Optimierungen ermöglichen, die mit dem Einsatz des gemeinsamen Speicherverwaltungssystems nicht erreichbar sind. Beispielsweise ermöglicht guest_memfd die Zuweisung und Spiegelung eines Speicherbereichs auf das Gastbetriebssystem, der für die Host-Umgebung nicht zugänglich ist, was für vertrauliche Berechnungen genutzt werden kann.
- Für Gastsysteme, die unter dem Hypervisor KVM laufen, wurde die Unterstützung für den in Intel-Prozessoren bereitgestellten LAM-Modus (Linear Address Masking) aktiviert, der es ermöglicht, Teile der 64-Bit-Zeiger (Bits 57 bis 62) zur Speicherung von nicht adressierungsbezogenen Metadaten zu verwenden.
- Im KVM-Hypervisor wurde die Unterstützung für 52-Bit (LPA2) physische Adressen für ARM64-basierte Systeme hinzugefügt. Für x86-Architekturen besteht die Möglichkeit, ohne Emulation von Hyper-V-Hypercalls zu kompilieren, was die Kernelgröße reduziert.
- Ein iaa (IAA Compression Accelerator)-Treiber wurde hinzugefügt, um den Vorgang der Datenkompression und -dekompression mit der DEFLATE-Methode zu beschleunigen, indem die Möglichkeiten der Intel Analytics Accelerator (IAA) Krypto-Beschleuniger genutzt werden.
- Auf der Seite der Host-Umgebung wurde Unterstützung für den Intel TDX (Trusted Domain Extensions)-Mechanismus implementiert, der es bei Verwendung des KVM-Hypervisors ermöglicht, sichere Gastumgebungen zu schaffen, in denen die Speicherverschlüsselung verwendet wird. virtuelle Maschinen.
- In SELinux wurde der SID-Identifikator 'init' hinzugefügt, der es ermöglicht, die beim Booten gestarteten Prozesse zu kennzeichnen, die vor der Anwendung der SELinux-Richtlinien gestartet wurden. Die Schnittstelle /sys/fs/selinux zur Verwaltung von SELinux wurde verbessert.
- Netzwerksubsystem
- Eine niedrigere Umstrukturierung der grundlegenden Netzwerk-Datenstrukturen wurde durchgeführt, um die Effizienz des Cachings zu erhöhen. Zuvor waren die Felder in den Strukturen des Netzwerkstapels socks, netdev, netns und mibs der Reihenfolge nach angeordnet, was die Nutzung des Caches der CPU einschränkte. Die Überprüfung der Variablenplatzierung in den Strukturen führte zu einer merklichen Geschwindigkeitssteigerung der TCP-Leistung, da die Nutzung der Cache-Zeilen während der Datenübertragung minimiert und der Zugriff auf Variablen optimiert wurde. Bei der Verarbeitung vieler paralleler TCP-Verbindungen kann die Beschleunigung bis zu 40 % betragen.
- Das bpfilter-Untermodul, das BPF zur Paketfilterung verwendet, wurde entfernt. Bpfilter wurde ab Version 4.18 bereitgestellt, konnte jedoch nicht auf ein für den breiten Einsatz geeignetes Niveau gebracht werden. In den letzten Jahren wurde der Code von bpfilter im Kernel nicht weiterentwickelt, wobei die Entwicklung von Facebook in einem separaten Repository fortgesetzt wurde.
- Ausrüstung
- Im neuen Treiber ist ein neuer DRM-Treiber (Direct Rendering Manager) für die Intel Xe-Architektur integriert, die in den Grafikkarten der Intel Arc-Familie und der integrierten Grafik ab den Tiger Lake-Prozessoren verwendet wird. Der Xe-Treiber wird als Grundlage für die Unterstützung neuer Chips positioniert, ohne an den Code für ältere Plattformen gebunden zu sein. Der Treiber basiert auf einer neuen Architektur, die bestehende Komponenten des DRM-Subsystems aktiver nutzt sowie allgemeine Komponenten des i915-Treibers, die nicht auf bestimmte GPUs beschränkt sind, beispielsweise der Code zur Interaktion mit Bildschirmen, das Speichermodell und die Implementierung von execbuf. In Mesa wird die OpenGL- und Vulkan-Unterstützung über den Xe-Treiber auf Basis der Änderungen realisiert, die in die bestehenden Mesa-Treiber Iris und ANV eingeflossen sind.
- Im i915-Treiber wurde die Unterstützung für Intel LunarLake-Chips (Xe 2) weiter vorangetrieben. Die Unterstützung für Intel Meteor Lake-Chips wurde verbessert.
- Im Nouveau-Treiber wurde eine Konfiguration implementiert, die standardmäßig die GSP-Firmwarefunktionen für die Interaktion mit NVIDIA-GPUs auf Basis der Mikroarchitekturen Turing und Ampere nutzt, bei denen Initialisierungs- und Steuerungsoperationen von einem separaten Mikrocontroller GSP (GPU System Processor) durchgeführt werden. Bei Aktivierung der Konfiguration arbeitet der Treiber über den Zugriff auf die Firmware anstelle der direkten Programmierung von Hardwareinteraktionsoperationen.
- Im AMDGPU-Treiber wurde die Unterstützung für ACPI WBRF und VPE DPM implementiert, die Behandlung der PCIe-Kanalgeschwindigkeit wurde geändert, in den für die Synchronisierung verwendeten Warteschlangen werden 64-Bit Sequenznummern eingesetzt, spezifische Farbmanagementmechanismen von AMD wurden hinzugefügt, und ein Problem beimÜberwechseln in den Energiesparmodus wurde gelöst.
- Eine erste Implementierung des Treibers für die GPU Broadcom VideoCore 7.1, die auf den Raspberry Pi 5-Platinen verwendet wird, wurde hinzugefügt.
- Ein Treiber für die PowerVR 6-Serie von GPUs basierend auf der Rogue-Mikroarchitektur von Imagination Technologies wurde hinzugefügt.
- Die Unterstützung für Thunderbolt/USB4-Controller, die in Chips auf Basis der Intel Lunar Lake-Mikroarchitektur integriert sind, wurde hinzugefügt.
- Treiber für die in SoC Starfive verwendeten Kameras GC2145/GC0308 von GalaxyCore sowie Chips&Media Wave und THine THP7312 wurden hinzugefügt.
- Die Unterstützung für NSO (Nintendo Switch Online) Spielcontroller wurde hinzugefügt – Varianten der alten Controller von SNES (Super Nintendo), Genesis und N64 (Nintendo 64), die für die Nintendo Switch angepasst wurden. Ein Treiber für die Adafruit Seesaw Gamepads wurde hinzugefügt. Der xpad-Treiber unterstützt jetzt Lenovo Legion Go-Controller.
- Im DTS-Treiber wurde die Unterstützung für die Gaming-Geräte Powkiddy RK2023, Powkiddy X55 und Anbernic RG351V hinzugefügt.
- Die Unterstützung für Audiosysteme, die in NXP i.MX8m MICFIL-, Qualcomm SM8250-, AMD ACP5x-, Intel Arrow Lake-, SM8550-, SM8650- und X1E80100-Chips verwendet werden, wurde hinzugefügt.
- Das Unternehmen AMD hat Änderungen zur Unterstützung der kommenden Prozessorreihe auf Basis der neuen Mikroarchitektur Zen 5 vorgenommen.
- Die Unterstützung für ARM64 SoC wurde hinzugefügt: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 und Unisoc UMS9620 (Tanggula 7).
- Die Unterstützung für ARM-Plattformen und -Geräte wurde hinzugefügt: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress basierend auf Marvell CN913x, Chromebook Lenovo, Asus und Acer basierend auf Mediatek MT8183, Toradex Verdin AM62, Platinen basierend auf Allwinner H616/H618.
- Die Unterstützung für ARM11 ARMv6K SMP-Prozessoren wurde eingestellt.
Gleichzeitig hat die lateinamerikanische Free Software Foundation eine Variante des vollständig freien Kernels 6.8 – Linux-libre 6.8-gnu, erstellt, die von Firmware- und Treiberkomponenten befreit wurde, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Anwendung durch den Hersteller eingeschränkt ist. In der Version 6.8 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen aktualisiert. Treiber von Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY und Realtek rtw8922a wurden bereinigt. Aufgrund der Entfernung aus dem Kernel wurde die Bereinigung von Treibern wie atmel, hermes, orinoco_usb, libertas_cs und zd1201 eingestellt. Die Bereinigung von Blob-Namen in dts-Dateien (Device Tree) für die Architekturen ARM und Aarch64 wurde durchgeführt. Probleme mit der Bereinigung des Treibers i915 wurden behoben.
Quelle: opennet.ru
