Release des Linux-Kernels 6.7

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds das Release des Linux-Kernels 6.7. Zu den bemerkenswertesten Änderungen gehören: Integration des Bcachefs-Dateisystems, Einstellung des Supports für die Itanium-Architektur, Möglichkeit der Verwendung von Nouvea mit GSP-R-Firmware, Unterstützung von TLS-Verschlüsselung in NVMe-TCP, die Möglichkeit, Ausnahmen in BPF zu verwenden, Unterstützung von futex in io_uring, Leistungsoptimierung des fq (Fair Queuing) Schedulers, Unterstützung der TCP-AO-Erweiterung (TCP Authentication Option) und die Möglichkeit, Netzwerkverbindungen im Landlock-Schutzmechanismus zu begrenzen. Zudem wurde der Zugriff auf den User-Namespace und io_uring über AppArmor hinzugefügt.

In die neue Version wurden 18405 Korrekturen von 2066 Entwicklern integriert, die Patchgröße beträgt 72 MB (die Änderungen betreffen 13467 Dateien, 906147 Codezeilen wurden hinzugefügt, 341048 Zeilen wurden gelöscht). In der vorherigen Version gab es 15291 Korrekturen von 2058 Entwicklern, die Patchgröße betrug 39 MB. Etwa 45 % aller in 6.7 eingeführten Änderungen betreffen Gerätetreiber, ungefähr 14 % der Änderungen beziehen sich auf die Aktualisierung von architekturspezifischem Code, 13 % stehen im Zusammenhang mit dem Netzwerk-Stack, 5 % mit Dateisystemen und 3 % mit internen Kernel-Subsystemen.

Die wichtigsten Neuerungen im Kernel 6.7:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Der Code des Bcachefs-Dateisystems wurde in den Kernel aufgenommen, das versucht, ein Leistungs-, Zuverlässigkeits- und Skalierbarkeitsniveau zu erreichen, das XFS eigen ist, in Kombination mit erweiterten Funktionen, die in Btrfs und ZFS vorhanden sind. Zum Beispiel unterstützt Bcachefs Funktionen wie das Einbinden mehrerer Geräte in ein Volume, mehrschichtige Speicher-Layouts (untere Schicht mit häufig genutzten Daten auf schnellen SSDs, während die obere Schicht weniger nachgefragte Daten von Festplatten enthält), Replikation (RAID 1/10), Caching, transparentes Datenkomprimierung (Modi LZ4, gzip und ZSTD), Snapshots, Integritätsprüfung durch Prüfziffern, die Möglichkeit, Reed-Solomon-Fehlerkorrekturcodes (RAID 5/6) zu speichern, sowie die Speicherung von Informationen in verschlüsselter Form (unter Verwendung von ChaCha20 und Poly1305). In Bezug auf die Leistung übertrifft Bcachefs Btrfs und andere Copy-on-Write-basierte Dateisysteme und zeigt Geschwindigkeiten, die denen von Ext4 und XFS nahekommen.
    • Im Btrfs-Dateisystem wurde ein vereinfachter Quotenmodus eingeführt, der eine höhere Leistung ermöglicht, indem nur die Extents in dem Unterbereich verfolgt werden, in dem sie erstellt wurden. Dies vereinfacht die Berechnungen erheblich und steigert die Leistung, ermöglicht jedoch nicht die Berücksichtigung von Extents, die gemeinsam in mehreren Unterbereichen verwendet werden.
    • Btrfs hat eine neue Datenstruktur namens „Stripe Tree“ erhalten, die für logisches Mapping von Extents geeignet ist, wenn das physische Mapping auf verschiedenen Geräten nicht übereinstimmt. Diese Struktur wird bisher in den Implementierungen RAID0 und RAID1 für zonierte Blockgeräte verwendet. In Zukunft wird geplant, diese Struktur auch in RAID-Implementierungen höheren Niveaus zu nutzen, um einige der bestehenden Probleme der aktuellen Implementierung zu lösen.
    • Im Ceph-Dateisystem wurde die Unterstützung für das Mapping von Benutzeridentifikatoren gemounteter Dateisysteme implementiert, das zur Zuordnung von Dateien eines bestimmten Benutzers auf einem fremden gemounteten Volume mit einem anderen Benutzer im aktuellen System verwendet wird.
    • In efivarfs wurde die Möglichkeit hinzugefügt, uid und gid beim Mounten anzugeben, um Prozessen, die ohne Root-Rechte ausgeführt werden, die Möglichkeit zu geben, UEFI-Variablen zu ändern.
    • In exFAT wurden ioctl-Aufrufe zum Lesen und Ändern von FS-Attributen hinzugefügt. Es wurde die Behandlung von Verzeichnissen mit null Größe implementiert.
    • In F2FS wurde die Verwendung von Blöcken mit einer Größe von 16K ermöglicht.
    • Der Automount-Mechanismus autofs wurde auf die Verwendung der neuen API zum Einhängen von Partitionen umgestellt.
    • In OverlayFS wurden die Mount-Optionen „lowerdir+“ und „datadir+“ vorgeschlagen. Die Unterstützung für das verschachtelte Mounten von OverlayFS mit xattrs wurde hinzugefügt.
    • In XFS wurde die CPU-Lastoptimierung im Code zur Blockverteilung in Echtzeit durchgeführt. Es wird die gleichzeitige Ausführung von Lesevorgängen und FICLONE ermöglicht.
    • Der EXT2-Code wurde auf die Verwendung von Seitenfolien (Page Folios) umgestellt.
  • Speicher und Systemdienste
    • Die Unterstützung der Architektur ia64, die in Intel Itanium-Prozessoren verwendet wird, wurde eingestellt. Der Verkauf dieser Prozessoren wurde 2021 vollständig eingestellt. Die Itanium-Prozessoren wurden 2001 von Intel eingeführt, aber die Architektur ia64 konnte sich nicht gegen AMD64 behaupten, hauptsächlich aufgrund der höheren Leistung von AMD64 und des reibungsloseren Übergangs von 32-Bit-x86-Prozessoren. Infolgedessen verlagerte sich Intels Interesse auf x86-64-Prozessoren, während Itanium im Wesentlichen HP Integrity, dessen Bestellungen vor drei Jahren eingestellt wurden, blieb. Server Der Code zur Unterstützung von ia64 wurde hauptsächlich aufgrund der langen Abwesenheit der Wartung dieser Plattform aus dem Kernel entfernt. Linus Torvalds hat sich jedoch bereit erklärt, die Unterstützung für ia64 im Kernel wiederherzustellen, aber nur, wenn jemand gefunden wird, der eine qualitativ hochwertige Wartung dieser Plattform außerhalb des Hauptkernels für mindestens ein Jahr nachweisen kann.
    • Ein neuer Kernel-Befehlszeilenparameter „ia32_emulation“ wurde hinzugefügt, mit dem die Unterstützung der Emulation des 32-Bit-Modus während des Ladevorgangs in für die Architektur x86-64 gebauten Kernen aktiviert und deaktiviert werden kann. Praktisch ermöglicht der neue Parameter das Erstellen eines Kerns mit Kompatibilitätsunterstützung für 32-Bit-Anwendungen, deaktiviert diesen Modus jedoch standardmäßig, um die Angriffsfläche des Kerns zu verringern, da die API zur Gewährleistung der Kompatibilität weniger getestet wurde als die Hauptkernschnittstellen.
    • Die Übertragung von Änderungen aus dem Rust-for-Linux-Branch, die mit der Verwendung von Rust als zweite Sprache zur Entwicklung von Treibern und Kernelmodulen zu tun haben, wurde fortgesetzt (die Unterstützung von Rust ist standardmäßig nicht aktiv und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört). In der neuen Version wurde auf die Verwendung von Rust 1.73 umgestellt und eine Reihe von Bindings für die Arbeit mit Arbeitswarteschlangen (workqueues) vorgeschlagen.
    • Die Möglichkeit, den Mechanismus binfmt_misc zu verwenden, wurde bereitgestellt, um die Unterstützung neuer Formate ausführbarer Dateien (z. B. zum Ausführen kompilierter Anwendungen in Java oder Python) innerhalb von separaten unprivilegierten Namespaces zu ermöglichen.
    • Im cgroup-Controller cpuset, der die Nutzung von CPU-Kernen bei der Ausführung von Aufgaben verwaltet, gibt es eine Trennung in lokales und entferntes Segmentieren (remote partition), die sich darin unterscheiden, ob die übergeordnete cgroup eine korrekte Wurzelsektion ist oder nicht. In cpuset wurden auch neue Einstellungen „cpuset.cpus.exclusive“ und „cpuset.cpus.exclusive.effective“ für die exklusive Bindung an die CPU hinzugefügt.
    • Im BPF-Subsystem wurde die Unterstützung für Ausnahmen implementiert, die als dringender Austritt aus dem BPF-Programm behandelt werden, mit der Möglichkeit einer sicheren Rückführung des Stapelrahmens. Außerdem ist die Verwendung von kptr-Zeigern in BPF-Programmen zur Bindung an die CPU erlaubt.
    • Im io_uring-Subsystem wurde die Unterstützung für Operationen mit Futexen hinzugefügt, sowie neue Operationen implementiert: IORING_OP_WAITID (asynchrone Version von waitid), SOCKET_URING_OP_GETSOCKOPT (Variante von getsockopt) und SOCKET_URING_OP_SETSOCKOPT (Variante von setsockopt) sowie IORING_OP_READ_MULTISHOT (mehrfache Leseoperationen, die nicht beendet werden, solange Daten vorhanden sind oder der Puffer voll ist).
    • Es wurde eine Implementierung von leichtgewichtigen, einfachen FIFO-Queues hinzugefügt, die nur für das Entfernen aus der Warteschlange im Kontext des Prozesses eine Spin-Lock benötigen und ohne Spin-Lock für das atomare Hinzufügen zur Warteschlange in jedem Kontext auskommen.
    • Ein Ringpuffer „objpool“ mit einer skalierbaren Implementierung hochleistungsfähiger Warteschlangen zur Allokation und Rückgabe von Objekten wurde hinzugefügt.
    • Ein erster Abschnitt von Änderungen zur Implementierung einer neuen API futex2 wurde hinzugefügt, die eine höhere Leistung auf NUMA-Systemen bietet, Größen unterstützt, die nicht 32 Bit entsprechen, und anstelle des multiplexierten Systemaufrufs futex() verwendet werden kann.
    • Für die Architekturen ARM32 und S390x wurde die Unterstützung des aktuellen Satzes (cpuv4) von BPF-Instruktionen hinzugefügt.
    • Für die RISC-V-Architektur wurde die Möglichkeit zur Nutzung des in Clang 17 verfügbaren Modus zur Überprüfung des Shadow-Call-Stacks implementiert, der zum Schutz vor Überschreibungen der Rücksprungadresse aus einer Funktion im Falle eines Überlaufs im Stapel dient. Der Schutz besteht darin, die Rücksprungadresse nach der Übergabe der Kontrolle an die Funktion in einem separaten „Shadow“-Stack zu speichern und diese Adresse vor dem Verlassen der Funktion abzurufen.
    • In den Mechanismus zur Zusammenführung identischer Speicherseiten (KSM: Kernel Samepage Merging) wurde ein neuer intelligenter Modus zur Überwachung von Speicherseiten integriert, der nicht erfolgreich gescannte Seiten verfolgt und die Intensität ihrer erneuten Scans verringert. Um den neuen Modus zu aktivieren, wurde eine Einstellung hinzugefügt: /sys/kernel/mm/ksm/smart_scan.
    • Es wurde ein neuer ioctl-Befehl PAGEMAP_SCAN hinzugefügt, der in Verbindung mit userfaultfd() verwendet wird und es ermöglicht, Schreibvorgänge in einen bestimmten Speicherbereich zu erkennen. Diese neue Funktion kann beispielsweise im System verwendet werden, um den Zustand von Prozessen durch CRIU zu speichern und wiederherzustellen oder in Anti-Cheat-Systemen von Spielen.
    • Im Build-System wird bei Vorhandensein des Clang-Compilers standardmäßig der Build von Beispielen zur Nutzung des perf-Subsystems, die in Form von BPF-Programmen geschrieben wurden, aktiviert.
    • Die alte videobuf-Schicht, die zur Verwaltung von Frame-Puffern im Mediabase-System verwendet wurde und vor mehr als 10 Jahren durch eine neue Implementierung von videobuf2 ersetzt wurde, wurde entfernt.
  • Virtualisierung und Sicherheit
    • Im fscrypt-Subsystem wurde die Möglichkeit zur Blockverschlüsselung von Daten hinzugefügt, die kleiner sind als die Blockgröße im Dateisystem. Dies könnte erforderlich sein, um Hardwaremechanismen zur Verschlüsselung zu aktivieren, die nur kleine Blöcke unterstützen (beispielsweise können UFS-Controller, die nur eine Blockgröße von 4096 unterstützen, mit einem Dateisystem mit einer Blockgröße von 16K verwendet werden).
    • Im Subsystem 'iommufd', das die Verwaltung von IOMMU-Speicherseitentabellen (I/O Memory-Management Unit) über Dateideskriptoren aus dem Benutzerraum ermöglicht, wurde das Tracking von noch nicht aus dem Cache zurückgegebene (dirty) Daten für DMA-Operationen hinzugefügt, was zur Identifizierung von Speicher mit nicht zurückgegebenen Daten bei der Migration von Prozessen notwendig ist.
    • Im Landlock-Mechanismus, der die Interaktion einer Gruppe von Prozessen mit der Außenwelt einschränkt, wurde die Unterstützung für die Festlegung von Zugriffsregelungen auf TCP-Sockets hinzugefügt. Beispielsweise kann eine Regel erstellt werden, die nur Zugriffe über den Netzwerkport 443 für die Einrichtung von HTTPS-Verbindungen zulässt.
    • Im AppArmor-Subsystem wurde die Möglichkeit zur Steuerung des Zugriffs auf den io_uring-Mechanismus und zur Erstellung von Benutzer-Namensräumen hinzugefügt, was es ermöglicht, den Zugriff auf diese Funktionen nur bestimmten Prozessen selektiv zu gestatten.
    • Eine API zur Attestierung wurde hinzugefügt. virtuelle Maschinen zur Bestätigung der Integrität ihrer Ladeprozesse.
    • Auf LoongArch-Systemen wurde die Unterstützung für Virtualisierung unter Verwendung des Hypervisors KVM implementiert.
    • Bei der Verwendung des Hypervisors KVM auf RISC-V-Systemen wurde die Unterstützung für die Smstateen-Erweiterung eingeführt, die den Zugriff virtueller Maschinen auf CPU-Register, die vom Hypervisor nicht unterstützt werden, blockiert. Außerdem wurde die Unterstützung für die Verwendung der Zicond-Erweiterung in Gastsystemen hinzugefügt, die einige bedingte Ganzzahloperationen ermöglicht.
    • In von KVM verwalteten Gastsystemen auf Basis der x86-Architektur ist die Verwendung von bis zu 4096 virtuellen CPUs erlaubt.
  • Netzwerksubsystem
    • Im NVMe-TCP-Treiber (NVMe über TCP), der den Zugriff auf NVMe-Speichergeräte über das Netzwerk (NVM Express über Fabrics) unter Verwendung des TCP-Protokolls ermöglicht, wurde die Unterstützung für die Verschlüsselung des Datenübertragungskanals mithilfe von TLS hinzugefügt (es wird KTLS und ein Hintergrundprozess im Benutzerspeicher tlshd zur Aushandlung der Verbindung verwendet).
    • Die Leistung des fq (Fair Queuing) Paketplaners wurde optimiert, was zu einer Steigerung der Durchsatzrate um 5 % bei hohen Lasten im tcp_rr (TCP Request/Response)-Test und um 13 % bei unlimitiertem UDP-Paketstrom führte.
    • Im TCP-Protokoll wurde die optionale Möglichkeit zur Verwendung von Zeitstempeln (TCP TS) mit Mikrosekunden-Genauigkeit (RFC 7323) hinzugefügt, was eine genauere Bewertung von Verzögerungen und die Erstellung fortschrittlicherer Staukontrollmodule ermöglicht. Zur Aktivierung kann der Befehl „ip route add 10/8 … features tcp_usec_ts“ verwendet werden.
    • Im TCP-Stack wurde die Unterstützung für die TCP-AO-Erweiterung (TCP Authentication Option, RFC 5925) hinzugefügt, die die Verifizierung von TCP-Headern mittels MAC-Codes (Message Authentication Code) ermöglicht und modernere Algorithmen wie HMAC-SHA1 und CMAC-AES-128 anstelle der zuvor verfügbaren TCP-MD5-Option auf Basis des veralteten MD5-Algorithmus verwendet.
    • Ein neuer Typ virtueller Netzwerkgeräte „netkit“ wurde hinzugefügt, bei dem die Logik der Datenübertragung durch ein BPF-Programm definiert wird.
    • In KSMBD, einer auf Kernel-Ebene betriebenen Implementierung eines SMB-Servers, wurde die Unterstützung für die Umwandlung von Dateinamen hinzugefügt, die zusammengesetzte Symbole mit Surrogatpaaren enthalten.
    • Im NFS wurde die Implementierung von Streams mit RPC-Diensten verbessert. Die Unterstützung für das Delegieren von Schreiboperationen (für NFSv4.1+) wurde hinzugefügt. Im NFSD wurde die Unterstützung des netlink-Handlers rpc_status hinzugefügt. Die Unterstützung von NFSv4.x-Clients bei der erneuten Bereitstellung in knfsd wurde verbessert.
  • Ausrüstung
    • Im Nouveau-Kernmodul wurde eine erste Unterstützung für GSP-RM-Firmware hinzugefügt, die in NVIDIA RTX 20+ GPUs verwendet wird, um die Initialisierungs- und Steueroperationen des GPUs an einen separaten Mikrocontroller GSP (GPU System Processor) auszulagern. Die Unterstützung für GSP-RM ermöglicht es dem Nouveau-Treiber, über den Zugriff auf die Firmware zu arbeiten, anstatt direkte Programmierungen zur Hardwareinteraktion durchzuführen, was die Hinzufügung neuer NVIDIA GPUs erheblich vereinfacht, da bereits vorhandene Aufrufe zur Initialisierung und Energieverwaltung genutzt werden können.
    • Im AMDGPU-Treiber wurde Unterstützung für GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 und DML2 implementiert. Die Unterstützung für nahtloses Laden (ohne Flackern beim Wechsel des Videoformats) wurde verbessert.
    • Im i915-Treiber wurde Unterstützung für Intel Meteor Lake-Chips implementiert und eine erste Umsetzung von Intel LunarLake (Xe 2) hinzugefügt.
    • Unterstützung für asymmetrische Übertragungskanäle, die in den Spezifikationen von USB4 v2 (120/40G) hinzugefügt wurden.
    • Unterstützung für ARM SoC hinzugefügt: Qualcomm Snapdragon 720G (verwendet in Xiaomi-Smartphones), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (verwendet in Routern und NAS).
    • Unterstützung für das Smartphone Fairphone 5 und ARM-Platinen Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30 hinzugefügt.
    • Unterstützung für RISC-V-Platinen Milk-V Pioneer und Milk-V Duo hinzugefügt.
    • Unterstützung für die Soundinterfaces von HUAWEI-Laptops, die mit AMD-CPUs geliefert werden. Unterstützung für zusätzliche Lautsprecher, die in Dell Oasis 13/14/16-Laptops installiert sind, hinzugefügt. Unterstützung für integrierte Lautsprecher des ASUS K6500ZC hinzugefügt. Unterstützung für die Stummschaltetaste auf HP 255 G8 und G10-Laptops hinzugefügt. Unterstützung für die Soundtreiber acp6.3 hinzugefügt. Unterstützung für professionelle Aufzeichnungsinterfaces Focusrite Clarett+ 2Pre und 4Pre hinzugefügt.

Zur selben Zeit hat die lateinamerikanische Freie Software-Stiftung eine vollständig freie Version des Kernels 6.7 – Linux-libre 6.7-gnu – veröffentlicht, die von Firmware- und Treiberelementen bereinigt ist, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung durch den Hersteller eingeschränkt ist. In der Version 6.7 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen aktualisiert, beispielsweise in den Treibern amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs und btqca. Der Code zur Bereinigung der Treiber localtalk und rtl8192u wurde aufgrund ihrer Ausschlusses aus dem Kernel entfernt. Überflüssige Komponenten der Bereinigung in den Treibern xhci-pci, rtl8xxxu und rtw8822b, die zuvor fälschlicherweise hinzugefügt wurden, wurden entfernt. Die Namen der Blobs in dts-Dateien für die Architektur Aarch64 wurden bereinigt. Blobs in den neuen Treibern mt7925, tps6598x, aw87390 und aw88399 wurden gelöscht.

Quelle: opennet.ru

60GB SSD 8Gb DDR4