Kernel-Log – Was 3.10 bringt (2): Dateisysteme und Storage
Mit Bcache ist ein zweites Framework zum SSD-Caching zum Kernel gestoßen. Kompaktere Metadaten sollen Btrfs beschleunigen. XFS kann seine Dateisystem-Strukturen jetzt mit Checksummen gegen Datenfehler absichern.
- Thorsten Leemhuis
Linux 3.10 wird den "Block-Layer Cache" Bcache mitbringen, über den sich ein Datenträger als Cache für andere Datenträger einrichten lässt – etwa eine schnelle SSD als Cache für eine langsamere Festplatte mit mehr Kapazität. Solch ein SSD-Cache kann den Zugriff auf häufig gelesene Daten beschleunigen und zu schreibende Daten zwischenspeichern, um sie später in einem ruhigen Moment auf langsamere Datenträger zu schreiben.
Bcache stammt vom Google-Mitarbeiter Kent Overstreet und wird von seinem Arbeitgeber schon länger produktiv eingesetzt; es ist nach dem bei Linux 3.9 integrierten Dm-Cache das zweite Cache-Framework dieser Art, das in den Linux-Kernel eingeht. Wie Alasdair Kergon, der Betreuer des Device Mappers, vor einem Monat auf dem LinuxTag erläuterte, gehen die beiden Lösungen etwas anders vor, daher sei je nach Umgebungsbedingungen die eine oder andere Lösung die bessere Wahl.
Bcache soll sich besser für Situationen eigenen, wo viele kleine Schreibzugriffe erfolgen, die dann geordnet auf die Festplatte transferiert werden können. Verschiedene Entwickler haben sich in letzter Zeit an Benchmarks der Caching-Lösungen versucht (u. a. 1, 2); oft lief dabei auch die EnhanceIO SSD Caching Software mit, die bislang nicht in den Linux-Kernel integriert wurde. Die Benchmarks ergeben allerdings kein klares Bild und es gab hier und da Kritik an den Messmethoden. Die Ergebnisse und Stimmen von Entwicklern lassen erkennen, dass jede Lösung unter bestimmten Bedingungen gut funktioniert, sich unter anderen aber unerwartet schlecht verhalten kann – offenbar brauchen alle noch ein wenig Reifezeit.
Dateisysteme
Entwicklungsstand
Am Sonntag hat Linus Torvalds die sechste Vorabversion von Linux 3.10 freigegeben. Zum Fertigstellungstermin von 3.10 machte er keine Andeutungen – er erwähnte allerdings, er habe nicht ganz so viel mit Subsystem-Maintainer fluchen müssen. Damit bezog er sich auf die Fluchandrohung in der Freigabe-Mail zum RC5; dort hatte er sich ungehalten gezeit, weil ihm die Entwickler sehr viele Änderungen zur Aufnahme zuschickten.In einer LKML-Diskussion zum RC6, ob fluchen denn förderlich sei, verteidigten Torvalds und andere Kernel-Entwickler ihren direkte Worte – einige der Statements dürften aber nicht ernst gemeint sein.
Das weiterhin experimentelle Dateisystem Btrfs kann jetzt die Metadaten für Extents kompakter ablegen und dadurch ein klein wenig flotter arbeiten. Ältere Kernel verstehen die neuen Dateisystemstrukturen nicht, daher werden sie nicht automatisch genutzt; Anwender müssen das neue Format explizit mit
btrfstune -x
Ähnlich muss man auch die experimentellen Funktionen in XFS aktivieren, durch die das XFS-Dateisystem nun zahlreiche Metadaten mit Checksummen versieht, um dort entstandene Inkonsistenzen zu erkennen – Details erläutert die Kernel-Dokumentation zur neuen Funktion.
Ext4 bietet nun einen reservierten, vor versehentlichen Änderungen geschützten Bereich; Bootloader können dort Code ablegen, der beim Systemstart über feste Sektorenangaben geladen werden kann.
Fuse (Filesystem in Userspace) unterstützt nun asynchrones Direct I/O (1, 2) und bietet ein Userspace-Interface für asynchrones I/O; beides soll unter anderem für GlusterFS interessant sein.
Storage
Block- und SCSI-Layer bringen nun Funktionen mit, um die zur Laufzeit nutzbaren Stromspartechniken von Storage-Hardware zu nutzen (1, 2).
Der vom Cluster-Dateisystem Ceph verwendete, aber auch unabhängig davon nutzbare Rados Block Device (RBD) unterstützt nun Layering; das ist etwa zum schnellen Klonen von Images interessant, die virtuelle Maschinen als Datenträger verwenden, da das neu erstellte Image auf dem vorhandene aufbauen kann und sich per Copy-on-Write füllt.
Über das neue Fabric-Modul isert lässt sich jetzt ein LIO-iSCSI-Target aufsetzen, das andere Rechner über die iSCSI Extensions for RDMA (iSER) ansprechen können.
Der Treiber für NVM Express (NMVe) beherrscht nun Discard und versteht SCSI-Kommandos inklusive unmap.
Die kleinen Perlen
Die kleinen Perlen
Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutenden Änderungen:
File Systems
- [
] Btrfs: add a rb_tree to improve performance of ulist search - [
C 1] Btrfs: add some free space cache tests - [
] Btrfs: automatic rescan after "quota enable" command - [
D] btrfs: document mount options in Documentation/fs/btrfs.txt - [
] Btrfs: don't allow device replace on RAID5/RAID6 - [
] Btrfs: improve the loop of scrub_stripe - [
] Btrfs: improve the performance of the csums lookup - [
2] Btrfs: Include the device in most error printk()s - [
] Btrfs: introduce a mutex lock for btrfs quota operations - [
C] btrfs: move leak debug code to functions - [
C] btrfs: update kconfig title - [
D] Documentation: update nfs option in filesystem/vfat.txt - [
C N3] efivarfs: Move to fs/efivarfs - [
] ext4: fix fio regression - [
C] ext4: fix Kconfig documentation for CONFIG_EXT4_DEBUG - [
] ext4: fix online resizing for ext3-compat file systems - [
D 1] ext4: introduce reserved space - [
] ext4: reserve xattr index for Rich ACL support - [
] ext4: speed-up releasing blocks on commit - [
N] f2fs: add tracepoints for sync & inode operations - [
] f2fs: give a chance to merge IOs by IO scheduler - [
3] f2fs: introduce a new global lock scheme - [
] f2fs: notify when discard is not supported - [
D] f2fs: update f2fs.txt related with discard at mkfs - [
C] fs: make binfmt support for #! scripts modular and removable - [
9] procfs: new helper - PDE_DATA(inode) - [
N3] SUNRPC: Add RPC based upcall mechanism for RPCGSS auth - [
C] SUNRPC: Load GSS kernel module by OID - [
DN1] SUNRPC: Use gssproxy upcall for server RPCGSS authentication. - [
2] xfs: add CRC checking to dir2 data blocks - [
2] xfs: add CRC checking to dir2 free blocks - [
8] xfs: add CRC checking to dir2 leaf blocks - [
] xfs: add CRC checks for quota blocks - [
3] xfs: add CRC checks to block format directory blocks - [
1] xfs: add CRC checks to remote symlinks - [
] xfs: add CRC checks to the AGF - [
1] xfs: add CRC checks to the AGFL - [
1] xfs: add CRC checks to the superblock - [
1] xfs: add CRC protection to remote attributes - [
9] xfs: add CRCs to attr leaf blocks - [
8] xfs: add CRCs to dir2/da node blocks - [
5] xfs: add support for large btree blocks - [
2] xfs: add version 3 inode format with CRCs - [
] xfs: implement extended feature masks - [
C 1] xfs: introduce CONFIG_XFS_WARN - [
] xfs: rework dquot CRCs - [
2] xfs: rework remote attr CRCs
Storage
- [
] aacraid: Dual firmware image support - [
I] ahci: add an observed PCI ID for Marvell 88se9172 SATA controller - [
] aio: change reqs_active to include unreaped completions - [
2] aio: remove retry-based AIO - [
] ata_piix: add PCI IDs for Intel BayTail - [
D] bcache: Documentation updates - [
] cciss: add cciss_allow_hpsa module parameter - [
] dm mpath: enable WRITE SAME support - [
] dm persistent data: support space map resizing - [
D 1] DM RAID: Add message/status support for changing sync action - [
] dm thin: detect metadata device resizing - [
D] Documentation: cfq-iosched: update documentation help for cfq tunables - [
N3] fnic: FIP VLAN Discovery Feature Support - [
N] iscsi-target: Add iscsit_transport API template - [
1] iscsi-target: Add iser-target parameter keys + setup during login - [
] libata: migrate ACPI code over to new bindings - [
1] lpfc 8.3.39: Fixed driver vector mapping to CPU affinity - [
] md: Allow devices to be re-added to a read-only array. - [
] MD: ignore discard request for hard disks of hybid raid1/raid10 array - [
] md/raid5: Change or of some order to improve efficiency. - [
DN] pata_imx: add devicetree support - [
I N9] pm80xx: Added SPCv/ve specific hardware functionalities and relevant changes in common files - [
I N9] qla2xxx: Enhancements to support ISPFx00. - [
C] qla2xxx: Update firmware link in Kconfig file. - [
6] qla4xxx: Add flash node mgmt support - [
] qla4xxx: Update driver version to 5.03.00-k7 - [
D 1] rapidio: documentation update for enumeration changes - [
] rbd: activate support for layered images - [
D] rbd: don't create sysfs entries for non-mapped snapshots - [
] scsi_dh_alua: Add module parameter to allow failover to non preferred path without STPG - [
4] scsi_transport_iscsi: Add flash node mgmt support - [
] sd: change to auto suspend mode - [
] target/file: Add UNMAP emulation support - [
] target/file: Add WRITE_SAME w/ UNMAP=1 emulation support - [
C N] ufs: Add Platform glue driver for ufshcd - [
2] writeback: replace custom worker pool implementation with unbound workqueue
Ein "C" im Bereich "[ ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "I" ausgezeichneten Patches rüsten neue PCI- oder USB-IDs nach; jene mit "D" verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer.
Die "Was Linux 3.10 bringt"-Serie
Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Ende Juni/Anfang Juli erwarteten Linux-Version 3.10 geben, da alle größeren Neuerungen bereits in den ersten beiden Entwicklungswochen integriert wurden; Linux 3.10 befindet sich seit dem in der Stabilisierungsphase, in der die Kernel-Hacker nur selten größeren Änderungen vornehmen.
Über einige der Neuerungen von Linux 3.10 hat das Kernel-Log bereits im Rahmen der Artikelserie "Was 3.10 bringt" berichtet:
In den kommenden Wochen werden noch Artikel zu den Änderungen an Infrastruktur und Treibern erscheinen.
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)