Die Veröffentlichung des Linux-Kernels 6.8

Nach zwei Monaten Entwicklung hat Linus Torvalds die Version 6.8 des Linux-Kernels veröffentlicht. Zu den bemerkenswertesten Änderungen gehören: der Xe-Treiber für Intel-GPUs, ein Schutzmodus für Blockgeräte mit gemounteten Dateisystemen, der Deadline Server-Planungsmechanismus, die automatische Optimierung des Zusammenführens identischer Speicherseiten, der erste Treiber in Rust, die Systemaufrufe listmount und statmount, die Entfernung von bpfilter und SLAB, sowie der guest_memfd-Mechanismus in KVM, und das Profilerstellen von Datenzugriffen.

In die neue Version wurden 15641 Korrekturen von 2018 Entwicklern integriert, die Patch-Größe beträgt 44 MB (es wurden 12212 Dateien geändert, 663864 Codezeilen hinzugefügt und 339094 Zeilen entfernt). In der vorherigen Version gab es 18405 Korrekturen von 2066 Entwicklern, die Patch-Größe betrug 72 MB. Etwa 42 % aller in 6.8 enthaltenen Änderungen betreffen Gerätetreiber, etwa 15 % der Änderungen beziehen sich auf den Code, der spezifisch für Hardwarearchitekturen ist, 14 % sind mit dem Netzwerk-Stack verbunden, 6 % mit Dateisystemen und 3 % mit internen Subsystemen des Kernels.

Im Git-Repository mit Kernel 6.8 sind 9,996 Millionen Objekte vorhanden, was darauf hindeutet, dass der nächste Kernel 6.9 die bedeutende Schwelle von 10 Millionen Git-Objekten überschreiten wird. Zuvor korrelierte der Wechsel der Branch-Nummern 3.x und 4.x gut mit der Anzahl der Git-Objekte im Repository – Kernel 3.0 wurde veröffentlicht, als etwa 2 Millionen Objekte im Repository waren, während Kernel 4.0 – 4 Millionen Objekte hatte. Im Jahr 2019 brach die Veröffentlichung von 5.0 diese logische Kette, da das Repository bei dessen Erstellung etwa 6,5 Millionen Git-Objekte enthielt.

Wichtige Neuerungen im Kernel 6.8:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Ein Blockiermodus für die direkte Schreiboperation auf Blockgeräten hinzugefügt, auf denen montierte Dateisysteme vorhanden sind (nach Aktivierung des Modus kann der Root-Benutzer Änderungen am FS nicht mehr durch Manipulationen auf Blockgeräteebene vornehmen). Standardmäßig ist der Modus deaktiviert und erfordert bei der Erstellung die Angabe des Parameters BLK_DEV_WRITE_MOUNTED. Für Partitionen mit Btrfs funktioniert die Blockierung derzeit noch nicht, da die erforderlichen Änderungen im Btrfs-Code noch nicht angenommen wurden.
    • Es wurden Systemaufrufe listmount() und statmount() hinzugefügt, die es ermöglichen, detaillierte Informationen über die eingehängten Dateisysteme aus dem Benutzerspace abzurufen.
    • Im XFS-Dateisystem wird weiterhin an der Implementierung der Möglichkeit gearbeitet, das Tool fsck für die Überprüfung und Behebung von Problemen im Online-Modus zu verwenden, ohne das Dateisystem aushängen zu müssen.
    • Im Ext4-Dateisystem wird für Blöcke, die kleiner sind als die Seiten der Speicherverwaltung, der Aufruf dioread_nolock verwendet, der die Leistung verbessert, indem er überflüssige Sperren eliminiert. Einige Funktionen wurden auf die Nutzung von Seitenfolios (page folios) umgestellt.
    • Im Btrfs-Dateisystem wurde die Unterstützung des Mount-Flags „nospace_cache“ hinzugefügt, um den Cache freier Blöcke zu deaktivieren. Einige Funktionen wurden auf die Nutzung von Seitenfolios (page folios) umgestellt.
    • Im EROFS-Dateisystem (Extendable Read-Only File System), das für die Verwendung auf im Nur-Lese-Modus zugänglichen Partitionen vorgesehen ist, wurde die Unterstützung für die Kompression von Subseiten hinzugefügt und die Funktionalität bei Speicherknappheit verbessert.
    • Im F2FS-Dateisystem wurde die Unterstützung für zonierte Speichergeräte verbessert (Unterteilung in Zonen von Block- oder Sektoren, in denen nur sequentielle Daten hinzugefügt werden dürfen, wobei die gesamte Gruppe von Blöcken aktualisiert wird).
    • Für das SMB-Dateisystem wurde die Möglichkeit zur Erstellung von Block- und Zeichendateien für Geräte implementiert.
    • In Bcachefs wurde eine teilweise Unterstützung für die Überprüfung und Wiederherstellung der Integrität eingebundener Dateisysteme hinzugefügt.
    • Im Device-Mapper-Subsystem wurde die Unterstützung für die Handler MD_LINEAR, MD_MULTIPATH und MD_FAULTY eingestellt, die im Jahr 2021 als veraltet erklärt wurden.
  • Speicher und Systemdienste
    • Im Zswap-Subsystem wurde die Möglichkeit zur erzwungenen Auslagerung «kalter» Speicherseiten in einen realen Swap-Bereich hinzugefügt, wenn nicht genügend RAM vorhanden ist. Diese Seiten wurden nicht aufgerufen und werden wahrscheinlich nicht benötigt. Zswap führt das Caching von auszulagernden Seiten durch, indem es diese in komprimierter Form im RAM speichert, ohne sie in den echten unkomprimierten Swap-Bereich auf der Festplatte zu überführen. Die Änderungen ermöglichen es, bei speicherknappen Bedingungen die Größe des im RAM gespeicherten Zswap-Pools zu reduzieren und der Systemressource RAM freizugeben.
    • In Zswap wurde ein neuer Modus eingeführt, der das verzögerte Schreiben (Writeback) in den echten Swap-Bereich vollständig deaktiviert, wenn der Schreibversuch fehlschlägt, und bereits im Zswap-Pool vorhandene Seiten nicht in den Swap-Bereich verschiebt.
    • Der Task-Scheduler erhielt einen SCHED_DEADLINE-Mechanismus, der das Problem der unzureichenden CPU-Ressourcenverteilung für normale Aufgaben in Situationen mit CPU-Monopol durch hochpriorisierte (Echtzeit-)Aufgaben löst. Um die CPU-Monopolisierung zu verhindern, wurde im Kernel zuvor ein Realtime-Throttling-Mechanismus verwendet, der versuchte, 5 % für niedrigpriorisierte Aufgaben und 95 % für Echtzeitanwendungen reserviert zu halten. Dieser Mechanismus hatte jedoch seine Schwächen, da normale Aufgaben in vielen Situationen zu wenig Rechenzeit erhielten. Der SCHED_DEADLINE-Mechanismus implementiert eine effektivere Ressourcenzuteilung.
    • In das DAMON (Data Access MONitor)-Subsystem wurde ein Mechanismus zur automatischen Anpassung der Aggressivität des Speicherverbrauchs auf Basis festgelegter Quoten integriert. Dieser ermöglicht die Überwachung des Zugriffs eines Prozesses auf Daten im Arbeitsspeicher (z. B. kann ermittelt werden, auf welche Bereiche des Speichers zugegriffen wurde und welche Speicherbereiche ungenutzt geblieben sind).
    • Die Unterstützung für mehrgrößige große Seiten (mTHP — multi-size Transparent Huge Pages) wurde hinzugefügt, wodurch es möglich wird, Speicher in Blöcken zuzuweisen, die größer sind als die Basisseite, aber kleiner als eine traditionelle THP-Seite.
    • Die Unterstützung für große Folios (page folios, zusammengefasste Speicherseiten) für anonymen Speicher (der nicht mit dem Dateisystem verbunden ist, z. B. durch malloc zugewiesen) wurde hinzugefügt. Diese Änderung zielt darauf ab, die Leistung durch die Zuweisung größerer Speicherblöcke bei Zugriffen auf nicht zugewiesene Speicherseiten (page faults) zu verbessern. Beispielsweise hat die Verwendung großer Folios die Zeit für den Kernneubau um 5 % verkürzt (bei einer Reduzierung der Zeit, die auf Kernel-Ebene verbracht wurde, um 40 %).
    • Im Konfigurationsfile des Kernels wurde der Parameter TRANSPARENT_HUGEPAGE_NEVER hinzugefügt, der ermöglicht, die Verwendung großer Speicherseiten (Transparent Huge Pages) zu deaktivieren.
    • Im Systemaufruf userfaultfd(), der es ermöglicht, Handler für Seitenfehler (page faults) im Benutzerspeicher zu erstellen, wurde die Operation UFFDIO_MOVE hinzugefügt. Diese erlaubt es, Speicherseiten im virtuellen Adressraum während der Heap-Kompaktierung zu verschieben, ohne eine Speicherzuweisung auszuführen. In durchgeführten Tests konnte die Verwendung von UFFDIO_MOVE die Zeit für die Kompaktierung um 40 % im Vergleich zur Verwendung der Operation UFFDIO_COPY reduzieren.
    • Ein Mechanismus namens „KSM advisor“ wurde hinzugefügt, der automatisch die Parameter des Systems zur Zusammenführung identischer Speicherseiten optimiert (KSM — Kernel Samepage Merging).
    • Die Übertragung der Änderungen aus dem Rust-for-Linux-Branch wurde fortgesetzt, die sich auf die Verwendung von Rust als zweite Programmiersprache 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 erforderlichen Build-Abhängigkeiten des Kernels zählt). In der neuen Version wurden Änderungen aufgenommen, die eine Rust-Bindung über der phylib-Abstraktionsebene hinzufügen und einen zuführenden Treiber ax88796b_rust verwenden, der die Unterstützung für die PHY-Schnittstelle des Ethernet-Controllers Asix AX88772A (100 MBit) bereitstellt. Funktional ist der Rust-Treiber vollständig äquivalent zu dem alten Treiber ax88796b, der in C geschrieben wurde, und kann mit den Netzwerkkarten X-Surf 100, die mit dem Chip AX88796B ausgestattet sind, verwendet werden. Für die Architektur LoongArch wurde die Möglichkeit, Module in Rust zu schreiben, bereitgestellt. Es wurde auf die Nutzung von Rust-Version 1.74.1 umgeschaltet.
    • Ein BPF-Token-Mechanismus wurde hinzugefügt, der es ermöglicht, die Verarbeitung bestimmter BPF-Funktionen, wie das Laden von BPF-Programmen oder die Erstellung von BPF-Maps, selektiv an nicht privilegierte Prozesse im Benutzerspace zu delegieren, deren Authentizität durch ein spezielles Token bestätigt wird.
    • Die Funktionalität des BPF-Programmierverifiers wurde erweitert.
    • Das Tool perf unterstützt jetzt das Profiling von Daten und ermöglicht die Nachverfolgung von Lese- und Schreibvorgängen in Datenstrukturen, um beispielsweise die am häufigsten veränderten Felder in diesen Strukturen zu identifizieren. Auf Systemen mit Prozessoren, die das Sammeln von Informationen zu Speicheroperationen unterstützen (Intel, AMD, ARM), sollte der Befehl "perf mem record" zur Statistiksammlung verwendet werden, während für die Ausgabe eines Berichts über den Zugriff auf Datenstrukturen "perf annotate —data-type" genutzt werden sollte.
    • Die Leistung der Verarbeitung von Systemaufrufen auf der Architektur s390 (IBM Z) wurde optimiert, was in Tests zu einer Beschleunigung des Zugriffs auf Systemaufrufe um etwa 11 % führte.
    • Es wurde die Möglichkeit geschaffen, die Größe der Traceing-Puffer zu ändern, die zur Pufferung von Informationen über Traceing-Ereignisse verwendet werden, die in den Benutzerspeicher übertragen werden.
    • Der zuvor als veraltet deklarierte SLAB-Speicherverteilungsmechanismus wurde entfernt; im Kernel wird nun ausschließlich SLUB verwendet. Als Gründe werden Wartungsprobleme, vorhandene Codeprobleme und die funktionale Duplizierung mit dem leistungsfähigeren SLUB-Allocator angegeben.
    • Beim Kernel-Bau ist das Flag „-Wmissing-prototypes“ aktiviert, das Warnungen für Aufrufe globaler Funktionen erzeugt, die keine Prototypdefinition haben.
    • Für die RISC-V-Architektur wird auf Systemen mit Unterstützung der SUSP SBI-Erweiterung die Möglichkeit zum Übergang in den Wartemodus mit Zustandseinsparung im RAM unterstützt. Es wird die Nutzung des Systemaufrufs riscv_hwprobe() zur Abfrage von Informationen über die unterstützten Erweiterungen des RISC-V-Befehlssatzes ermöglicht.
  • 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/zu setzen. Eine neue Struktur lsm_ctx wurde für die Kommunikation im LSM-Kontext zwischen dem Benutzerspeicher und dem Kernel hinzugefügt.
    • Das AppArmor-Subsystem wurde auf die Verwendung zur Verifizierung von Regelalgorithmen mit SHA-256 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 Bufferüberläufen bietet und sicherstellt, dass ein nullendes Zeichen angefügt wird.
    • Im Hypervisor KVM Die Unterstützung des guest_memfd-Subsystems (guest-first memory) wurde hinzugefügt, das Speicherverwaltungsfunktionen bereitstellt, die Möglichkeiten und Optimierungen ermöglichen, die mit der gemeinsamen Speicherverwaltung nicht erreichbar sind. Zum Beispiel ermöglicht guest_memfd die Zuordnung und Spiegelung eines Speichers, der für die Host-Umgebung unzugänglich ist, was für vertrauliche Berechnungen genutzt werden kann.
    • Für Gast-Systeme, die unter dem KVM-Hypervisor betrieben werden, wurde die Unterstützung des in Intel-Prozessoren verfügbaren LAM-Modus (Linear Address Masking) aktiviert, der es ermöglicht, einen Teil der Bits der 64-Bit-Zeiger (Bits 57 bis 62) zur Speicherung von nicht adressierungsbezogenen Metadaten zu verwenden.
    • Der KVM-Hypervisor für Systeme auf ARM64-Architektur unterstützt nun 52-Bit (LPA2) physische Adressen. Für x86-Architekturen besteht die Möglichkeit, ohne Emulation von Hyper-V-Hypercalls zu kompilieren, was die Kernelgröße reduziert.
    • Ein iaa-Treiber (IAA Compression Accelerator) wurde hinzugefügt, um den Komprimierungs- und Dekomprimierungsprozess mit der DEFLATE-Methode zu beschleunigen, indem die Möglichkeiten der kryptographischen Beschleuniger von Intel Analytics Accelerator (IAA) genutzt werden.
    • Auf der Seite der Host-Umgebung wurde die Unterstützung des Intel TDX (Trusted Domain Extensions) Mechanismus implementiert, der es ermöglicht, mit dem KVM-Hypervisor geschützte Gastumgebungen zu schaffen, in denen die Arbeitsspeicherverschlüsselung verwendet wird. virtuellen Maschinen.
    • In SELinux wurde der SID-Identifikator „init“ hinzugefügt, der es ermöglicht, Prozesse, die zu Beginn des Bootvorgangs gestartet werden, vor der Anwendung der SELinux-Politiken zu kennzeichnen. Die Schnittstelle /sys/fs/selinux für die Verwaltung von SELinux wurde verbessert.
  • Netzwerksubsystem
    • Es wurde eine grundlegende Umstrukturierung der Netzwerkdatenstrukturen auf niedriger Ebene durchgeführt, um die Cache-Effizienz zu erhöhen. Zuvor waren die Felder in den Strukturen des Netzwerkstacks socks, netdev, netns und mibs in der Reihenfolge ihres Hinzufügens angeordnet, was die Nutzung des Prozessorkernels einschränkte. Die Überarbeitung der Variablenanordnung in den Strukturen führte zu einer signifikanten Steigerung der TCP-Geschwindigkeit, da die Nutzung von Cache-Zeilen während der Datenübertragung minimiert und der Zugriff auf Variablen optimiert wurde. Bei der Verarbeitung zahlreicher paralleler TCP-Verbindungen kann die Beschleunigung bis zu 40 % erreichen.
    • Das bpfilter-Subsystem, das BPF zur Paketfilterung verwendete, wurde entfernt. Bpfilter wurde mit der Version 4.18 eingeführt, erreichte jedoch nie den Status für eine breite Anwendung. In den letzten Jahren wurde der bpfilter-Code im Kernel nicht weiterentwickelt, während die Entwicklung in einem separaten Repository von Facebook fortgesetzt wurde.
  • Ausrüstung
    • Im Lieferumfang ist der neue DRM-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur enthalten. Dieser wird in Intel-Grafikkarten der Arc-Serie und in integrierter Grafik ab den Tiger Lake-Prozessoren verwendet. Der Xe-Treiber wird als Grundlage für die Implementierung neuer Chips positioniert und ist vom Code zur Unterstützung älterer Plattformen unabhängig. Der Treiber basiert auf einer neuen Architektur, die bestehenden Komponenten des DRM-Subsystems sowie generischen Treiberkomponenten des i915 verstärkt nutzt, die nicht an spezifische GPUs gebunden sind. Dazu gehört unter anderem der Code für die Interaktion mit Bildschirmen, das Speichermodell und die Implementierung von execbuf. In Mesa ist die Unterstützung für OpenGL und Vulkan ü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 die Intel LunarLake-Chips (Xe 2) weiterentwickelt. Zudem wurde die Unterstützung für die Intel Meteor Lake-Chips verbessert.
    • Im Nouveau-Treiber wurde eine Einstellung implementiert, um standardmäßig die GSP-Firmware-Funktionen für NVIDIA-GPUs der Mikroarchitekturen Turing und Ampere zu nutzen, bei denen die Initialisierungs- und Steueroperationen der GPU von einem separaten Mikrocontroller GSP (GPU System Processor) ausgeführt werden. Mit aktivierter Einstellung arbeitet der Treiber über den Zugriff auf die Firmware, anstatt direkte Programmierung der Hardwareinteraktionsoperationen vorzunehmen.
    • Der AMDGPU-Treiber unterstützt nun ACPI WBRF und VPE DPM, hat die Verarbeitung der PCIe-Kanalspeed geändert, verwendet 64-Bit-Sequenznummern in den dafür eingesetzten Synchronisierungswarteschlangen und bietet Unterstützung für AMD-spezifische Mechanismen zur Farbsteuerung. Zudem wurde ein Problem mit dem Übergang in den Energiesparmodus behoben.
    • Eine erste Implementierung des Treibers für die GPU Broadcom VideoCore 7.1, die auf Raspberry Pi 5-Boards verwendet wird, wurde hinzugefügt.
    • Ein Treiber für die PowerVR 6 GPU-Serie auf Basis der Rogue-Mikroarchitektur von Imagination Technologies wurde hinzugefügt.
    • Die Unterstützung für Thunderbolt/USB4-Controller, die in Chips der Mikroarchitektur Intel Lunar Lake integriert sind, wurde hinzugefügt.
    • Treiberversionen für Kameras, die in SoCs von Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave und THine THP7312 verwendet werden, wurden hinzugefügt.
    • Die Unterstützung für NSO-Spielecontroller (Nintendo Switch Online) wurde hinzugefügt – ältere Controller-Optionen von SNES (Super Nintendo), Genesis und N64 (Nintendo 64) wurden für Nintendo Switch angepasst. Ein Treiber für Adafruit Seesaw-Gamepads wurde hinzugefügt. Der xpad-Treiber unterstützt jetzt Controller von Lenovo Legion Go.
    • Die dts-Treiber unterstützen jetzt Spielgeräte wie Powkiddy RK2023, Powkiddy X55 und Anbernic RG351V.
    • Unterstützung für Audiosysteme an den NXP i.MX8m MICFIL-, Qualcomm SM8250-, AMD ACP5x-, Intel Arrow Lake-, SM8550-, SM8650- und X1E80100-Chips hinzugefügt.
    • AMD hat Änderungen vorgenommen, die die Unterstützung der zukünftigen Prozessorreihe auf Basis der neuen Mikroarchitektur Zen 5 betreffen.
    • Die Unterstützung für ARM64 SoCs 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 auf Basis von Marvell CN913x, Chromebook Lenovo, Asus und Acer auf Basis von Mediatek MT8183, Toradex Verdin AM62, Boards auf Basis von Allwinner H616/H618.
    • Die Unterstützung für ARM11 ARMv6K SMP-Prozessoren wurde eingestellt.

Gleichzeitig hat die lateinamerikanische Free Software Foundation eine vollständig freie Kernel-Variante 6.8 — Linux-libre 6.8-gnu veröffentlicht, die von Firmware-Elementen und Treibern bereinigt ist, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der Version 6.8 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen aktualisiert. Die Treiber 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 der Treiber atmel, hermes, orinoco_usb, libertas_cs und zd1201 eingestellt. Außerdem wurden die Namen der Blobs in den dts-Dateien (Device Tree) für die Architekturen ARM und Aarch64 bereinigt. Probleme bei der Bereinigung des Treibers i915 wurden behoben.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster