Kernel-Log – Was 2.6.39 bringt (2): Storage und Dateisysteme
Einige von Torvalds hervorgehobene Änderungen an Interna des Block Layer sollen Performance und Skalierbarkeit verbessern. In diesen Bereichen legt auch das Ext4-Dateisystem zu. Das weiterhin experimentelle Btrfs beherrscht nun Batched Discard und LIO (Linux-Iscsi.org) eine Loopback-Funktion.
- Thorsten Leemhuis
Kernel-Hacker Andi Kleen hat Ende vergangener Woche eine Patch-Serie auf der LKML veröffentlicht, die ein alle Dateisysteme betreffendes Performance-Problem beseitigt. Es hat seinen Urspung beim Zusammenspiel zwischen Virtual File System (VFS) und der Security-Infrastruktur des Kernels und ist ein unerwünschter Seiteneffekt der bei 2.6.38 eingeflossenen Optimierungen am VFS. Torvalds zeigte sich überaus interessiert und nahm einen der Patches gleich in den Hauptentwicklungszweig auf; eine auf dem zweiten Patch von Kleen aufbauende Korrektur folgte am Ostermontag und soll das Problem beim Zusammenspiel mit SELinux beseitigen. Die Kernel-Hacker diskutieren noch, ob diese Patches wie von Torvalds angeregt in einen 38er-Stable-Kernel einziehen sollen.
Den fünften Release Candidate von Linux 2.6.39 hat Torvalds noch nicht veröffentlicht – vermutlich dürfte er in Kürze erscheinen, denn der RC4 ist bereits über eine Woche alt. Das Kernel-Log nimmt die fortschreitende Entwicklung des 39er-Kernels zum Anlass, die Mini-Serie "Was 2.6.39 bringt" mit der Beschreibung der Neuerungen rund um Storage-Infrastruktur und Dateisysteme fortzusetzen. Den Anfang dieser Artikel-Reihe hatte eine Übersicht der Änderungen an Netzwerk-Treibern und -Infrastruktur gemacht; in den kommenden Wochen werden noch Artikel zur Grafik-Treibern, Architektur-Code, Infrastruktur und Treibern für andere Hardware folgen.
Datenträger anstöpseln
Jens Axboe hat einige Interna im von ihm betreuten Block-Subsystem erheblich umstrukturiert. Das delegiert einige Aufgaben beim Schreiben von einem Geräte-spezifischen Puffer näher zum Code, der die Daten schreiben möchte (u. a. 1, 2). Das soll die Skalierbarkeit steigern und dadurch die Performance beim Einsatz der heute schnellsten Datenträger verbessern.
Dieses "New Block Device Plugging Model" war die einzige Änderung, der Torvalds in der Mail zur ersten Vorabversion von 2.6.39 besondere Aufmerksamkeit zukommen ließ; der Ansatz vermeide Sperren in einem viel genutzten Code-Pfad, mache den Code sauberer und sei überhaupt eine "wirklich gute Idee". Einige Hintergründe zur Motivation und der Funktionsweise erläutert Axboe in seinem Haupt-Git-Pull-Request; eine allgemeine Erklärung der Interna des Block Layer liefert er im LWN.net-Artikel "Explicit block device plugging".
Torvalds erwähnte in der Freigabe-Mail zum RC1, der Kernel habe durch einen Fehler an den Plugging-Änderungen zwischenzeitlich XFS-Dateisysteme "zum Frühstück verspeist". Auch nach dem RC1 gab es noch einige Probleme, die jedoch nicht so schwerwiegend waren – die meisten wurden zum RC4 beseitigt. Das zeigt, dass Datenverlust nicht gerade unwahrscheinlich ist, wenn man während des Merge Window den aktuellen Entwicklungsstand von Linux testet. Typischerweise beseitigen die Kernel-Hacker solche gravierenden Probleme allerdings sehr schnell. In der Stabilisierungsphase und speziell nach dem zweiten Release Candidate sind solch schlimme Fehler allerdings sehr selten: Die Kernel-Hacker versuchen sie von vorn herein zu vermeiden, um die ohnehin schon raren Tester nicht zu verschrecken.
Staccato: Block Layer
- Die bei 2.6.38 integrierte Target-Implementierung LIO (Linux-Iscsi.org) haben die Kernel-Hacker um das Modul tcm_loop erweitert, das eine lokale SPC-4-SCSI Emulation für beliebige Raw-Devices ermöglicht. Durch eine weitere Änderung sind in Zukunft einige allgemeine oder speziell zur statistischen Auswertung interessante Informationen via Sysfs abfragbar.
- Die Storage-Treiber ahci und ata_piix des 39er-Kernels unterstützen bereits jetzt die SATA-Adapter der "Panther Point"-Chipsätze (1, 2), die Intel vermutlich Anfang 2012 zusammen mit neuen Prozessoren einführen wird.
- Der AHCI-Treiber des 39er-Kernels spricht jetzt Marvells PCIe-SATA-6G-Controller 88se9125 an (1, 2).
- Das mit RAID 0 vergleichbare Funktionen bietende Device-Mapper-Target Striped unterstützt nun "Merge Methods", was die Performance beim Einsatz von XFS und Ext4 in bestimmten Situation etwas steigert. Der Device Mapper (DM) bringt nun das Target Flakey mit, das wie das Linear-Target funktioniert, aber zu Testzwecken gelegentlich Fehler einstreut.
- Zum Kernel stieß der Treiber bnx2fc, der einige Aufgaben für die Kommunikation über FCoe (Fibre Channel over Ethernet) an den NetXtreme II 57712 FCoE-Controller von Broadcom übergibt.
- Der Treiber aacraid unterstützt nun eine neue, "SRC-basierte" Controller-Familie von PMC-Sierra, die ein "0x28b" genanntes Interface aufweisen; das beherrschen laut einer Patch-Beschreibung die "Series-6-Chips", die auf RAID-Controllern mit "Advanced ROC (RAID-on-chip)" sitzen und Daten mit 6 GB/s übertragen.
- Das SCSI-Subsystem bietet nun bessere Unterstützung für die in der T10-Spezifikation SBC3r26 definierten Schnittstellen zum Logical Block Provisioning. Sei informieren SSDs oder Netzwerk-Speicherlösungen mit Thin Provisioning über das SCSI-Kommandos WRITE SAME und dessen UNMAP-Bit über freigewordene Speicherbereiche (1, 2); einige Hintergründe dazu liefern die "Solid-State Disk Deployment Guidelines" im Storage Administration Guide von RHEL 6.1 und der Artikel "Disk und Chips – Flash-SSDs in Servern und Storage-Systemen" in der iX 5/10.
- Zum vornehmlich im Embedded-Bereich verwendeten Subsystem für Memory Technology Devices (MTD) stieß ein Treiber, um MTD-Geräte zum Swappen zu nutzen.
- Es gab verschiedene Änderung an der Replikationslösung DRBD, wodurch die Kernel-Implementation bei 2.6.39 den Stand von DRBD 8.3.10 erreicht.
Dateisysteme
Btrfs, Ext-Familie
Ext4 nutzt in Zukunft standardmäßig die mblk_io_submit "Multiple Page-IO Submissions", was Performance und Skalierbarkeit erheblich verbessern soll. Der dahinter stehende Code war bei 2.6.37 zum Kernel gestoßen; die Ext-Entwickler legten die Funktion aber kurz vor der Fertigstellung dieser Linux-Version in der Voreinstellung lahm, da sie in einer bestimmten Situation zu Datenschäden führte; der Fehler wurde während der Stabilisierungsphase von 2.6.38 behoben. Ein größere Aktualisierung erfuhr die Ext4-Dokumentation des Kernels, die nun einige der neueren Mount-Parameter erläutert und die Dateien aufschlüsselt, die der Ext4-Code im Procfs und Sysfs anlegt.
Das weiterhin experimentelle Dateisystem Btrfs beherrscht ab 2.6.39 Batched Discard – eine bei 2.6.37 eingeführte Funktion, um SSDs und mit Hilfe von fstrim ab und zu über ungenutzte Speicherbereiche zu informieren. Via FS_IOC_SETFLAGS lässt sich nun datei- und verzeichnisweise festlegen, ob Btrfs "Copy on Write" (COW) oder Kompression nutzen soll. Laut Commit-Kommentar ist das eine Interims-Lösung, bis das VFS Funktionen bietet, um solche Eigenschaften festzulegen. Chris Mason erläutert diese beiden und einige weitere Btrfs-Änderungen in seinem Haupt-Git-Pull-Request zum von ihm betreuten Btrfs.
VFS
Über den neuen Syscall Sys_syncfs können unprivilegierte Userspace-Anwendungen den Kernel anweisen, alle zwischengespeicherten Daten eines einzelnen Dateisystems wegzuschreiben. Bislang ließ sich eine Synchronisierung nur systemweit anstoßen – Anwendungen haben das aber gemieden, weil es sonst zu kurzzeitigen Hängern kommt, wenn etwa ein NFS-Server nicht erreichbar ist.
Der Syscall Open kennt nun das Flag O_PATH, um einen "location only" File Descriptor zu erstellen, bei dem lediglich der Pfad aufgelöst wird; solche sind etwa zur Verwendung mit verschiedenen auf "at()" endenden Syscalls interessant. Ebenfalls neu ist das für Dateisysteme im Userspace interessante "Open by Handle", das LWN.net näher erläutert.
Staccato: Dateisysteme
- Das neue Dateisystem Pstore bietet Zugriff auf "Platform Persistent Storage" – nichtflüchtige und zumeist kleine Speicherbereiche, die manche Systeme mitbringen, damit Betriebssysteme dort im Falle eines Absturzes Daten zur Crash-Analyse ablegen können. Hintergründe dazu liefert LWN.net im Artikel "Persistent storage for a kernel's 'dying breath'".
- Die wichtigsten Neuerungen an XFS erläutert Christoph Hellwig im mittleren Drittel des "XFS status update for March 2011" (im erste Drittel spricht er von 2.6.39, meint aber 2.6.38). Dort erklärt er, der 39er-Kernel bringe vergleichsweise wenig erwähnenswerte XFS-Neuerung; die bedeutsamste sei das standardmäßige Einschalten des Delaylogs, was Metadata Performance and Skalierbarkeit verbessere.
Die kleinen Perlen: Dateisysteme
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 Änderungen.
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" oder "make xconfig" 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" kennzeichnet Ä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.
Btrfs
- [
N3] Btrfs: add initial tracepoint support for btrfs - [
1] Btrfs: cleanup how we setup free space clusters - [
] Btrfs: do not use async submit for small DIO io's - [
] Btrfs: don't force chunk allocation in find_free_extent - [
] Btrfs: fix /proc/mounts info. - [
] btrfs: make inode ref log recovery faster - [
] Btrfs: use a slab for the free space entries
Ext[234]
- [
5] ext4: add more tracepoints and use dev_t in the trace buffer - [
] ext4: allow inode_readahead_blks=0 (linux-2.6.37) - [
] ext4: enable acls and user_xattr by default - [
] ext4: make FIEMAP and delayed allocation play well together - [
] ext4: optimize ext4_bio_write_page() when no extent conversion is needed
Various
- [
D 1] adfs: add hexadecimal filetype suffix option - [
] Allow O_PATH for symlinks - [
] ceph: add ino32 mount option - [
] cifs: replace /proc/fs/cifs/Experimental with a module parm - [
D] exofs: Add option to mount by osdname - [
] fs/9p: Add buffered write support for v9fs. - [
] fs/9p: Add direct IO support in cached mode - [
] fs/9p: Add inode hashing - [
] fs/9p Add posixacl mount option - [
2] fs/9p: Add v9fs_inode - [
] fs/9p: Implement syncfs call back for 9Pfs - [
D] fs: remove inode_lock from iput_final and prune_icache - [
1] fs: simplify iget & friends - [
3] fs/vfs/security: pass last path component to LSM on inode creation - [
] GFS2: deallocation performance patch - [
] GFS2: Improve cluster mmap scalability - [
] GFS2: introduce AIL lock - [
] GFS2: Optimize glock multiple-dequeue code - [
2] GFS2: Use RCU for glock hash table - [
2] libceph: add lingering request and watch/notify event framework - [
D] lose 'mounting_here' argument in ->d_manage() - [
] net/9p Add gup/zero_copy support to VirtIO transport layer. - [
] net/9p Add preferences to transport layer. - [
] net/9p: Implement syncfs 9P operation - [
] net/9p: Introduce basic flow-control for VirtIO transport. - [
] net/9p readdir zerocopy changes for 9P2000.L protocol. - [
] NFS: Add secinfo procedure - [
] nfsd: add proc file listing kernel's gss_krb5 enctypes - [
1] NFS: lookup supports alternate client - [
1] NFSv4.1: add generic layer hooks for pnfs COMMIT - [
1] NFSv4.1: filelayout driver specific code for COMMIT - [
1] NFSv4.1: layoutcommit - [
D] NFSv4.1: lseg documentation - [
D] NFSv4: Send unmapped uid/gids to the server when using auth_sys - [
N] ocfs2: Add ocfs2_trace.h. - [
] proc: enable writing to /proc/pid/mem - [
] procfs: fix /proc/<pid>/maps heap check - [
] proc: protect mm start_code/end_code in /proc/pid/stat - [
D] pstore: use mount option instead sysfs to tweak kmsg_bytes - [
1] rbd: use watch/notify for changes in rbd header - [
] Revert "vfs: Export file system uuid via /proc/<pid>/mountinfo" - [
] Squashfs: add compression options support to xz decompressor - [
] Squashfs: extend decompressor framework to handle compression options - [
D] Squashfs: Update documentation to include compression options - [
D] UBIFS: do not check data crc by default - [
C] UBIFS: simplify UBIFS Kconfig menu - [
C] UBI: make debugging messages dynamic - [
C 1] UBI: make self-checks dynamic - [
C] UBI: make tests modes dynamic - [
C N] vfs: Add name to file handle conversion support - [
D 1] vfs: bury ->get_sb() - [
] vfs: Export file system uuid via /proc/<pid>/mountinfo - [
] vfs: new superblock methods to override /proc/*/mount{s,info} - [
] xfs: convert ENOSPC inode flushing to use new syncd workqueue - [
1] xfs: convert the xfsaild threads to a workqueue - [
] xfs: introduce a xfssyncd workqueue - [
] xfs: introduce background inode reclaim work - [
N] xfs: introduce new logging API. - [
2] xfs: stop using the page cache to back the buffer cache
Die kleinen Perlen: Storage
Die kleinen Perlen: Storage-Infrastruktur
Block
- [
] blk-cgroup: Add unaccounted time to timeslice_used. - [
D] blk-cgroup: Lower minimum weight from 100 to 10. - [
] block: improve flush bio completion - [
2] block: reimplement FLUSH/FUA to support merge - [
D] cfq-iosched: Always provide group isolation. - [
] cfq-iosched: give busy sync queue no dispatch limit - [
D] Documentation/iostats.txt: bit-size reference etc.
Libata
- [
] ahci: AHCI mode SATA patch for Intel Patsburg SATA RAID controller - [
] ATA: Add FSL sata v2 controller support - [
C N3] pata_arasan_cf: Adding support for arasan compact flash host controller - MFD, MMC, MTD und Co.
- [
C N3] memstick: add driver for Ricoh R5C592 card reader - [
] mfd: ab8500 chip revision 3.0 support - [
N1] mfd: AB8500 system control driver - [
C N1] mfd: Add a core driver for TI TPS61050/TPS61052 chips v2 - [
] mfd: Add BTN_TOUCH event to ucb1x00-ts - [
C N1] mfd: add driver for sequencer serial port - [
] mfd: Add fast path for WM831x touchscreen interrupts - [
N1] mfd: Add MAX8997/8966 IRQ control - [
] mfd: Add MODULE_DEVICE_TABLE to mc13xxx-core - [
] mfd: Add MODULE_DEVICE_TABLE to pcf50633-core - [
] mfd: Add MODULE_DEVICE_TABLE to rdc321x-southbridge - [
] mfd: Add MODULE_DEVICE_TABLE to vx855 - [
C N1] mfd: Add new ab8500 GPADC driver - [
] mfd: Add platform data to support multiple WM831x devices per board - [
] mfd: add platform_device sharing support for mfd - [
] mfd: Add sharing for cs5535 acpi/pms cells - [
] mfd: Add Tunnel Creek support to lpc_sch - [
C N2] mfd: Add twl4030 madc driver - [
] mfd: Add WM8994 bulk register write operation - [
C N2] mfd: MAX8997/8966 support - [
] mfd: Support configuration of WM831x /IRQ output in CMOS mode - [
N] mmc: add per device quirk placeholder - [
] mmc: dw_mmc: support 8-bit buswidth - [
] mmc: dw_mmc: support DDR mode - [
DN] mmc: export eMMC4.4 enhanced area details to sysfs - [
] mmc: mmci: Add ARM variant with extended FIFO - [
] mmc: mmc_test: add tests to measure large sequential I/O performance - [
] mmc: mmc_test: add tests to measure random I/O operations per second - [
] mmc: mmc_test: make performance test area size about 4MiB - [
C N2] mmc: mxs-mmc: add mmc host driver for i.MX23/28 - [
] mmc: sdhci: Add Ricoh e823 PCI ID - [
] mmc: sdhci: add the abort CMDTYPE bits definition - [
] mmc: sdhci-s3c: Auto CMD12 support - [
] mmc: sh_mmcif: support aggressive clock gating - [
C 1] mmc: tmio: convert the SDHI MMC driver from MFD to a platform driver - [
C] msm: Support for the MSM8960 RUMI3 target - [
] mtd_blkdevs: Add background processing support - [
] mtd: cfi: add support for AMIC flashes (e.g. A29L160AT) - [
] mtd: m25p80: add support for M25PX64 - [
] mtd: m25p80: add support for the EON EN25F32 chip - [
C N1] mtd: nand: add software BCH ECC support - [
] mtd: nand: enable software BCH ECC in nand simulator - [
C N1] mtd: NOR flash driver for OMAP-L137/AM17x - [
] mtd: tests: add count parameter to mtd_speedtest - [
] mtd: tests: add multiblock erase test to the mtd_speedtest - [
D] of_mmc_spi: add card detect irq support
SCSI
- [
] SCSI: Add detailed SCSI I/O errors - [
] SCSI: block: improve detail in I/O error messages - [
] SCSI: bnx2i: Added handling for unsupported iSCSI offload hba - [
] SCSI: bnx2i: Added iSCSI text pdu support for iSCSI offload - [
] SCSI: bnx2i: Added jumbo MTU support for the no shost case - [
] SCSI: bnx2i: Added support for the 57712(E) devices - [
] SCSI: bnx2i: Updated to version 2.6.2.3 - [
] SCSI: cxgbi: enable TEXT PDU support - [
1] SCSI: fcoe: convert fcoe.ko to become an fcoe transport provider driver - [
D] SCSI: hpsa: Add transport_mode host attribute in /sys - [
D] SCSI: hpsa: allow driver to put controller in either simple or performant mode - [
D] SCSI: hpsa: export resettable host attribute - [
] SCSI: hpsa: fix incorrect PCI IDs and add two new ones (2nd try) - [
] SCSI: hpsa: make hpsa.hpsa_simple_mode=1 module parameter actually work - [
] SCSI: libfc: add hook to notify providers of local port changes - [
] SCSI: libfc: add local port hook for provider session lookup - [
] SCSI: libfc: add method for setting handler for incoming exchange - [
N1] SCSI: libfcoe: add implementation to support fcoe transport - [
] SCSI: libfcoe: include fcoe_transport.c into kernel libfcoe module - [
C] SCSI: libsas: convert to standard kernel debugging - [
2] SCSI: lpfc 8.3.21: Critical Errors and Bug Fixes - [
4] SCSI: lpfc 8.3.21: Debugfs additions - [
1] SCSI: lpfc 8.3.21: FC Discovery changes - [
1] SCSI: lpfc 8.3.21: Initialization and user interface changes - [
2] SCSI: lpfc 8.3.22: Add new mailbox command and new BSG fix - [
2] SCSI: lpfc 8.3.22: Add support for PCI Adapter Failure - [
D] SCSI: megaraid_sas: Version and Changelog update - [
] SCSI: mpt2sas : Added customer specific display support - [
] SCSI: mpt2sas: Add support for Customer specific branding messages - [
] SCSI: mptfusion: Support SAS2.0 Devices with SAS1.0 Controllers - [
] SCSI: mvsas: Add support for HighPoint RR27xx series HBA - [
] SCSI: qla4xxx: Add support for ql4xmaxqdepth command line parameter - [
] SCSI: qla4xxx: add support for ql4xsess_recovery_tmo cmd line param - [
] SCSI: qla4xxx: Update driver version to 5.02.00-k6 - [
] SCSI: scsi_dh_rdac: Add MD36xxf into device list - [
D] SCSI: scsi_mid_low_api.txt recommend resid usage - [
] SCSI: ses: add subenclosure support - [
D] SCSI: target: tcm_mod_builder.py generated Makefile cleanups - [
] SCSI: target: update version to v4.0.0-rc7-ml - [
D] SCSI: tcm_mod_builder.py: Fix generated *_drop_nodeacl() handler
Various
- [
D] cciss: export resettable host attribute - [
] dm: improve block integrity support - [
] dm ioctl: add flag to wipe buffers for secure data - [
] drbd: advance progress step marks for online-verify - [
1] drbd: allow petabyte storage on 64bit arch - [
] drbd: Implemented two new connection states Ahead/Behind - [
1] drbd: log UUIDs whenever they change - [
] drbd: New configuration parameters for dealing with network congestion - [
1] drbd: New packet for Ahead/Behind mode: P_OUT_OF_SYNC - [
] drbd: show progress bar and ETA for online-verify - [
C N4] lib: add shared BCH ECC library - [
D] md: Update documentation for sync_min and sync_max entries
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)