Kernel-Log – Was 2.6.32 bringt (3): Storage
Die Kernel-Entwickler haben Btrfs an verschiedenen Stellen optimiert und wollen dadurch unter anderem die Schreib-Performance des experimentellen Dateisystems deutlich gesteigert haben. Einige Änderungen am Block-Layer versprechen größeren Datendurchsatz und bessere Reaktionsfähigkeit. Zudem sind einige neue Treiber für Storage-Hardware hinzugekommen.
- Thorsten Leemhuis
Ende verganger Woche hat Linus Torvalds den Linux-Kernel 2.6.32-rc7 freigegeben – Hinweise auf den Fertigstellungstermin von 2.6.32 gab er dabei allerdings nicht. Mindestens eine, vermutlich aber noch zwei weitere Vorabversionen dürfte es aber in diesem durch Vertipper und Kernel Summit leicht durcheinander geratenen Entwicklungszyklus noch geben. Nach den Übersichten über die Änderungen im Netzwerksubsystem und denen für Grafik-Hardware geht es in diesem Teil der Kernel-Log-Serie zu Linux 2.6.32 um Dateisysteme und das Storage-System.
Btrfs
Einen ganzen Haufen von Änderungen gab an Btrfs. So soll das experimentelle "Next Generation File System for Linux" auf schneller Hardware nun mehr als 1 Gigabyte Daten pro Sekunde schreiben können. Auf dem eingesetzten Testsystem liege es dadurch nun auf dem selben Niveau wie XFS– zuvor hätte Btrfs nur rund 400 Megabyte Daten pro Sekunde übertragen, da es die CPU voll auslastete. Snapshots und Subvolumes lassen sich bei Btrfs nun umbenennen und deutlich schneller löschen; durch einige andere Optimierungen sollen zudem RPM und Yum etwas schneller arbeiten.
Btrfs reserviert bei Delayed Allocations jetzt zuverlässiger als zuvor genug Speicherplatz für die zu erwartenden Metadaten, damit sichergestellt ist, dass für diese beim späteren Schreiben auch noch genug Raum zur Verfügung steht. Neu dabei ist noch experimenteller Code für "Discard-Operationen", über die das Dateisystem SSDs langfristig mitteilen soll, welche Blöcke durch das Löschen von Dateien frei wurden – die dazu nötige Unterstützung in den SCSI- und Libata-Subsystemen ist allerdings noch in Arbeit.
Eine Liste weitere Änderungen rund um Btrfs findet sich am Ende des Artikels und in verschiedenen Git-Pull-Request, in denen Btrfs-Hauptentwickler Chris Mason die wichtigsten Neuerungen jeweils kurz erläuterte (1, 2, 3). Der bei Oracle beschäftige Mason hat viele der Änderungen selbst entwickelt, viele stammen aber auch von Entwicklern, die bei anderen Firmen in Lohn und Brot stehen. Wie wichtig eine solche Verteilung der Entwicklerressourcen und des Know-Hows für ein erfolgreiches, beständiges Open-Source-Projekt sind, hatte der für seine Arbeit an Ext-Dateisystemen bekannte Theodore Ts'o ("tytso") erst kürzlich in einem Vortrag auf dem Linux Kongress nachhaltig betont.
Ext3, Ext4, XFS und Co.
Einige weitere Änderungen am Dateisystemcode des Linux-Kernels:
- Über Theodore Ts'o fanden zahlreiche Änderungen an Ext3 und Ext4 den Weg in den Hauptentwicklungszweig (1, 2). Eine von ihnen soll den Benchmark "fs_mark" in bestimmten Konfigurationen um fünfzig Prozent beschleunigen. Den seit längerem in Entwicklung befindliche Betriebsmodus "data=guarded" für das Ext3-Dateisystem ließen die Kernel-Hacker aber auch diesmal außen vor.
- Sysfs unterstützt nun Security Labels, was Sicherheitsframeworks wie SELinux eine Zugriffskontrolle in dem virtuellen Dateisystem ermöglicht.
- Der VFAT-Code des Kernels bindet FAT-Datenträger zukünftig nicht mehr mit dem bislang durch die Mount-Option "shortname=lower" aktivierten Verhalten ein, sondern verwendet statt dessen nun "shortname=mixed". Dadurch soll sich die Groß-/Kleinschreibung von Dateinamen beim Kopieren mit Linux nicht mehr wie bisher verändern.
- Fscache unterstützt nun auch das Dateisystem 9p.
- Eine Änderung an XFS soll in gewissen Situationen die Suche nach freien Inodes um das Drei- bis Vierfache beschleunigen. Einen Überblick über weitere Entwicklungen bei XFS liefern die "XFS status updates" für September und Oktober.
Block-Layer
Der von vielen Distributionen verwendende I/O-Scheduler CFQ (Completely Fair Queuing) optimiert nun die Anfragen für kurze Reaktionszeiten. Dadurch sollen Desktop-Anwendungen nicht mehr so stark von im Hintergrund laufenden Programmen, die größere Mengen Daten verarbeiten, abgebremst werden und sich so schneller anfühlen. Hintergründe zu den Änderungen liefert ein Kommentar des für das Block-Subsystem zuständigen Entwicklers Jens Axboe im Forum von LWN.net. Manche Zugriffsmuster arbeiten durch das neue Verhalten aber etwas langsamer, daher kann man den Low-Latency-Mode von CFQ via Sysfs deaktivieren.
Axboe brachte zudem eine größere, über Monate erarbeitete Überarbeitung der Writeback-Infrastruktur ein. Durch sie kümmert sich nun um jedes Gerät ein eigener Thread. Durch diese und andere Änderungen soll der Datendurchsatz bei Writeback-lastigen Zugriffsszenarien deutlich steigen und gleichmäßiger verlaufen, was der Entwickler mit zweier Benchmark-Grafiken und einigen Messwerten im Commit-Kommentar unterstreicht; einige andere Messwerte finden sich auch über eine Mail von Chris Mason. Einige Hintergründe zu den Änderungen liefert ein Vortrag von Axboe sowie ein im April veröffentlichter Artikel auf LWN.net. Auch zum neu aufgenommenen blk-iopoll hat die Webseite einen Artikel, in dem sie den NAPI-ähnlichen Ansatz zum Zugriff auf Datenträger beschreibt, der durch das Reduzieren von IRQs den Maximaldurchsatz steigern will.
Einige weitere Änderungen im Block-Subsystem listet der der Haupt-Git-Pull-Request von Axboe. Nach einer längeren Diskussion um das Für und Wider der Replikationslösung DRBD (Distributed Replicated Block Device) hat diese die Aufnahme für 2.6.32 indes nicht geschafft – Torvalds zeigte sich aber willens, sie bei Linux 2.6.33 einzupflegen.
Libata, Treiber und Co.
- Über das Sysfs lassen sich zukünftig einige Informationen zu den AHCI-Fähigkeiten auslesen – etwa ob ein Port Hotplug-fähig ist oder es sich um eSATA-Anschluss handelt. Userspace-Anwendungen sollen mit diesen Informationen bessere Entscheidungen über das optimale Verhalten treffen können – etwa bei der Konfiguration von ALPM (Agressive Link Power Management).
- Die Kernel-Entwickler haben die Treiber pata_atp867x für den von ARTOP/Acard gefertigten PATA-Adapter ATP867X und pata_rdc für PATA-Adapter von RDC integriert. Neu dabei ist auch Unterstützung für die AMD-Southbridge SB900 – bis AMD diese einführt, dürften nach derzeitigem Kenntnisstand allerdings noch mehrere Monate vergehen.
- Zum SCSI-Subsystem stieß mit einem über 1,4 MByte großen Patch der bfa genannte Treiber für FC- und FCOE-Host-Adapter von Brocade. Deutlich kleiner sind die ebenfalls neuen Treiber be2iscsi für die iSCSI-Funktion des BladeEngine 2 genannten 10Gbps-Storage-Adapter von ServerEngines sowie pmcraid für die von PMC Sierra gefertigten 6Gb/s-SAS-Adapter der MaxRAID-Serie. Zahlreiche Änderungen gab es auch am im SCSI-Subsystem beheimateten FCOE-Treiber.
- Im MD-Code und einigen anderen Subsystemen des Kernels gab es verschiedene Änderungen, um die Berechnungen für RAID der Level 6 besser auf dafür ausgelegte Hardware auslagern zu können. Es gab zudem viele Änderungen am noch jungen MD-Code, der verschiedene Aus- und Umbaumöglichkeiten von Software-RAIDs unterstützt – etwa das Umwandeln eines RAID 1 in ein RAID 5 und von da in ein RAID 6 und wieder zurück. Solche Aufgaben lassen sich mit Mdadm-Versionen der 3.1er-Reihe anstoßen. Die erste Version diese Serie hat der für den MD-Code des Kernels und Mdadm zuständige Entwickler allerdings zurückgezogen, 3.1.1 aber schon für bald in Aussicht gestellt. Er hat zudem noch einige Verbesserungen rund um den für die Aus- und Umbaumöglichkeiten zuständigen Kernel-Code ausgearbeitet, die bei 2.6.33 einziehen soll.
Die kleinen Perlen
Viele weitere kleinere 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 mit 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.
Filesystems
Btrfs
- Btrfs: add snapshot/subvolume destroy ioctl
- Btrfs: always pin metadata in discard mode
- Btrfs: cache values for locking extents
- Btrfs: change how subvolumes are organized
- Btrfs: check size of inode backref before adding hardlink
- Btrfs: find ideal block group for caching
- Btrfs: improve async block group caching
- Btrfs: only write one super copy during fsync
- Btrfs: optimize fsync for the single writer case
- Btrfs: reduce CPU usage in the extent_state tree
- Btrfs: streamline tree-log btree block writeout
- Btrfs: Use CONFIG_BTRFS_POSIX_ACL to enable ACL code
Ext3, Ext4
- ext3: Add locking to ext3_do_update_inode
- ext3: Update documentation about ext3 quota mount options
- ext3: Update MAINTAINERS for ext3 and JBD
- ext4: Add configurable run-time mballoc debugging
- ext4: Add new tracepoint: trace_ext4_da_write_pages()
- ext4: async direct IO for holes and fallocate support
- ext4: drop ext4dev compat
- ext4: Fix memory leak fix when mounting an ext4 filesystem
- ext4: limit block allocations for indirect-block files to < 2^32
- ext4: Split uninitialized extents for direct I/O
- ext4: Update documentation about quota mount options
- ext4: Update documentation about quota mount options
- ext4: Use tracepoints for mb_history trace file
- jbd2: Use tracepoints for history file
Others
- 9p: Update documentation to add fscache related bits
- CIFS: Re-enable Lanman security
- doc/filesystems: more mount cleanups
- doc/filesystems: remove smount program
- Documentation: update stale definition of file-nr in fs.txt
- fs/inode.c: add dev-id and inode number for debugging in init_special_inode()
- fs/Kconfig: move nilfs2 outside misc filesystems
- GFS2: Add a document explaining GFS2's uevents
- GFS2: Add "-o errors=panic
- GFS2: Add sysfs link to device
- inotify: deprecate the inotify kernel interface
- NFS: Add a dns resolver for use with NFSv4 referrals and migration
- NFS: Allow the "nfs" file system type to support NFSv4
- nfsd41: sunrpc: Added rpc server-side backchannel handling
- nfsd: revise 4.1 status documentation
- NFS: Fix port and mountport display in /proc/self/mountinfo
- NFSv4: Disallow 'mount -t nfs4 -overs=2' and 'mount -t nfs4 -overs=3'
- ocfs2: Add CoW support.
- ocfs2: Add CoW support for xattr.
- ocfs2: Add ioctl for reflink.
- ocfs2: Add preserve to reflink.
- ocfs2: Add reflink support for xattr.
- ocfs2: Add support for incrementing refcount in the tree.
- SUNRPC: convert some sysctls into module parameters
- UBIFS: kill BKL
- vfat: change the default from shortname=lower to shortname=mixed
- vfs: allow file truncations when both suid and write permissions set
- xfs: Record new maintainer information
Storage
Block
- block: enable rq CPU completion affinity by default
- cfq-iosched: add a knob for desktop interactiveness
- cfq-iosched: drain device queue before switching to a sync queue
Libata
- ahci: Add the AHCI controller Linux Device ID for NVIDIA chipsets.
- ahci / atiixp / pci quirks: rename AMD SB900 into Hudson-2
- ahci: display all AHCI 1.3 HBA capability flags (v2)
- ahci: Enable SB600 64bit DMA on MSI K9A2 Platinum v2
- ahci: filter FPDMA non-zero offset enable for Aspire 3810T
- ahci: Gigabyte GA-MA69VM-S2 can't do 64bit DMA
- ahci: make ahci_asus_m2a_vm_32bit_only() quirk more generic
- libata: add command name parsing for error output
- libata: add DMA setup FIS auto-activate feature
- libata: implement more acpi filtering options
- libata: remove spindown skipping and warning
- pata_amd: do not filter out valid modes in nv_mode_filter
- pata_atp867x: add Power Management support
- pata_cs5535: add pci id for AMD based CS5535 controllers
- sata_promise: disable hotplug on 1st gen chips
- sata_promise: update reset code
MD
- async_tx: add sum check flags
- async_tx: add support for asynchronous GF multiplication
- async_tx: add support for asynchronous RAID6 recovery operations
- async_tx: kill ASYNC_TX_DEP_ACK flag
- async_tx: raid6 recovery self test
- async_tx: rename zero_sum to val
- async_tx: structify submission arguments, add scribble
- async_xor: permit callers to pass in a 'dma/page scribble' region
- dmaengine: add fence support
- dmaengine, async_tx: add a "no channel switch" allocator
- dmaengine: sh: Add Support SuperH DMA Engine driver
- dmatest: add pq support
- fsldma: Add DMA_SLAVE support
- ioat2+: add fence support
- ioat3: split ioat3 support to its own file, add memset
- ioat: add 'ioat' sysfs attributes
- iop-adma: P+Q support for iop13xx adma engines
- md/raid456: distribute raid processing over multiple cores
- md/raid5,6: add percpu scribble region for buffer lists
- md/raid5: make sure curr_sync_completes is uptodate when reshape starts
- md/raid6: asynchronous raid6 operations
MFD
- mfd: Add basic WM831x OTP support
- mfd: Add Freescale MC13783 driver
- mfd: Add support for TWL4030/5030 dynamic power switching
- mfd: Add twl4030-pwrbutton as a twl4030 child
- mfd: Add WM831x AUXADC support
- mfd: Add WM831x interrupt support
- mfd: Conditionally add WM831x backlight subdevice
- mfd: Hook WM831x into build system
- mfd: Initial core support for WM831x series devices
MMC
- mmc: add ability to save power by powering off cards
- mmc: add 'enable' and 'disable' methods to mmc host
- mmc: add MMC_CAP_NONREMOVABLE host capability
- mmc: add mmc card sleep and awake support
- mmc: core SDIO suspend/resume support
- mmc: msm_sdccc: driver for HTC Dream
- sdhci: support for ADMA only hosts
- mmc: add 'enable' and 'disable' methods to mmc host
- mmc: add MMC_CAP_NONREMOVABLE host capability
- mmc: add mmc card sleep and awake support
- mmc: core SDIO suspend/resume support
- mmc: msm_sdccc: driver for HTC Dream
- sdhci: support for ADMA only hosts
MTD
- mtd: add nand support for w90p910 (v2)
- mtd: Enable Open Firmware initialisation of MTD devices and maps for MicroBlaze
- mtd/maps: gpio-addr-flash: new driver for GPIO assisted flash addressing
- mtd: nand: driver for Nomadik 8815 SoC (on NHK8815 board)
- mtd: omap: adding DMA mode support in nand prefetch/post-write
- mtd: omap: add support for nand prefetch-read and post-write
- mtd: SST25L (non JEDEC) SPI Flash driver
SCSI
- SCSI: fcoe: Introduce and allocate fcoe_interface structure, 1:1 with net_device
- SCSI: hptiop: Add RR44xx adapter support
- SCSI: lpfc 8.3.4: Add bsg (SGIOv4) support for ELS/CT support
- SCSI: mpt2sas: Added mpi2_history.txt for MPI2 headers.
- SCSI: mpt2sas: Added SCSIIO, Internal and high priority memory pools to support multiple TM
- SCSI: mpt2sas: Target Reset will be issued from Interrupt context.
- SCSI: mpt2sas: Update driver to MPI2 REV K headers.
- SCSI: mvsas: Support Areca SAS/SATA HBA, ARC-1300/1320
- SCSI: qla2xxx: Add asynchronous-login support.
- SCSI: scsi_dh_rdac: add support for next generation of Dell PV array
- SCSI: sd: Detach DIF from block integrity infrastructure
- SCSI: sd: Support disks formatted with DIF Type 2
- SCSI: ses: add support for enclosure component hot removal
- SCSI: update MAINTAINERS with new email
Others
- atmel-mci: unified Atmel MCI drivers
- cciss: Add a "raid_level" attribute to each logical drive in /sys
- cciss: Add cciss_allow_hpsa module parameter
- cciss: Add lunid attribute to each logical drive in /sys
- cciss: Add usage_count attribute to each logical drive in /sys
- cciss: Allow triggering of rescan of logical drive topology via sysfs entry
- MAINTAINERS: InfiniBand/RDMA mailing list transition to vger
- omap4: mmc driver support on OMAP4
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)