Linux 6.7-Kernel-Release

Nach zweimonatiger Entwicklungszeit präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.7. Zu den bemerkenswertesten Änderungen gehören: Integration des Bcachefs-Dateisystems, Einstellung der Unterstützung für die Itanium-Architektur, die Fähigkeit von Nouvea, mit der GSP-R-Firmware zu arbeiten, Unterstützung für TLS-Verschlüsselung in NVMe-TCP, die Möglichkeit, Ausnahmen in BPF zu verwenden, Unterstützung für Futex in io_uring, Optimierung der fq-Schedulerleistung (Fair Queuing), Unterstützung für die TCP-AO-Erweiterung (TCP-Authentifizierungsoption) und die Möglichkeit, Netzwerkverbindungen im Landlock-Sicherheitsmechanismus einzuschränken, Zugriffskontrolle für Benutzernamensraum und io_uring hinzugefügt über AppArmor.

Die neue Version enthält 18405 Fixes von 2066 Entwicklern, die Patchgröße beträgt 72 MB (die Änderungen betrafen 13467 Dateien, 906147 Codezeilen wurden hinzugefügt, 341048 Zeilen wurden gelöscht). Die letzte Version enthielt 15291 Fixes von 2058 Entwicklern, die Patchgröße betrug 39 MB. Ungefähr 45 % aller in 6.7 eingeführten Änderungen beziehen sich auf Gerätetreiber, ungefähr 14 % der Änderungen beziehen sich auf die Aktualisierung von Code, der für Hardwarearchitekturen spezifisch ist, 13 % beziehen sich auf den Netzwerkstapel, 5 % beziehen sich auf Dateisysteme und 3 % beziehen sich auf beziehen sich auf interne Kernel-Subsysteme.

Wichtige Neuerungen im Kernel 6.7:

  • Festplattensubsystem, E/A und Dateisysteme
    • Der Kernel übernimmt den Bcachefs-Dateisystemcode, der versucht, die Leistung, Zuverlässigkeit und Skalierbarkeit von XFS zu erreichen, kombiniert mit Elementen der erweiterten Funktionalität von Btrfs und ZFS. Bcachefs unterstützt beispielsweise Funktionen wie die Einbindung mehrerer Geräte in eine Partition, mehrschichtige Laufwerkslayouts (die untere Schicht mit häufig genutzten Daten basierend auf schnellen SSDs und die oberste Schicht mit weniger genutzten Daten von Festplatten), Replikation (RAID). 1/10), Caching, transparente Datenkomprimierung (LZ4-, gzip- und ZSTD-Modi), State Slices (Snapshots), Integritätsüberprüfung mithilfe von Prüfsummen, die Möglichkeit, Reed-Solomon-Fehlerkorrekturcodes (RAID 5/6) zu speichern, Informationen in zu speichern verschlüsselte Form (ChaCha20 und Poly1305 werden verwendet). In Bezug auf die Leistung liegt Bcachefs vor Btrfs und anderen Dateisystemen, die auf dem Copy-on-Write-Mechanismus basieren, und weist eine Betriebsgeschwindigkeit auf, die der von Ext4 und XFS nahekommt.
    • Das Btrfs-Dateisystem führt einen vereinfachten Quotenmodus ein, mit dem Sie eine höhere Leistung erzielen können, indem Sie Extents nur in der Unterpartition verfolgen, in der sie erstellt werden. Dies vereinfacht die Berechnungen erheblich und verbessert die Leistung, ermöglicht Ihnen jedoch nicht die Berücksichtigung von Extents, die von mehreren gemeinsam genutzt werden Unterpartitionen.
    • Btrfs hat eine neue „Stripe Tree“-Datenstruktur hinzugefügt, die für die Zuordnung logischer Bereiche in Situationen geeignet ist, in denen physische Zuordnungen nicht auf allen Geräten übereinstimmen. Die Struktur wird derzeit in Implementierungen von RAID0 und RAID1 für Zonen-Blockgeräte verwendet. Zukünftig planen sie, diese Struktur in RAIDs höherer Ebenen zu verwenden, was eine Reihe von Problemen lösen wird, die in der aktuellen Implementierung bestehen.
    • Das Ceph-Dateisystem implementiert Unterstützung für die Zuordnung von Benutzer-IDs von gemounteten Dateisystemen, die verwendet werden, um die Dateien eines bestimmten Benutzers auf einer gemounteten Fremdpartition mit einem anderen Benutzer auf dem aktuellen System abzugleichen.
    • Es wurde die Möglichkeit hinzugefügt, UID und GID beim Mounten von efivarfs anzugeben, um Nicht-Root-Prozessen das Ändern von UEFI-Variablen zu ermöglichen.
    • Ioctl-Aufrufe zu exFAT zum Lesen und Ändern von FS-Attributen hinzugefügt. Handhabung von Verzeichnissen mit Nullgröße hinzugefügt.
    • F2FS implementiert die Möglichkeit, 16K-Blöcke zu verwenden.
    • Der autofs-Automount-Mechanismus wurde auf die Verwendung der neuen Partition-Mounting-API umgestellt.
    • OverlayFS bietet die Mount-Optionen „lowerdir+“ und „datadir+“. Unterstützung für die verschachtelte Bereitstellung von OverlayFS mit xattrs hinzugefügt.
    • XFS hat die CPU-Last im Echtzeit-Blockzuteilungscode optimiert. Es besteht die Möglichkeit, gleichzeitig Lese- und FICLONE-Operationen durchzuführen.
    • Der EXT2-Code wurde für die Verwendung von Seitenfolios konvertiert.
  • Speicher- und Systemdienste
    • Die Unterstützung der ia64-Architektur, die in Intel Itanium-Prozessoren verwendet wird, die 2021 vollständig eingestellt wurden, wurde eingestellt. Itanium-Prozessoren wurden 2001 von Intel eingeführt, aber die ia64-Architektur konnte nicht mit AMD64 konkurrieren, was hauptsächlich auf die höhere Leistung von AMD64 und den reibungsloseren Übergang von 32-Bit-x86-Prozessoren zurückzuführen ist. Infolgedessen verlagerten sich die Interessen von Intel zugunsten von x86-64-Prozessoren, und Itanium blieb weiterhin bei HP Integrity-Servern, deren Bestellungen vor drei Jahren eingestellt wurden. Code für die ia64-Unterstützung wurde hauptsächlich aufgrund des langfristigen Mangels an Unterstützung für diese Plattform aus dem Kernel entfernt, während Linus Torvalds seine Bereitschaft zum Ausdruck brachte, die ia64-Unterstützung für den Kernel zurückzugeben, jedoch nur, wenn es einen Betreuer gibt, der eine hohe Qualität nachweisen kann Unterstützung für diese Plattform außerhalb des Hauptkernels für mindestens ein Jahr.
    • Der Kernel-Zeilenbefehlsparameter „ia32_emulation“ wurde hinzugefügt, mit dem Sie die Unterstützung für die 32-Bit-Modus-Emulation in Kerneln, die für die x86-64-Architektur erstellt wurden, in der Boot-Phase aktivieren oder deaktivieren können. Praktischerweise ermöglicht Ihnen die neue Option, den Kernel mit Unterstützung für die Kompatibilität mit 32-Bit-Anwendungen zu erstellen, diesen Modus jedoch standardmäßig zu deaktivieren, um den Angriffsvektor auf den Kernel zu reduzieren, da die Kompatibilitäts-API weniger getestet wird als der Hauptkernel Schnittstellen.
    • Fortsetzung der Migration von Änderungen aus dem Rust-for-Linux-Zweig im Zusammenhang mit der Verwendung der Rust-Sprache als Zweitsprache für die Entwicklung von Treibern und Kernelmodulen (Rust-Unterstützung ist standardmäßig nicht aktiv und führt nicht zur Aufnahme von Rust in die erforderliche Assembly-Abhängigkeiten für den Kernel). Die neue Version vollzieht den Übergang zur Verwendung der Rust-Version 1.73 und bietet eine Reihe von Bindungen für die Arbeit mit Arbeitswarteschlangen.
    • Es ist möglich, den binfmt_misc-Mechanismus zu verwenden, um Unterstützung für neue ausführbare Dateiformate (z. B. zum Ausführen kompilierter Java- oder Python-Anwendungen) in separaten nicht privilegierten Namespaces hinzuzufügen.
    • Der Cgroup-Controller-Cpuset, mit dem Sie die Verwendung von CPU-Kernen beim Ausführen einer Aufgabe steuern können, bietet eine Unterteilung in lokale und Remote-Partitionierung, die sich darin unterscheiden, ob die übergeordnete Cgroup der richtige Root-Abschnitt ist oder nicht. Für die exklusive CPU-Bindung wurden auch neue Einstellungen „cpuset.cpus.exclusive“ und „cpuset.cpus.excluisve.efficient“ zu cpuset hinzugefügt.
    • Das BPF-Subsystem implementiert Unterstützung für Ausnahmen, die als Notausgang eines BPF-Programms verarbeitet werden und Stapelrahmen sicher entladen können. Darüber hinaus ermöglichen BPF-Programme die Verwendung von kptr-Zeigern in Verbindung mit der CPU.
    • Dem io_uring-Subsystem wurde Unterstützung für Operationen mit futex hinzugefügt und neue Operationen wurden implementiert: IORING_OP_WAITID (asynchrone Version von waitid), SOCKET_URING_OP_GETSOCKOPT (getsockoptand-Option), SOCKET_URING_OP_SETSOCKOPT (setsockopt-Option) und IORING_OP_READ_MULTISHOT (mehrere Lesevorgänge, die nicht anhalten). (es sind Daten vorhanden oder der Puffer ist nicht voll).
    • Implementierung einfacher, einfach verbundener FIFO-Warteschlangen hinzugefügt, die einen Spinlock nur zum Entfernen aus der Warteschlange in einem Prozesskontext erfordern und auf einen Spinlock für atomare Hinzufügungen zur Warteschlange in jedem Kontext verzichten.
    • Ein Ringpuffer „objpool“ mit einer skalierbaren Implementierung einer Hochleistungswarteschlange für die Zuweisung und Rückgabe von Objekten wurde hinzugefügt.
    • Der erste Teil der Änderungen wurde hinzugefügt, um die neue futex2-API zu implementieren, die eine bessere Leistung auf NUMA-Systemen bietet, andere Größen als 32 Bit unterstützt und anstelle des gemultiplexten futex()-Systemaufrufs verwendet werden kann.
    • Für ARM32- und S390x-Architekturen wurde Unterstützung für den aktuellen Satz (cpuv4) von BPF-Anweisungen hinzugefügt.
    • Für die RISC-V-Architektur ist es möglich, den in Clang 17 verfügbaren Shadow-Call Stack-Prüfmodus zu verwenden, der vor dem Überschreiben der Rücksprungadresse einer Funktion im Falle eines Pufferüberlaufs auf dem Stapel schützen soll. Der Kern des Schutzes besteht darin, die Rücksprungadresse in einem separaten „Schattenstapel“ zu speichern, nachdem die Steuerung an eine Funktion übergeben wurde, und diese Adresse vor dem Verlassen der Funktion abzurufen.
    • Dem Mechanismus zum Zusammenführen identischer Speicherseiten (KSM: Kernel Samepage Merging) wurde ein neuer Modus zum intelligenten Scannen von Speicherseiten hinzugefügt, der nicht erfolgreich gescannte Seiten verfolgt und die Intensität ihres erneuten Scannens verringert. Um den neuen Modus zu aktivieren, wurde die Einstellung /sys/kernel/mm/ksm/smart_scan hinzugefügt.
    • Ein neuer ioctl-Befehl PAGEMAP_SCAN wurde hinzugefügt, mit dem Sie bei Verwendung mit userfaultfd() die Fakten zum Schreiben in einen bestimmten Speicherbereich ermitteln können. Die neue Funktion kann beispielsweise im System zum Speichern und Wiederherstellen des Zustands von CRIU-Prozessen oder in Anti-Cheat-Systemen von Spielen verwendet werden.
    • Wenn im Assemblersystem der Clang-Compiler verfügbar ist, ist die Zusammenstellung von Beispielen für die Verwendung des Perf-Subsystems, geschrieben als BPF-Programme, standardmäßig aktiviert.
    • Die alte Videobuf-Schicht, die zur Verwaltung von Framebuffer im Mediensubsystem verwendet wurde und vor mehr als 10 Jahren durch eine neue Implementierung von Videobuf2 ersetzt wurde, wurde entfernt.
  • Virtualisierung und Sicherheit
    • Dem fscrypt-Subsystem wurde die Möglichkeit hinzugefügt, Daten in Blöcken zu verschlüsseln, die kleiner sind als die Blockgröße im Dateisystem. Dies kann erforderlich sein, um Hardwareverschlüsselungsmechanismen zu aktivieren, die nur kleine Blöcke unterstützen (zum Beispiel können UFS-Controller, die nur eine Blockgröße von 4096 unterstützen, mit einem Dateisystem mit einer Blockgröße von 16 KB verwendet werden).
    • Das „iommufd“-Subsystem, mit dem Sie IOMMU-Speicherseitentabellen (I/O Memory-Management Unit) über Dateideskriptoren aus dem Benutzerbereich verwalten können, hat die Verfolgung von Daten hinzugefügt, die noch nicht aus dem Cache (dirty) für DMA geleert wurden Vorgänge, die zur Bestimmung des Speichers mit nicht geleerten Daten während der Prozessmigration erforderlich sind.
    • Dem Landlock-Mechanismus wurde Unterstützung für die Definition von Zugriffskontrollregeln für TCP-Sockets hinzugefügt, die es Ihnen ermöglicht, die Interaktion einer Gruppe von Prozessen mit der externen Umgebung einzuschränken. Sie können beispielsweise eine Regel erstellen, die nur den Zugriff auf Netzwerkport 443 zum Aufbau von HTTPS-Verbindungen zulässt.
    • Das AppArmor-Subsystem hat die Möglichkeit hinzugefügt, den Zugriff auf den io_uring-Mechanismus zu steuern und Benutzernamensräume zu erstellen, wodurch Sie den Zugriff auf diese Funktionen selektiv nur bestimmten Prozessen erlauben können.
    • API zur Bescheinigung virtueller Maschinen hinzugefügt, um die Integrität des Startvorgangs der virtuellen Maschine zu überprüfen.
    • LoongArch-Systeme unterstützen die Virtualisierung mithilfe des KVM-Hypervisors.
    • Bei Verwendung des KVM-Hypervisors auf RISC-V-Systemen wurde Unterstützung für die Smstateen-Erweiterung angezeigt, die den Zugriff der virtuellen Maschine auf CPU-Register blockiert, die vom Hypervisor nicht explizit unterstützt werden. Außerdem wurde Unterstützung für die Verwendung der Zicond-Erweiterung in Gastsystemen hinzugefügt, die die Verwendung einiger bedingter Ganzzahloperationen ermöglicht.
    • In x86-basierten Gastsystemen, die unter KVM laufen, sind bis zu 4096 virtuelle CPUs erlaubt.
  • Netzwerk-Subsystem
    • Der NVMe-TCP-Treiber (NVMe over TCP), der den Zugriff auf NVMe-Laufwerke über das Netzwerk (NVM Express over Fabrics) mithilfe des TCP-Protokolls ermöglicht, bietet Unterstützung für die Verschlüsselung des Datenübertragungskanals mithilfe von TLS (unter Verwendung von KTLS und einem Hintergrundprozess). im Userspace tlshd für Verbindungsaushandlung).
    • Die Leistung des fq-Paketplaners (Fair Queuing) wurde optimiert, wodurch der Durchsatz bei starker Auslastung im tcp_rr-Test (TCP Request/Response) um 5 % und bei unbegrenztem Fluss von UDP-Paketen um 13 % gesteigert werden konnte.
    • TCP fügt eine optionale Zeitstempelfunktion mit Mikrosekundengenauigkeit (TCP TS) (RFC 7323) hinzu, die eine genauere Latenzschätzung und fortschrittlichere Überlastungskontrollmodule ermöglicht. Um es zu aktivieren, können Sie den Befehl „ip route add 10/8 ... Features tcp_usec_ts“ verwenden.
    • Der TCP-Stack hat Unterstützung für die TCP-AO-Erweiterung (TCP Authentication Option, RFC 5925) hinzugefügt, die es ermöglicht, TCP-Header mithilfe von MAC-Codes (Message Authentication Code) und den moderneren Algorithmen HMAC-SHA1 und CMAC-AES zu überprüfen. 128 stattdessen die zuvor verfügbare TCP-MD5-Option basierend auf dem alten MD5-Algorithmus.
    • Es wurde ein neuer Typ virtueller Netzwerkgeräte „Netkit“ hinzugefügt, dessen Datenübertragungslogik mithilfe eines BPF-Programms festgelegt wird.
    • KSMBD, eine Implementierung eines SMB-Servers auf Kernelebene, bietet jetzt Unterstützung für die Auflösung von Dateinamen, die Ersatzpaare aus zusammengesetzten Zeichen enthalten.
    • NFS hat die Implementierung von Threads mit RPC-Diensten verbessert. Unterstützung für Schreibdelegierung hinzugefügt (für NFSv4.1+). NFSD hat Unterstützung für den Netlink-Handler rpc_status hinzugefügt. Verbesserte Unterstützung für NFSv4.x-Clients beim erneuten Export nach knfsd.
  • Ausrüstung
    • Dem Nouveau-Kernelmodul wurde zunächst Unterstützung für die GSP-RM-Firmware hinzugefügt, die in der NVIDIA RTX 20+ GPU verwendet wird, um Initialisierungs- und GPU-Steuerungsvorgänge auf die Seite eines separaten GSP-Mikrocontrollers (GPU-Systemprozessor) zu verlagern. Durch die GSP-RM-Unterstützung kann der Nouveau-Treiber Firmware-Aufrufe verarbeiten, anstatt Hardware-Interaktionen direkt zu programmieren, wodurch es viel einfacher wird, Unterstützung für neue NVIDIA-GPUs hinzuzufügen, indem vorgefertigte Aufrufe für die Initialisierung und Energieverwaltung verwendet werden.
    • Der AMDGPU-Treiber unterstützt GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 und DML2. Verbesserte Unterstützung für nahtloses Laden (kein Flackern beim Umschalten des Videomodus).
    • Der i915-Treiber bietet Unterstützung für Intel Meteor Lake-Chips und fügt eine erste Implementierung von Intel LunarLake (Xe 2) hinzu.
    • Unterstützung für asymmetrische Übertragungskanäle zur USB4 v2 (120/40G)-Spezifikation hinzugefügt.
    • 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 Fairphone 5-Smartphone und die ARM-Boards 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 die RISC-V-Karten Milk-V Pioneer und Milk-V Duo hinzugefügt.
    • Unterstützung für Audioschnittstellen von HUAWEI-Laptops mit AMD-CPUs hinzugefügt. Unterstützung für zusätzliche Lautsprecher hinzugefügt, die auf Dell Oasis 13/14/16-Laptops installiert sind. Unterstützung für integrierte Lautsprecher ASUS K6500ZC hinzugefügt. Unterstützung für die Stummschaltungsanzeige auf HP 255 G8- und G10-Laptops hinzugefügt. Unterstützung für acp6.3-Audiotreiber hinzugefügt. Unterstützung für die professionellen Aufnahmeschnittstellen Focusrite Clarett+ 2Pre und 4Pre hinzugefügt.

Gleichzeitig hat die Latin American Free Software Foundation eine Version des völlig kostenlosen Kernels 6.7 erstellt – Linux-libre 6.7-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang begrenzt ist vom Hersteller. In Version 6.7 wurde der Blob-Reinigungscode in verschiedenen Treibern und Subsystemen aktualisiert, beispielsweise in den Treibern amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs und btqca. Der Code zum Bereinigen der Treiber localtalk und rtl8192u wurde aufgrund ihres Ausschlusses aus dem Kernel entfernt. Unnötige Komponenten zum Bereinigen der Treiber xhci-pci, rtl8xxxu und rtw8822b entfernt, die zuvor versehentlich hinzugefügt wurden. Blob-Namen in DTS-Dateien für die Aarch64-Architektur bereinigt. Blobs in den neuen Treibern mt7925, tps6598x, aw87390 und aw88399 entfernt.

Source: opennet.ru

Kommentar hinzufügen