Kernel-Log – Was 2.6.38 bringt (2): Dateisysteme | heise online

Kernel-Log – Was 2.6.38 bringt (2): Dateisysteme

Linux 2.6.38 enthält die schon seit über einem halben Jahr viel diskutierten und von Torvalds heiß erwarteten Patches, die die Skalierbarkeit des VFS verbessern. Ext3 und XFS beherrschen nun das für SSDs interessante Batched Discard; Btrfs und SquashFS unterstützten neue Kompressionstechniken.

vorlesen Druckansicht 17 Kommentare lesen
Lesezeit: 11 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Am Mittwoch hat Linus Torvalds die fünfte Vorabversion der Ende März erwarteten Kernel-Version 2.6.38 freigegeben und dabei angemerkt, dass einige Fehler korrigiert worden seien, aber keine Änderung besonders hervor sticht und die Dinge ziemlich normal aussehen. Das Kernel-Log nimmt das zum Anlass, den Überblick über die wichtigsten Neuerungen von Linux 2.6.38 mit dem zweiten Teil der Mini-Serie "Was 2.6.38 bringt" fortzusetzen. Die wichtigsten Änderungen rund um Grafiktreiber hatten wir bereits im ersten Teil beschrieben; in den kommenden Wochen folgen noch Artikel zur Netzwerkunterstützung, zu Storage-Hardware, Treibern sowie Architektur- und Infrastruktur-Code.

Die für 2.6.38 integrierten Optimierungen am VFS (Virtual File System), das Basis-Funktionen für alle Dateisysteme bereitstellt, waren Torvalds besonders wichtig, denn er erwähnte sie mit einer gewissen Begeisterung und recht ausführlich in der Mail zur ersten Vorabversion von 2.6.38 (u. a. 1, 2, 3, 4, 5, 6, 7). Durch diese unter Namen wie "RCU-based name lookup" entwickelten Änderungen nutzt das VFS, das allen Dateisystemen zugrunde liegt, feineres Locking mit RCU (Read Copy Update), was unter anderem einige Verzeichnisoperationen erheblich beschleunigen soll. Davon sollen nicht nur größere Server mit vielen Prozessorkernen, sondern auch Allerweltssysteme profitieren; Torvalds gibt in der Freigabemail an, bei bestimmten Tests Performance-Verbesserungen von 30 bis 50 Prozent zu sehen. Bereits in einer früheren Mail zur Aufnahme der tief greifenden Optimierungen an dem – für die zuverlässige Funktion des Kernels sehr wichtigen – VFS hatte er geschrieben, dass ein mit gefüllten Caches in seinem Home-Verzeichnis ausgeführtes Find-Kommando rund 35 Prozent schneller arbeite – und das, obwohl Find nur mit einem Thread arbeite.

Die Entwicklung der Optimierungen hatte Nick Piggin über ein Jahr lang vorangetrieben. Torvalds hätte Vorläufer der Patches, die auch unter Bezeichnungen wie "vfs-scale" und "RCU-walk" kursieren, schon bei 2.6.36 integrieren wollen – die beteiligten Entwickler einigten sich damals aber darauf, nur einige recht ungefährliche Änderungen als Grundlage zu integrieren. Weitere Änderungen folgten bei 2.6.37, wo ein anderer Entwickler ähnlich gelagerte und teilweise auf Piggins Ideen basierende Optimierungen für das VFS vorstellte, was zu Diskussionen über die beste Herangehensweise führte. Details dazu und nähere Erklärungen zur Funktionsweise der jetzt und in den vergangenen Monaten vorgenommenen VFS-Änderungen liefert lwn.net in den englischsprachigen Artikeln "VFS scalability patches in 2.6.36", "Resolving the inode scalability discussion" und "Dcache scalability and RCU-walk"; einige für Dateisystementwickler wichtige Hinweise erläutert Piggin in einer LKML-Mail.

Ext3 und XFS werden mit 2.6.38 das beim 37er-Kernel eingeführte Batched Discard unterstützen, das insbesondere für SSDs mit langsamer Trim-Funktion wichtig ist (1, 2, 3). In der Commit-Message zur XFS-Änderung weist Christoph Hellwig explizit darauf hin, den Batched Discard nicht während normaler Workloads anzustoßen, da die Suche nach freien Speicherbereichen größere Performance-Einbußen mit sich bringt. Einige weitere der in 2.6.37 und 2.6.38 eingeflossenen XFS-Änderungen erwähnt der Kernel-Hacker im "XFS status update for January 2011" – darunter einige Optimierungen am Locking-Code des Log-Subsystems, das dadurch deutlich besser skalieren soll.

Commit-Kommentar mit Messwerten zur neuen LZO-Kompression in Btrfs.

Im Merge Window von 2.6.37 hatten die Kernel-Hacker einige Patches zum Steigern der Ext4-Performance integriert; die darunter befindliche und große Zuwächse versprechende "Multiple Page-IO Submission" mussten sie allerdings aufgrund ungelöster Probleme kurz vor Fertigstellung dieser Kernel-Version deaktivieren. Diese Fehler wurden zwischenzeitlich korrigiert – teilweise jedoch erst in der Stabilisierungsphase von 2.6.38. Die über eine Option einschaltbare Technik bleibt daher auch in 2.6.38 ausgeschaltet und soll im Merge Window von 2.6.39 wieder standardmäßig aktiviert werden.

Das weiterhin experimentelle COW-Dateisystem Btrfs kann zur transparenten Kompression neben Zlib nun auch LZO nutzen, das typischerweise erheblich schneller, aber nicht ganz so effizient packt; einige Messwerte, die das untermauern, und einen Vergleich zu einem unkomprimierten Dateisystem liefert der Commit-Kommentar (1, 2). Btrtfs beherrscht nun auch schreibgeschützte Snapshots; in seinem Haupt-Git-Pull-Request erwähnt Btrfs-Entwickler Chris Mason zudem einige Korrekturen im Code zur Unterstützung von Dateisystemen, die mehrere Datenträger überspannen.

Das von vielen Linux-Distributionen für Live- und Installationsmedien verwendete Dateisystem SquashFS unterstützt ab 2.6.38 die Komprimierung der Dateisystem-Images mit dem aus LZMA hervorgegangenen Kompressionsformat XZ (1, 2). Da das für sehr hohe Packdichten bekannt ist, dürften einige Live-Medien in Zukunft Platz für ein paar Programme mehr als zuvor bieten. Die Fedora-Entwickler wollen es bei der im Mai erwarteten Version 15 einsetzen und geben an, dass eine Live-DVD mit Spielen bei der Komprimierung mit XZ rund 8 Prozent kleiner ausfiel. Für manche Distributionen ist die neue Komprimierungsart ein alter Hut, denn sie hatten schon länger Vorläufer der jetzt integrierten Patches an Bord, obwohl Torvalds diese bei 2.6.34 nicht aufnehmen wollte.

Das bei optischen Medien wie DVD genutzte UDF-Dateisystem kommt ab 2.6.38 nun ohne das Big Kernel Lock (BKL) aus. Damit haben die Entwickler nach der BKL-Entfernungs-Aktion bei 2.6.37 nun den letzten auf typischen Systemen eingesetzten Kernel-Bestandteil vom BKL befreit. Es gibt zudem einen groben Schlachtplan, um auch die verbliebenen Nutzer des BKLs aus der Welt zu schaffen.

Über den Systemaufruf fallocate() können Programme das Dateisystem nun über ungenutzte Bereiche in der Mitte von Dateien informieren (1, 2; LWN: "Punching holes in files"). Dieser bislang nur von OCFS2 und XFS unterstützten Mechanismus sollte etwa Virtualisierungsprogramme in die Lage versetzen, nicht mehr genutzte Speicherbereiche von Festplatten-Images wieder freizugeben, die als Sparse-Dateien vorliegen – dazu müsste das Gastsystem den Host aber irgendwie über nicht mehr genutzte Speicherbereiche informieren.

Das VFS bietet nun bessere, im Rahmen eines Patch-Reviews erläuterte Unterstützung für automount (u. a. 1, 2, 3). nfsd4-Verwalter J. Bruce Fields hebt in seinem Haupt-Git-Pull-Request einige der Verbesserungen am NFS-4-Daemon hervor, die zur Server-seitigen Unterstützung von NFS 4.1 nötig sind; dabei verweist er auch auf eine Seite im NFS-Wiki, die einen Überblick über die verbleibenden für 4.1-Unterstützung benötigten Änderungen gibt.

Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs mit den "offiziellen" Kernel-Quellen auf Kernel.org. Der über diese Links angezeigten Commit-Kommentar und der darunter ausgegebene Patch liefern zahlreiche weitere Informationen zur jeweiligen Änderung.

Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" steht für Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl). (thl)