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.
- Thorsten Leemhuis
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.
Trimmen
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.
Repliziert
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.
Optimiert
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).
Treiber
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.
Verschiedenes
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.
Die kleinen Perlen
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
- Btrfs: Avoid superfluous tree-log writeout
- Btrfs: fail mount on bad mount options
- Btrfs: Make fallocate(2) more ENOSPC friendly
- Btrfs: make metadata chunks smaller
- Btrfs: Make truncate(2) more ENOSPC friendly
- Btrfs: Show discard option in /proc/mounts
Ext[234]
- ext3: make "norecovery" an alias for "noload"
- ext3: Support for vfsv1 quota format
- ext3: Unify log messages in ext3
- ext4: add tracepoint for ext4_forget()
- ext4: Do not override ext2 or ext3 if built they are built as modules
- ext4, jbd2: Add barriers for file systems with exernal journals
- ext4: make "norecovery" an alias for "noload"
- ext4: make trim/discard optional (and off by default)
- ext4: Support for 64-bit quota format
- ext4: Update documentation to correct the inode_readahead_blks option name
Various others
- aio: implement request batching
- CIFS: Enable mmap on forcedirectio mounts
- direct-io: cleanup blockdev_direct_IO locking
- exofs: Multi-device mirror support
- fat: make discard a mount option
- fiemap: Add new extent flag FIEMAP_EXTENT_SHARED
- GFS2: add barrier/nobarrier mount options
- GFS2: Add cached ACLs support
- GFS2: Add get_xquota support
- GFS2: Add get_xstate quota function
- GFS2: Add set_xquota support
- GFS2: Fix up system xattrs
- GFS2: Improve statfs and quota usability
- kill-the-BKL/reiserfs: add reiserfs_cond_resched()
- nfs41: add support for callback with RPC version number 4
- nfs41: add support for the exclusive create flags
- NFS: Display compressed (shorthand) IPv6 in /proc/mounts
- nfs: new subdir Documentation/filesystems/nfs
- NFS: Revert default r/wsize behavior
- nilfs2: add cache framework for persistent object allocator
- nilfs2: add norecovery mount option
- nilfs2: update mailing list address
- nilfs2: Using nobarrier option instead of barrier=off
- ocfs2: Always include ACL support
- procfs: allow threads to rename siblings via /proc/pid/tasks/tid/comm
- proc: partially revert "procfs: provide stack information for threads"
- proc: remove docbook and example
- quota: Implement quota format with 64-bit space and inode limits
- reiserfs: kill-the-BKL
- reiserfs, kill-the-BKL: fix unsafe j_flush_mutex lock
- reiserfs: remove /proc/fs/reiserfs/version
- sanitize xattr handler prototypes
- seq_file: use proc_create() in documentation
- UBIFS: support mounting of UBI volume character devices
- ufs: NFS support
- VFS: Export dquot_send_warning
- xfs: event tracing support
- xfs: improve metadata I/O merging in the elevator
- xfs: use DECLARE_EVENT_CLASS
Storage
Block
- Add a tracepoint for block request remapping
- blkio: Export disk time and sectors used by a group to user space
- blkio: Introduce per cfq group weights and vdisktime calculations
- blkio: Introduce the notion of cfq groups
- blkio: Introduce the root service tree for cfq groups
- blkio: Some debugging aids for CFQ
- block: add helpers to run flush_dcache_page() against a bio and a request's pages
- block: Allow devices to indicate whether discarded blocks are zeroed
- block: allow large discard requests
- block: Expose discard granularity
- block: use normal I/O path for discard requests
- cfq-iosched: enable idling for last queue on priority class
- cfq-iosched: fairness for sync no-idle queues
- cfq-iosched: fix no-idle preemption logic
- cfq-iosched: reimplement priorities using different service trees
- cfq: merge cooperating cfq_queues
DM
- dm: add request based barrier support
- dm exception store: add merge specific methods
- dm raid1: add framework to hold bios during suspend
- dm raid1: support flush
- dm: simplify request based suspend
- dm snapshot: add allocated metadata to snapshot status
- dm snapshot: permit only one merge at once
Libata
- ahci: let users know that Promise PDC42819 support is limited to SATA devices
- ata_piix: enable 32bit PIO on SATA piix
- libata: add comment documenting PIO latency issues on UP
- libata/drivers: Add driver for Apple "MacIO" IDE controller
- libata: MWDMA0 is unsupported on PIIX-like PATA controllers
- libata: Report zeroed read after TRIM and max discard size
- pata_cs5520: remove dead VDMA support
- pata_hpt37x: add proper cable detection methods
- pata_it8213: MWDMA0 is unsupported
- pata_legacy: fix QDI6580DP support
- pata_piccolo: Driver for old Toshiba chipsets
- sata_fsl: Add asynchronous notification support
- sata_mv: add power management support for the PCI controllers.
- sata_mv: add power management support for the platform driver
- sata_mv: support clkdev framework
- sata_sil24: MSI support, disabled by default
MD
- md: add honouring of suspend_{lo,hi} to raid1.
- md: add MODULE_DESCRIPTION for all md related modules.
- md: add 'recovery_start' per-device sysfs attribute
- md/raid1: add takeover support for raid5->raid1
- md: revise Kconfig help for MD_MULTIPATH
- md: support bitmap offset appropriate for external-metadata arrays.
- md: support updating bitmap parameters via sysfs.
- md: Support write-intent bitmaps with externally managed metadata.
- raid: improve MD/raid10 handling of correctable read errors.
MFD/MMC/MTD
- DaVinci: MMC: MMC/SD controller driver for DaVinci family
- mfd: Add 88PM8607 driver
- mfd: add AB4500 driver
- mfd: Add ADP5520/ADP5501 driver
- mfd: Add all twl4030 regulators to the twl4030 mfd driver
- mfd: Add power control platform data to SDHI driver
- mfd: Add SuperH Mobile SDHI platform driver
- mfd: Add support for remapping twl4030-power power states
- mfd: Add support for twl6030 irq framework
- mfd: Add support for WM8320 PMICs
- mfd: Add twl6030 regulator subdevices
- mfd: Initial support for twl5031
- mmc: add module parameter to set whether cards are assumed removable
- mmc: atmel-mci: new MCI2 module support in atmel-mci driver
- mmc: Blackfin SD Host Controller Driver
- mtd: add ARM pismo support
- mtd: Add bad block table overrides to Davinci NAND driver
- mtd: add bcmring nand driver
- mtd: add lock fixup for AT49BV640D and AT49BV640DT chips
- mtd: add nand_ecc test module
- mtd: add support for switching old SST chips into QRY mode
- mtd: m25p80: Add support for CAT25xxx serial EEPROMs
- mtd: m25p80: add support for Macronix MX25L4005A
- mtd: maps: remove obsolete ipaq-flash driver
- mtd: mtdoops: make record size configurable
- mtd: mtdoops: refactor as a kmsg_dumper
- mtd: nand: add option to quieten off the no device found messgae
- mtd: nandsim: add support for 4KiB pages
- mtd: OneNAND: multiblock erase support
- mtd: Really add ARM pismo support
- mtd: tests: fix read, speed and stress tests on NOR flash
- mxc_nand: Add NFC V2 support
- sdhci: add support for the SysKonnect CardBus2SDIO adapter
- sdhci-of: add support for the wii sdhci controller
- sdhci-of: reorganize driver to support additional hardware
SCSI
- SCSI: add scsi target reset support to scsi ioctl
- SCSI: be2iscsi: Adding msix and mcc_rings V3
- SCSI: be2iscsi: Adding support for various Async messages from chip
- SCSI: bnx2i: Add 5771E device support to bnx2i driver
- SCSI: bnx2i: update CQ arming algorith for 5771x chipsets
- SCSI: fcoe: add a separate scsi transport template for NPIV vports
- SCSI: fcoe, libfc: adds enable/disable for fcoe interface
- SCSI: fcoe: vport symbolic name support
- SCSI: fnic: Add FIP support to the fnic driver
- SCSI: ibmvfc: Add FC Passthru support
- SCSI: libfc: Add libfc/fc_libfc.[ch] for libfc internal routines
- SCSI: libfc: add some generic NPIV support routines to libfc
- SCSI: libfc: add support of receiving ELS_RLS
- SCSI: libfc, fcoe: Add FC passthrough support
- SCSI: libfcoe, fcoe: libfcoe NPIV support
- SCSI: libiscsi: add warm target reset tmf support
- SCSI: lpfc 8.3.5: Add AER support
- SCSI: lpfc 8.3.5: fix fcp command polling, add FIP mode, performance optimisations and devloss timout fixes
- SCSI: lpfc 8.3.5: fix reset path, ELS ordering and discovery issues
- SCSI: lpfc 8.3.5: fix sysfs parameters, vport creation and other bugs and update logging
- SCSI: lpfc 8.3.6 : FC Protocol Fixes
- SCSI: megaraid_sas: Add new megaraid SAS 2 controller support to the driver
- SCSI: megaraid_sas: Add poll mechanism to megaraid sas driver
- SCSI: megaraid_sas: add sysfs for AEN polling
- SCSI: megaraid_sas: add the IEEE SGE support to SAS2 controller
- SCSI: megaraid_sas: Add the support for updating the OS after adding/removing the devices from FW
- SCSI: megaraid_sas: Update version number and documentation
- SCSI: mpt2sas: Added command line option diag_buffer_enable.
- SCSI: mpt2sas: Add Extended Type for Diagnostic Buffer support
- SCSI: mpt2sas: Adding MPI Headers - revision L
- SCSI: mpt2sas : Add support for RAID Action System Shutdown Initiated at OS shutdown
- SCSI: mpt2sas: Add support in the driver to check for valid response info
- SCSI: mpt2sas: New device SAS2208 support is added
- SCSI: mpt2sas: Support for stopping driver when Firmware encounters
- SCSI: mvsas: add support for Adaptec ASC-1045/1405 SAS/SATA HBA
- SCSI: pm8001: enhance IOMB process modules
- SCSI: pmcraid: support SMI-S object model of storage pool
- SCSI: qla2xxx: Add firmware-dump kobject uevent notification.
- SCSI: scsi: Add missing command definitions
- SCSI: scsi_debug: Thin provisioning support
- SCSI: scsi_dh_rdac: Add two new IBM devices to rdac_dev_list
- SCSI: sd: WRITE SAME(16) / UNMAP support
- SCSI: stex: add small dma buffer support
- SCSI: stex: add support for reset request from firmware
Various others
- Add COH 901 318 DMA block driver v5
- cs5535: add pci id for AMD based CS5535 controllers
- IB: Fix typo in ipoib.txt
- MFD: twl4030: add twl4030_codec MFD as a new child to the core
- MFD: twl4030: add twl4030_codec MFD as a new child to the core
- ppc440spe-adma: adds updated ppc440spe adma driver
- RDMA/nes: Add additional SFP+ PHY uC status check and PHY reset
- RDMA/nes: Add support for IB_WR_*INV
- RDMA/ucma: Add option to manually set IB path
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)