Kernel-Log – Was 2.6.33 bringt (2): Storage

Durch erweiterte Discard-Unterstützung beherrscht Linux 2.6.33 ATA Trim, was Lebensdauer und Durchsatz von SSDs steigern kann. Neu zum Linux-Kernel stießen nicht nur die HA-Lösung DRBD, sondern auch Treiber für Storage-Hardware von HP, LSI und VMware. Zahlreiche Detailverbesserungen gibt es am Code der Dateisysteme Btrfs, Ext4 und Reiserfs.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 18 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Zum Ende der vergangenen Woche hat Linus Torvalds die fünfte Vorabversion der in 4 bis 5 Wochen erwarteten Linux-Version 2.6.33 veröffentlicht. Normalerweise finden in dieser Phase des Entwicklungszyklus vorwiegend kleinere Änderungen und Korrekturen den Weg in den Hauptentwicklungszweig. Für Treiber machen die Kernel-Hacker aber gelegentlich Ausnahmen – bei Linux 2.6.33-rc5 stieß noch ein V4L/DVB-Treiber zum Kernel, der den auf diversen TV-Karten verbauten Mantis-Chipsatz unterstützt.

Die Neuheiten im V4L/DVB-Subsystem von Linux 2.6.33 sind allerdings Thema einer der kommenden Teile der Mini-Serie "Was 2.6.33 bringt" – nachdem sich der erste Teil der Serie den Änderungen im Netzwerkbereich gewidmet war, soll es jetzt um die Neuerungen rund um Dateisysteme und das Storage-Subsystem des Kernels gehen.

Einige Teile des Kernels bieten schon seit einigen Monaten eine rudimentäre "Discard"-Infrastruktur, über die Treiber für Massenspeicheradapter erfahren können, wenn Speicherbereiche eines Datenträgers freigegeben werden – etwa durch Löschen einer Datei oder Formatieren einer Partition. Sie wurde bei 2.6.33 überarbeitetet und ausgebaut; dadurch unterstützt nun auch das Libata-Subsystem Discard und kann Informationen über freigegeben Speicherbereite über das ATA-Kommando Trim an Massenspeicher weiterleiten. Das ist insbesondere für SSDs (Solid-State Disks) interessant, denn die erfahren auf diese Weise von freigegebenen Speicherbereichen und können so die SSD-eigene Garbage Collection optimieren – das steigert Performance und Lebensdauer von SSDs.

Damit die Discard-Infrastruktur voll zum Zuge kommt, müssen andere Teile des Kernels das Storage-Subsystem aber auch über freigegebene Bereiche informieren. Das Dateisystem Btrfs beherrscht das schon bei Linux 2.6.32, für Ext4 stieß entsprechender Code nun hinzu – da der aber noch nicht ausgiebig getestet wurde, ist die Funktion in der Standardkonfiguration vorerst inaktiv. Auch die neue Discard-Unterstützung im Code des FAT-Dateisystems ist optional.

Nachdem das maßgeblich von der in Wien ansässigen Firma Linbit entwickelte DRBD (Distributed Replicated Block Device) bei 2.6.32 noch außen vor blieb nahmen die Kernel-Hacker die vor allem im High-Availability-Umfeld eingesetzte Replikationslösung für 2.6.33 schließlich in Linux auf. DRBD lässt sich grob als "RAID-1-Gerät übers Netz" klassifizieren: Der oder die Datenträger eines als Master bezeichneten Systems werden in Echtzeit auf einem anderen ("Slave") gespiegelt – beim Ausfall des Masters übernimmt der Slave die Arbeit, ohne dass Ausfallzeiten entstehen. Damit die Daten immer synchron sind, betrachtet der Master Schreibzugriffe erst als beendet, wenn auch der Slave das Schreiben abgeschlossen hat. Detaillierter Erklärungen zu DRBD liefern ein LWN.net-Artikel sowie die ausführliche Dokumentation auf der DRBD-Homepage.

Mehrere Entwicklergruppen arbeiteten in den letzten Monaten und Jahren an verschiedenen Lösungen, um die maximale Menge an Daten zu beschränken, die einzelne Prozesse oder Prozessgruppen in einem Zeitfenster mit Datenträgern austauschen, und die an unterschiedlichen Stellen des Kernels eingreifen. Das Rennen gemacht hat jetzt das "Blkio Controller Cgroup Interface", das sich im CFQ-I/O-Scheduler (Completely Fair Queuing) einklinkt. Das ist aber keineswegs eine komplette Absage an die anderen Ansätze, sondern soll die Basis für weitere Verbesserungen und Funktionen bieten, die einige der konkurrierenden Lösungen ermöglichen. Hintergründe zum Thema finden sich über einen LWN.net-Artikel und die Dokumentation zum kurz Blkio genannten Framework.

Entfernt haben die Entwickler den Anticipatory I/O Scheduler (AS), der laut Commit-Kommentar nur eine Untermenge der Funktionen des CFQ-Schedulers bietet. Letzterer ist jetzt auch laut Beschreibung für Desktop und Server geeignet und bei vielen Distributionen ohnehin schon lange Standard. Ähnlich wie beim Prozess Scheduler gibt es mit nahezu jeder neuen Linux-Version zahlreiche Änderungen, die den CFQ-I/O-Scheduler für bestimmte Anwendungsszenarien optimieren – Details dazu finden sich über die Links im Abschnitt "die kleinen Perlen" am Ende dieses Artikels sowie im Haupt-Git-Pull-Request von Block-Subsystem-Verwalter Jens Axboe.

Verbessert wurde der Code zur Migration von mit mdadm verwalteten Software-RAIDs eines Levels in andere Level. Das MD-Subsystem unterstützt nun auch Schreibbarrieren – dadurch werden etwa Daten und Dateisystem-Journal in der von anderen Teilen des Kernels erwarteten Reihenfolge geschrieben. Das soll bei Abstürzen die Integrität von Dateisystemen besser sicherstellen, kann den Durchsatz aber spürbar schmälern, wie MD-Verwalter Neil Brown in seinem Haupt-Git-Pull-Request anmerkt. Weiter ausgebaut wurde auch die Unterstützung für Write Barriers im Device Mapper (DM) (Git-Pull-Request). Der bietet nun außerdem ein "Merge Target" (u. a. 1, 2), mit dessen Hilfe man zu einem Snapshot zurück wechseln kann – etwa nach einem Systemupdate, das Probleme verursacht (LWN.net-Artikel).

Die Treiber des IDE-Subsystems gelten nun offiziell als "deprecated" – Anwendern wird geraten, auf die schon länger im Kernel enthaltenen und nun nicht mehr als experimentell eingestuften (1, 2) PATA-Treiber des Libata-Subsystems umzusteigen. Die erhielten bei 2.6.33 zahlreiche Detailverbesserungen und Korrekturen – einige davon stammen von Bartlomiej Zolnierkiewicz, der bis vor einigen Monaten das IDE-Subsystem betreut hatte.

Neu zum Kernel stießen die im SCSI-Subsystem angesiedelten Treiber 3w-sas für den LSI 3ware 9750 und vmw_pvscsi für die virtuelle, von Gastsystemen gesehene Hardware mancher VMWare-Hypervisor. Neuere Smart Array Controller von HP lassen sich nun nicht mehr nur über den bei 2.6.33 optimierten und im Block-Subsystem beheimateten Treiber cciss ansprechen, sondern auch über den neuen Treiber hpsa; da er im SCSI-Subsystem angesiedelt ist, stellt er genau wie jeder andere SCSI- und Libata-Treiber zum Zugriff ein normales Device (/dev/sdx) zur Verfügung. Ebenfalls frisch zum Kernel stieß der Treiber pm8001 für SAS/SATA-HBAs mit dem PMC-Sierra-Chip SPC 8001.

Einige weitere Änderungen rund um Dateisysteme und den Storage-Code des Kernels:

  • Am experimentellen und von verschiedenen wichtigen Linux-Entwicklern als "Next Generation File System for Linux" auserkorenen Btrfs gab es bei 2.6.33 vorwiegend kleine Verbesserungen und Korrekturen, wie Hauptentwickler Chris Mason im Haupt-Git-Pull-Request für 2.6.33 schreibt.
  • Das auf dem Dateisystem-Code von Ext2 und Ext3 basierende Ext4 kann von nun an auch Ext2- und Ext3-Dateisysteme einbinden – in Umgebungen, wo es auf ein möglichst kleines Kernel-Image ankommt, lässt sich so ein wenig Platz sparen.
  • Zur Aufnahme bei 2.6.33 vorgeschlagen war auch das verteilte Dateisystem Ceph. Torvalds hat es allerdings fürs erste außen vor gelassen – wie er schreibt, waren dafür einerseits Zeitgründe verantwortlich, anderseits hätten sich zu wenig Kernel-Entwickler und Distributoren für die Aufnahme stark gemacht. Hintergründe dazu liefert ein Artikel bei LWN.net.
  • Der Reiserfs-Code hat zwar schon länger keinen offiziellen Betreuer mehr, ein Entwickler hat sich aber die Mühe gemacht, die Nutzung des Big Kernel Locks (BKL) im Reiserfs-Code erheblich zu reduzieren – dadurch soll das Dateisystem besser skalieren und manchmal ein klein wenig flotter arbeiten.
  • Einige der wichtigsten Neuerungen von nilfs2 nennt der Git-Pull-Request von Nilfs2-Maintainer Ryusuke Konishi.
  • Das Virtual File System (VFS) implementiert O_SYNC nun korrekt – auch dazu liefert ein Artikel bei LWN.net weitere Details.
  • Im XFS-Dateisystemcode gab es größere Umbauarbeiten, die den XFS-eigenen Tracing-Code durch solchen ersetzen, der auf die noch junge, sich im vergangenen Jahr aber erheblich weiter entwickelte Tracing-Infrastruktur des Kernels aufsetzt.

Viele weiteren nicht ganz so wichtige, 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 Kernel-Quellen auf Kernel.org. Im Webfrontend liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.

File systems

Btrfs

Ext[234]

Various others

Storage

Block

DM

Libata

MD

MFD/MMC/MTD

SCSI

Various others

Weitere Hintergründe und Informationen rund um die Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Ausgaben des Kernel-Log. (thl) (thl)