Release des Linux-Kernels 6.7

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds den Release des Linux-Kernels 6.7 vorgestellt. Zu den auffälligsten Änderungen gehören: die Integration des Dateisystems Bcachefs, die Einstellung der Unterstützung für die Itanium-Architektur, die Möglichkeit für Nouveau, mit GSP-R-Firmware zu arbeiten, die Unterstützung von TLS-Verschlüsselung in NVMe-TCP, die Verwendung von Ausnahmen in BPF, die Unterstützung von futex in io_uring, die Optimierung der Scheduler-Leistung fq (Fair Queuing), die Unterstützung der TCP-AO-Erweiterung (TCP Authentication Option) sowie die Möglichkeit, Netzwerkverbindungen im Landlock-Schutzmechanismus zu beschränken. Zudem wurde die Verwaltung des Zugriffs auf den User-Namespace und io_uring über AppArmor hinzugefügt.

In die neue Version wurden 18.405 Korrekturen von 2.066 Entwicklern aufgenommen, die Patchgröße beträgt 72 MB (die Änderungen betrafen 13.467 Dateien, hinzugefügt wurden 906.147 Zeilen Code, 341.048 Zeilen wurden entfernt). In der vorherigen Version gab es 15.291 Korrekturen von 2.058 Entwicklern, mit einer Patchgröße von 39 MB. Etwa 45% aller in 6.7 vorgestellten Änderungen stehen im Zusammenhang mit Gerätetreibern, ungefähr 14% betreffen die Aktualisierung architekturspezifischen Codes, 13% beziehen sich auf den Netzwerk-Stack, 5% auf Dateisysteme und 3% auf interne Kernsubsysteme.

Wesentliche Neuerungen im Kernel 6.7:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Der Kernel enthält den Code des Dateisystems Bcachefs, das die Leistungsfähigkeit, Zuverlässigkeit und Skalierbarkeit von XFS mit erweiterten Funktionen von Btrfs und ZFS kombiniert. Bcachefs unterstützt Funktionen wie die Einbindung mehrerer Geräte in ein Volume, mehrschichtige Speicherkonfigurationen (eine untere Schicht für häufig genutzte Daten auf schnellen SSDs und eine obere Schicht für weniger häufig benötigte Daten von Festplatten), Replikation (RAID 1/10), Caching, transparente Datenkompression (LZ4, gzip und ZSTD), Snapshot-Funktionalität, Integritätsprüfung durch Prüfziffern, die Speicherung von Reed-Solomon-Fehlerkorrekturcodes (RAID 5/6) 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 Dateisysteme, die auf dem Copy-on-Write-Mechanismus basieren, und zeigt Geschwindigkeiten, die nahe an Ext4 und XFS liegen.
    • Im Btrfs-Dateisystem wurde ein vereinfachter Quotenmodus eingeführt, der eine höhere Leistung ermöglicht, indem Extents nur in dem Unterverzeichnis verfolgt werden, in dem sie erstellt wurden. Dies vereinfacht die Berechnungen erheblich und erhöht die Leistungsfähigkeit, lässt jedoch Extents, die von mehreren Unterverzeichnissen gemeinsam genutzt werden, unberücksichtigt.
    • In Btrfs wurde eine neue Datenstruktur namens „Stripe Tree“ hinzugefügt, die sich für das logische Mapping von Extents eignet, wenn das physische Mapping auf verschiedenen Geräten nicht übereinstimmt. Diese Struktur wird vorerst in den Implementierungen RAID0 und RAID1 für zonierte Blockgeräte eingesetzt. In Zukunft wird geplant, diese Struktur auch in höheren RAID-Leveln zu verwenden, um einige der bestehenden Probleme in der aktuellen Implementierung zu beheben.
    • Im Ceph-Dateisystem wurde die Unterstützung für das Mapping von Benutzeridentifikatoren in eingehängten Dateisystemen implementiert, um die Dateien eines bestimmten Benutzers auf einem fremden eingehängten Abschnitt mit einem anderen Benutzer im aktuellen System zuzuordnen.
    • In efivarfs wurde die Möglichkeit hinzugefügt, uid und gid beim Mounten anzugeben, um die Änderung von UEFI-Variablen durch Prozesse zu ermöglichen, die ohne Root-Rechte ausgeführt werden.
    • In exFAT wurden ioctl-Aufrufe zum Lesen und Ändern von Dateisystemattributen hinzugefügt. Die Verarbeitung von Verzeichnissen mit null Größe wurde implementiert.
    • In F2FS wurde die Verwendung von Blöcken mit einer Größe von 16K ermöglicht.
    • Der Autofs-Automount-Mechanismus wurde auf die Verwendung der neuen API für das Anhä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-Belastung im Code zur Blockverteilung in Echtzeit optimiert. Es wurde die Möglichkeit der gleichzeitigen Durchführung von Leseoperationen und FICLONE sichergestellt.
    • Der EXT2-Code wurde auf die Verwendung von Seitenspeicher-Folianten (page folios) umgestellt.
  • Speicher und Systemdienste
    • Die Unterstützung der ia64-Architektur, die in Intel Itanium-Prozessoren verwendet wird, wurde eingestellt, da der Verkauf dieser Prozessoren 2021 vollständig eingestellt wurde. Die Itanium-Prozessoren wurden 2001 von Intel eingeführt, aber die ia64-Architektur konnte sich nicht gegen AMD64 behaupten, hauptsächlich aufgrund der höheren Leistung von AMD64 und eines reibungsloseren Übergangs von 32-Bit x86-Prozessoren. Daher verlagerte sich das Interesse von Intel auf x86-64-Prozessoren, während Itanium in den Hintergrund trat. Server HP Integrity, deren Bestellung vor drei Jahren eingestellt wurde. Der Code zur Unterstützung von ia64 wurde größtenteils aufgrund des langen Fehlens von Support für diese Plattform aus dem Kernel entfernt. Linus Torvalds hat jedoch Bereitschaft gezeigt, die ia64-Unterstützung wieder in den Kernel aufzunehmen, aber nur, wenn ein Betreuer gefunden wird, der eine qualitativ hochwertige Unterstützung dieser Plattform außerhalb des Hauptkernels für mindestens ein Jahr nachweisen kann.
    • Ein neues Kernel-Argument namens „ia32_emulation“ wurde hinzugefügt, das es ermöglicht, die Unterstützung für die Emulation des 32-Bit-Modus beim Booten in für die Architektur x86-64 kompilierten Kernen zu aktivieren oder zu deaktivieren. Praktisch betrachtet erlaubt dieses neue Argument das Kompilieren des Kerns mit Kompatibilität zu 32-Bit-Anwendungen, schaltet jedoch standardmäßig diesen Modus aus, um die Angriffsfläche auf den Kernel zu verringern, da die API zur Gewährleistung der Kompatibilität weniger getestet ist als die Hauptschnittstellen des Kerns.
    • Die Übertragung von Änderungen aus dem Rust-for-Linux-Zweig, die die Verwendung der Programmiersprache Rust als zweite Sprache für die Entwicklung von Treibern und Kernel-Modulen betreffen, wurde fortgesetzt (die Rust-Unterstützung ist standardmäßig nicht aktiviert und macht Rust nicht zu einer zwingenden Build-Abhängigkeit für den Kernel). In der neuen Version wurde auf die Nutzung von Rust 1.73 umgestiegen und ein Satz von Bindungen zur Arbeit mit Arbeitswarteschlangen (workqueues) vorgeschlagen.
    • Die Möglichkeit, den Mechanismus binfmt_misc zu verwenden, wurde bereitgestellt, um die Unterstützung neuer Formate für ausführbare Dateien hinzuzufügen (zum Beispiel zur Ausführung von kompilierten Anwendungen in Java oder Python) innerhalb separater, nicht privilegierter Namensräume.
    • Im cgroup-Controller cpuset, der die Zuordnung von CPU-Kernen während der Ausführung von Aufgaben verwaltet, wurde eine Trennung in lokale und remote Partitionierung implementiert, die sich darin unterscheidet, ob die übergeordnete cgroup eine gültige Wurzelpartition ist oder nicht. Zudem wurden im cpuset neue Einstellungen "cpuset.cpus.exclusive" und "cpuset.cpus.exclusive.effective" zur exklusiven Bindung an die CPU hinzugefügt.
    • Im BPF-Subsystem wurde die Unterstützung für Ausnahmen implementiert, die als sofortiger Ausstieg aus dem BPF-Programm behandelt werden, mit der Möglichkeit einer sicheren Rückverfolgbarkeit des Stackrahmens. Darüber hinaus ist die Verwendung von Kptr-Zeigern in BPF-Programmen in der Bindung an die CPU erlaubt.
    • Im io_uring-Subsystem wurde die Unterstützung für Operationen mit futex hinzugefügt, sowie neue Operationen implementiert: IORING_OP_WAITID (asynchrone Version von waitid), SOCKET_URING_OP_GETSOCKOPT (Version von getsockopt) und SOCKET_URING_OP_SETSOCKOPT (Version von setsockopt) sowie IORING_OP_READ_MULTISHOT (mehrfache Leseoperationen, die fortgesetzt werden, solange Daten vorhanden sind oder der Puffer nicht voll ist).
    • Es wurde eine Implementierung von leichten, einseitigen FIFO-Warteschlangen hinzugefügt, die für das Entfernen aus der Warteschlange im Prozesskontext eine Spin-Warteoperation erfordert und ohne Spin-Warteoperation für atomares Hinzufügen zur Warteschlange in jedem Kontext auskommt.
    • Ein Ringpuffer "objpool" wurde hinzugefügt, der eine skalierbare Implementierung einer hochleistungsfähigen Warteschlange zur Zuweisung und Rückgabe von Objekten bietet.
    • Ein erster Teil der Änderungen zur Implementierung der neuen API futex2 wurde hinzugefügt, die eine höhere Leistung auf NUMA-Systemen bietet, Größen abseits von 32 Bit unterstützt 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 implementiert, den in Clang 17 verfügbaren Shadow-Call-Stack-Prüfmodus zu nutzen, der dazu dient, die Rücksprungadresse aus einer Funktion bei einem Buffer Overflow im Stack zu schützen. Der Schutzmechanismus besteht darin, die Rücksprungadresse nach der Übergabe der Steuerung an die Funktion in einem separaten „Shadow“-Stack zu speichern und diese Adresse vor dem Verlassen der Funktion wieder abzurufen.
    • In den Mechanismus zur Zusammenführung identischer Arbeitsspeicherseiten (KSM: Kernel Samepage Merging) wurde ein neuer intelligenter Modus zur Seitenprüfung eingeführt, der fehlerhaft gescannte Seiten überwacht und die Intensität ihrer erneuten Prüfung reduziert. Um den neuen Modus zu aktivieren, wurde eine Einstellung unter /sys/kernel/mm/ksm/smart_scan hinzugefügt.
    • Eine neue ioctl-Anweisung PAGEMAP_SCAN wurde hinzugefügt, die in Kombination mit userfaultfd() dazu dient, Schreibvorgänge in einen bestimmten Speicherbereich festzustellen. Diese neue Funktion kann beispielsweise im System zur Speicherung und Wiederherstellung der Zustände von Prozessen in CRIU oder in Anti-Cheat-Systemen für Spiele verwendet werden.
    • Im Build-System wird bei Vorhandensein des Clang-Compilers standardmäßig der Build von Beispielen zur Nutzung des perf-Subsystems, die als BPF-Programme geschrieben sind, aktiviert.
    • Die alte Schicht videobuf, die zur Verwaltung von Frame-Buffer in der Medien-Subsystem verwendet wurde und vor über 10 Jahren durch die neue Implementierung videobuf2 ersetzt wurde, wurde entfernt.
  • Virtualisierung und Sicherheit
    • Im fscrypt-Subsystem wurde die Möglichkeit hinzugefügt, Daten in Blöcken zu verschlüsseln, die kleiner sind als die Blockgröße des Dateisystems. Dies kann erforderlich sein, um Hardware-Encryption-Mechanismen zu nutzen, die nur kleine Blöcke unterstützen (z.B. können UFS-Controller, die nur eine Blockgröße von 4096 unterstützen, mit Dateisystemen mit einer Blockgröße von 16K verwendet werden).
    • Im Subsystem »iommufd«, das die Verwaltung der IOMMU-Seitentabellen (I/O Memory-Management Unit) über Dateideskriptoren aus dem Benutzerspace ermöglicht, wurde das Tracking von noch nicht aus dem Cache verworfenen Daten (dirty) für DMA-Operationen hinzugefügt, was für die Identifikation von Speicher mit nicht verworfenen Daten bei der Migration von Prozessen erforderlich ist.
    • Im Landlock-Mechanismus, der die Interaktion einer Gruppe von Prozessen mit der Außenwelt einschränkt, wurde die Unterstützung für die Definition von Regeln zur Zugriffskontrolle auf TCP-Sockets hinzugefügt. Zum Beispiel kann eine Regel erstellt werden, die nur den Zugriff über den Netzwerkport 443 für die Einrichtung von HTTPS-Verbindungen erlaubt.
    • Im AppArmor-Subsystem wurde die Möglichkeit zur Zugriffskontrolle des io_uring-Mechanismus und zur Erstellung von Benutzeridentitäts-Namensräumen (User Namespaces) hinzugefügt, was es ermöglicht, den Zugriff auf diese Funktionen selektiv nur bestimmten Prozessen zu gewähren.
    • Eine API für die Attestierung wurde hinzugefügt. virtuellen Maschinen zur Bestätigung der Integrität des Prozesses beim Laden.
    • Auf LoongArch-Systemen wurde Unterstützung für Virtualisierung mit dem KVM-Hypervisor implementiert.
    • Bei der Verwendung des KVM-Hypervisors auf RISC-V-Systemen wurde die Unterstützung für die Smstateen-Erweiterung hinzugefügt, die den Zugriff der virtuellen Maschine auf CPU-Register verhindert, die vom Hypervisor eindeutig nicht unterstützt werden. Außerdem wurde die Unterstützung für den Einsatz der Zicond-Erweiterung in Gastsystemen hinzugefügt, die es ermöglicht, einige bedingte ganzzahlige Operationen zu verwenden.
    • In KVM-basierten Gastbetriebssystemen auf x86-Architektur sind bis zu 4096 virtuelle CPUs erlaubt.
  • Netzwerksubsystem
    • Der NVMe-TCP-Treiber (NVMe über TCP), der den Zugriff auf NVMe-Speicher über Netzwerke (NVM Express over Fabrics) unter Verwendung des TCP-Protokolls ermöglicht, unterstützt jetzt die Verschlüsselung der Datenübertragungsleitung mit TLS (KTLS und einen Hintergrundprozess im Benutzerraum tlshd zur Aushandlung der Verbindung).
    • Die Leistung des fq (Fair Queuing) Paketplaners wurde optimiert, was zu einer Steigerung der Bandbreite um 5 % bei hohen Lasten im tcp_rr (TCP Request/Response) Test und um 13 % bei unlimitiertem UDP-Paketfluss führte.
    • Das TCP-Protokoll hat die optionale Möglichkeit zur Verwendung von Zeitstempeln (TCP TS) mit Mikrosekunden genauigkeit (RFC 7323) hinzugefügt, was eine genauere Verzögerungsmessung ermöglicht und fortschrittlichere Steuerungs-Module für Überlastungen schafft. Zum Aktivieren 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 es ermöglicht, TCP-Header mithilfe von MAC-Codes (Message Authentication Code) zu verifizieren, wobei modernere Algorithmen wie HMAC-SHA1 und CMAC-AES-128 anstelle der zuvor verfügbaren TCP-MD5-Option, die auf dem veralteten MD5-Algorithmus basierte, verwendet werden.
    • Ein neuer Typ virtueller Netzwerkgeräte namens "netkit" wurde hinzugefügt, dessen Datenübertragungslogik durch ein BPF-Programm definiert wird.
    • Im KSMBD, einer kernbasierten Implementierung des SMB-Servers, wurde die Unterstützung für die Umwandlung von Dateinamen hinzugefügt, die zusammengesetzte Zeichen mit Surrogatpaaren enthalten.
    • Im NFS wurde die Implementierung der Streams mit RPC-Diensten verbessert. Es wurde die Unterstützung für die Delegierung von Schreibzugriffen (für NFSv4.1+) hinzugefügt. Im NFSD wurde die Unterstützung für den netlink-Handler rpc_status ergänzt. Die Unterstützung von NFSv4.x-Clients beim erneuten Exportieren in knfsd wurde ebenfalls verbessert.
  • Ausrüstung
    • Das Nouveau-Kernelmodul hat erste Unterstützung für GSP-RM-Firmware hinzugefügt, die in NVIDIA RTX 20+ GPUs verwendet wird, um die Initialisierungs- und Verwaltungsoperationen der GPU auf einen separaten GSP-Mikrocontroller (GPU System Processor) auszulagern. Die Unterstützung von GSP-RM ermöglicht es dem Nouveau-Treiber, durch Firmware-Aufrufe zu arbeiten, anstatt direkte Hardware-Interaktionsoperationen zu programmieren, was die Unterstützung neuer NVIDIA GPUs erheblich vereinfacht, da bereits vorhandene Aufrufe zur Initialisierung und Energiemanagement genutzt werden können.
    • Der AMDGPU-Treiber hat 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 Booten (ohne Flackern beim Wechsel des Videomodus) wurde verbessert.
    • Der i915-Treiber hat 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 wurde in die USB4 v2-Spezifikationen (120/40G) integriert.
    • Unterstützung für ARM SoC: 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 die Smartphones 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 die RISC-V-Platinen Milk-V Pioneer und Milk-V Duo hinzugefügt.
    • Unterstützung für die Audio-Schnittstellen von HUAWEI-Laptops mit AMD-CPU hinzugefügt. Unterstützung für zusätzliche Lautsprecher, die an die Dell Oasis 13/14/16 Laptops angeschlossen werden. Unterstützung für die integrierten Lautsprecher ASUS K6500ZC hinzugefügt. Unterstützung für die Stummschaltanzeige auf den Laptops HP 255 G8 und G10 hinzugefügt. Unterstützung für die Audiotreiber acp6.3 hinzugefügt. Unterstützung für die professionellen Audiointerfaces Focusrite Clarett+ 2Pre und 4Pre hinzugefügt.

Gleichzeitig hat die lateinamerikanische Stiftung für freie Software eine vollständig freie Version des Kernels 6.7 — Linux-libre 6.7-gnu, die von Firmware-Elementen und Treibern befreit ist, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist, erstellt. In der Version 6.7 wurde der Code zur Bereinigung von Blobs in verschiedenen Treibern und Subsystemen, wie zum Beispiel in den Treibern amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs und btqca, aktualisiert. Der Code zur Bereinigung der Treiber localtalk und rtl8192u wurde entfernt, da sie aus dem Kernel ausgeschlossen wurden. Unnötige Komponenten zur Bereinigung der Treiber xhci-pci, rtl8xxxu und rtw8822b, die zuvor irrtümlich hinzugefügt wurden, wurden entfernt. Der Name der Blobs in den dts-Dateien für die Architektur Aarch64 wurde bereinigt. Blobs in den neuen Treibern mt7925, tps6598x, aw87390 und aw88399 wurden entfernt.

Quelle: opennet.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster