Nach zwei Monaten Entwicklung prĂ€sentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.13. Zu den bemerkenswertesten Ănderungen gehören: der Modus des verzögerten Austauschs im Task-Scheduler, UnterstĂŒtzung fĂŒr atomare SchreibvorgĂ€nge in XFS und Ext4, das Mechanismus 'multigrain timestamps', ein adaptiver Polling-Modus im Netzwerk-Subsystem, die Möglichkeit des Aufbaus mit AutoFDO-Optimierungen, UnterstĂŒtzung fĂŒr den Sicherheitsmechanismus ARM65 Guarded Control Stack, Isolierung virtueller Maschinen mittles der ARM CCA-Erweiterung, getrennte Stacks in BPF, Entfernung von ReiserFS, der Treiber virtual-cpufreq, das Netlink-API net-shaper, der Modus zum Einbinden von tmpfs mit GroĂ-/Kleinschreibung und UnterstĂŒtzung von POSIX-Erweiterungen in SMB3 sowie der Treiber AMD Cache Optimizer.
Die neue Version beinhaltet 14.172 Korrekturen von 2.086 Entwicklern, die PatchgröĂe betrĂ€gt 46 MB (Ănderungen betreffen 15.375 Dateien, hinzugefĂŒgt wurden 598.707 Codezeilen, 406.294 Zeilen wurden entfernt). In der vorherigen Version gab es 14.607 Korrekturen von 2.167 Entwicklern, die PatchgröĂe betrug 37 MB. Etwa 52 % aller in 6.13 vorgenommenen Ănderungen hĂ€ngen mit GerĂ€tetreibern zusammen, etwa 13 % beziehen sich auf Aktualisierungen von architekturspezifischem Code, 11 % sind mit dem Netzwerkstack verbunden, 4 % mit Dateisystemen und 3 % mit internen Kernsubsystemen.
Die wichtigsten Neuerungen im Kernel 6.13:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Ein Mechanismus fĂŒr âmultigrain timestampsâ wurde hinzugefĂŒgt, der es ermöglicht, Informationen ĂŒber DateiĂ€nderungen oder den Zugriff mit mehr als einer Millisekunden-Genauigkeit zu erhalten, ohne die Leistung negativ zu beeinflussen. Die Erhöhung der Genauigkeit der Zeitstempel fĂŒhrt zu zusĂ€tzlichen Overhead, da die IntensitĂ€t des Schreibens von Metadaten auf die Festplatte zunimmt, daher werden in der vorgeschlagenen Implementierung genauere Zeitstempel nicht fĂŒr alle Dateien, sondern nur fĂŒr die erstellt, fĂŒr die Prozesse solche Zeitstempel ĂŒber den Aufruf von getattr() anfordern.
- Die UnterstĂŒtzung fĂŒr atomare Schreiboperationen wurde hinzugefĂŒgt, bei denen Daten, die gröĂer sind als die SektorgröĂe, atomar auf Speichermedien geschrieben werden, die diese Möglichkeit bieten. Derzeit ist die atomare Speicherung fĂŒr XFS, Ext4 im O_DIRECT-Modus (Direct I/O) und md RAID 0/1/10 implementiert.
- Ein neuer Mechanismus zur ZĂ€hlung von Verweisen fĂŒr Dateien wurde vorgeschlagen, der eine Leistungssteigerung von 3-5 % bei Arbeitslasten mit mehr als 255 Threads gewĂ€hrleistet.
- Die Implementierung des Dateisystems ReiserFS wurde entfernt, das vor zwei Jahren als veraltet erklÀrt wurde.
- Ein neuer sysctl-Parameter "fs.dentry-negative" wurde hinzugefĂŒgt, um die VFS-Politik zur Bereinigung von "dentry"-EintrĂ€gen (interne Darstellung von Verzeichniselementen) nach der Entfernung der zugehörigen Dateien festzulegen. FĂŒr bestimmte Arten von Lasten ist es vorteilhaft, solche EintrĂ€ge ĂŒber gelöschte Dateien zu behalten, wĂ€hrend sie fĂŒr andere entfernt werden sollten. Daher bietet der Kernel eine Auswahlmöglichkeit (standardmĂ€Ăig werden "dentry"-EintrĂ€ge nicht automatisch gelöscht).
- In den Systemaufruf statmount() wurde das Flag STATMOUNT_OPT_ARRAY eingefĂŒhrt, um eine Liste von Dateisystemoptionen als nullterminiertes String-Array zurĂŒckzugeben, ohne die Escape-Sequenz «\000» zu verwenden. UnterstĂŒtzung fĂŒr die RĂŒckgabe des Dateisystemtyps (fs_subtype, zur Bestimmung der Verwendung von FUSE), fĂŒr Optionen zum sicheren Mounten und fĂŒr den ursprĂŒnglichen Superblock (sb_source) wurde hinzugefĂŒgt.
- In OverlayFS wurde die Möglichkeit eingefĂŒhrt, Schichten ĂŒber Dateideskriptoren anzugeben, anstatt ĂŒber Dateipfade.
- In das Dateisystem tmpfs wurde die Option âcasefoldâ fĂŒr ein case-insensitives Arbeiten sowie die Option âstrict_encodingâ zum Verhindern der Erstellung von Dateien mit ungĂŒltigen UTF-8-Zeichen hinzugefĂŒgt.
- Ein neuer Satz von Systemaufrufen zur Verwaltung von erweiterten Dateiattributen wurde vorgeschlagen: setxattrat(), getxattrat(), listxattrat() und removexattrat(). Im Gegensatz zu den Systemaufrufen setxattr(), getxattr(), listxattr() und removexattr() erfordern die neuen Varianten die Angabe des Dateideskriptors des Verzeichnisses, auf das sich der Dateipfad bezieht.
- In Btrfs wurde die ioctl-Operation BTRFS_IOC_SUBVOL_SYNC_WAIT hinzugefĂŒgt, die das Warten auf den Abschluss der Bereinigung von Untervolumina umfasst und es ermöglicht, den Befehl «btrfs subvolume sync» durch einen nicht privilegierten Benutzer auszufĂŒhren, der keinen Zugang zu ioctl SEARCH_TREE hat (nĂŒtzlich in Backup-Anwendungen, die Untervolumina bereinigen). Die ioctl-Operation ENCODED_READ wurde hinzugefĂŒgt, um kodierte Daten ĂŒber io_uring zu lesen, beispielsweise um komprimierte Extents direkt ohne Dekomprimierung zu lesen. Die Arbeiten zum Ăbergang zur Verwendung von Seiten-Folianten (page folios) wurden fortgesetzt. Die Entstehung von konkurrierenden Sperren (âlock contentionâ) bei der Suche nach eingebetteten RĂŒckverweisen und beim Durchlaufen von Buffer-Extents wurde reduziert. Die Effizienz der Komprimierung der Extent-Karte wurde verbessert.
- Im EROFS-Dateisystem (Extendable Read-Only File System), das fĂŒr die Verwendung auf Partitionen entwickelt wurde, die im Nur-Lese-Modus verfĂŒgbar sind, wurde die Möglichkeit zur Verwendung der Optionen SEEK_HOLE und SEEK_DATA im Systemaufruf lseek() implementiert.
- F2FS unterstĂŒtzt jetzt die GerĂ€tealiasierung, die es ermöglicht, temporĂ€r einen Bereich in F2FS zu reservieren, um eine Partition des BlockgerĂ€ts in einem anderen Dateisystem zu verwenden. Nach Abschluss der externen Operation kann der reservierte Bereich wieder in F2FS zurĂŒckgegeben werden. Zum Beispiel kann man ein Dateisystem mit dem Befehl "mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb" erstellen, nachdem dessen Inhalt im GerĂ€t /dev/vdc reserviert und auf die Datei vdc.file gespiegelt wird. Der Bereich /dev/vdc kann dann fĂŒr eigene Zwecke genutzt werden, beispielsweise um es fĂŒr ein anderes Dateisystem zu formatieren. Um den reservierten Inhalt zurĂŒckzugeben, reicht es aus, die Datei vdc.file zu löschen.
- In XFS wurde die UnterstĂŒtzung fĂŒr Quotas auf Realtime-GerĂ€ten implementiert. Zudem wurde ein Metadatenverzeichnis (metadata directory) hinzugefĂŒgt, in dem alle Inodes mit Metadaten gespeichert werden.
- Im FUSE-Mechanismus wurde die Möglichkeit zur dynamischen Ănderung der maximalen Seitenanzahl (FUSE_MAX_MAX_PAGES) implementiert, indem "sysctl fs.fuse.max_pages_limit" verwendet wird. Dabei kommen Seitenfolianten (page folios) zum Einsatz.
- In SMB wurde die UnterstĂŒtzung fĂŒr die POSIX-Erweiterungen fĂŒr SMB3 implementiert, die fĂŒr die Speicherung spezieller Dateitypen wie FIFO, GerĂ€tedateien und symbolische Links erforderlich sind. Es wurde die Möglichkeit hinzugefĂŒgt, ein Laufwerk mit einem alternativen Passwort zu mounten, das bei der Passwortrotation verwendet wird. Eine neue Mount-Option "cifs.upcall" wurde eingefĂŒhrt, um den Namensraum zu bestimmen. AuĂerdem wurde die Erkennung von symbolischen und BlockgerĂ€ten, die auf Windows NFS-Servern erstellt wurden, sichergestellt. Symbolische Links im WSL-Stil (Windows Subsystem for Linux) werden ebenfalls unterstĂŒtzt.
- Die Dateisysteme UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS und ECRYPTFS wurden auf die Verwendung der neuen API zum Mounten von Partitionen umgestellt.
- Die Dateisysteme ECRYPTFS, UFS und NILFS2 wurden auf die Verwendung von Seitenfolien (Page Folios) umgestellt.
- Speicher und Systemdienste
- Der Scheduler implementiert ein Modell der lazy Preemption (PREEMPT_LAZY), das dem Modell der vollumfĂ€nglichen Preemption fĂŒr Echtzeitanwendungen (RR/FIFO/DEADLINE) entspricht, jedoch die Preemption normaler Aufgaben (SCHED_NORMAL) bis zur Tick-Grenze verzögert. Diese Verzögerung reduziert die FĂ€lle von Preemption von Lock-Inhabern, was die Leistung nĂ€her an Konfigurationen bringt, die ein Modell der freiwilligen Preemption verwenden. Dadurch ermöglicht das neue Modell, die Möglichkeiten der vollumfĂ€nglichen Preemption fĂŒr Echtzeitanwendungen zu bewahren, minimiert jedoch die LeistungseinbuĂen bei normalen Aufgaben. DarĂŒber hinaus vereinfacht das neue Modell die Logik der Preemption-Operationen im Kernel, indem es Handler, die sich in anderen Komponenten des Kernels befinden (auĂerhalb des Task-Schedulers), aus dem Scheduling-Prozess ausschlieĂt.
- Beim Zusammenstellen mit dem Clang-Compiler besteht die Möglichkeit, Optimierungen zu verwenden.
Quelle: opennet.ru
