Kernel-Log – Was 2.6.31 bringt (3): Storage und Dateisysteme
Das "Next Generation Filesystem for Linux" soll jetzt noch schneller arbeiten. Erste Teile zum Defragmentieren von Ext4-Dateisystem sind nun im Kernel. Der parallele Hardware-Scan in Intel-ATA-Treibern beschleunigt den Systemstart.
- Thorsten Leemhuis
In der Nacht von Donnerstag auf Freitag hat Linus Torvalds die sechste Vorabversion von Linux 2.6.31 freigegeben. Wie in dieser späten Phase des Entwicklungsprozess üblich sind die meisten Änderungen gegenüber dem rc5 eher klein. Torvalds geht in der Freigabe-Mail davon aus, 2.6.31 nach der achten Vorabversion fertig zu stellen – vermutlich also in zirka zwei bis drei Wochen.
Das Kernel-Log nimmt das zum Anlass, die Berichterstattung über die größten Neuerungen von Linux 2.6.31 gegenüber dem aktuellen Kernel 2.6.30 mit einem Überblick aus den Bereichen Storage und Dateisystemen fortzusetzen. Die Änderungen in den Bereichen Netzwerk und Grafik, Audio und Video haben wir bereits in früheren Ausgaben des Kernel-Logs dargestellt.
Btrfs aufgeboht
Eine umfangreiche Änderung in Form eines zirka 350 KByte großen Btrfs-Patches soll die Performance des experimentellen Dateisystems durch den Einsatz von "Mixed back references" in vielen Bereichen erheblich steigern. Dazu haben die Entwickler allerdings die Dateisystemstruktur auf dem Speichermedium (On-disk Format) angepasst. Die nötige Umwandlung vom alten ins neue Format erledigen Kernel mit dem neuen Btrfs-Code beim ersten Einhängen automatisch – Linux-Versionen mit älteren Btrfs-Code können ein so verändertes Dateisystem anschließend allerdings nicht mehr einbinden.
Der Commit-Kommentar und der Git-Pull-Request weisen darauf auch deutlich hin. Normalerweise versuchen die Kernel-Entwickler solche Dinge selbst bei experimentellen Dateisystemen zu vermeiden, denn wagemutige Anwender, die Btrfs als Root-Dateisystem verwenden, können sonst bei der Fehlersuche keine alten Kernel mehr starten – genau das ist Linus Torvalds selbst passiert, der sich entsprechend wenig begeistert zeigte.
Kernel-Log – Was 2.6.31 bringt
Weitere Teile aus der Kernel-Log-Mini-Serie "Was 2.6.31 bringt", die wichtigsten Neuerungen der kommenden Kernel-Version zusammenfasst:
1. Netzwerk – Neue Treiber für LAN und WLAN
2. Audio & Video – KMS für Radeon und Treiber für X-Fi
Der Artikel "Feintuning – Die Neuerungen von Linux 2.6.30" bietet eine Übersicht über die Neuerungen der derzeit aktuellen Kernel-Version der Hauptentwicklungslinie. Weitere Geschehnisse rund um den Linux-Kernel und andere Hardware-nahe Linux-Software finden Sie in den regulären Kernel-Logs.
Recht spät im Entwicklungszyklus sandte der Btrfs-Betreuer im Rahmen eines Git-Pull-Request noch einige größere, schon länger in Arbeit befindliche Änderungen hinterher. Durch sie soll Btrfs nach längerer, starker Belastung nicht mehr so viel Arbeitsspeicher belegen (u. a. 1, 2). Verbessert haben die Btrfs-Entwickler zudem die Unterstützung für den Einsatz auf SSDs (u. a. 1, 2)
IDE ade
Der unter anderem durch seine Arbeit als Betreuer des Netzwerk-Subsystems und der Sparc-Unterstützung bekannte Kernel-Entwickler David Miller hat nun auch das IDE-Subsystem übernommen und löst damit Bartlomiej Zolnierkiewicz ab. Ursache war ein Streit über einen auf Sparc-Systemen auftretenden Fehler, wo Miller andeutete, dass Zolnierkiewicz zahlreiche Änderungen im IDE-Subsystem vorgenommen habe, ohne diese ausreichend zu testen.
Miller ließ durchblicken, in Zukunft keine größeren Änderungen im IDE-Subsystem vornehmen zu wollen ("I'm going to treat IDE as pure legacy [...]"). Damit dürfte die Zukunft jetzt definitiv den Ende 2006 bei Linux 2.6.19 aufgenommenen PATA-Treibern im Libata-Subsystem gehören. Sie steuern zwar nicht ganz so viele IDE/PATA-Adapter an wie das IDE-Subsystem, aber nahezu alle heute gängigen.
Einige Entwickler hatten die Libata-Treiber von Anfang an als Ersatz für die Treiber des älteren – und schon seit über einem Jahrzehnt immer wieder für Unfrieden zwischen Kernel-Entwicklern sorgenden – IDE-Subsystems gedacht. Zolnierkiewicz hatte nach einer Phase weitgehender Inaktivitiät das IDE-Subsystem in den vergangenen eineinhalb bis zwei Jahren aber dennoch massiv überarbeitet und auch neue Treiber aufgenommen – aus der erwarteten schleichenden Ablösung entstand so eine länger anhaltende, nun wohl aber zu Ende gehende Konkurrenzsituation.
Leibesvisitation, Online-Defrag für Ext4, schneller booten
Leibesvisitation
Das neue Fsnotify ersetzt Dnotify und Inotify, mit denen sich Veränderungen im Dateisystem wie das Anlegen, Löschen oder Ändern von Dateien überwachen lassen (1, 2, 3). Das eigentliche Ziel des bei Red Hat beschäftigten Entwicklers Eric Paris ist jedoch das auf Fsnotify aufbauende Fanotify, das im Userspace arbeitenden Viren- und Malware-Scannern einen Eingriffspunkt bietet, um Dateien vor dem eigentlichen Zugriff auf Schädlinge überprüfen zu können. Das dahinter stehende Konzept hat Paris kürzlich zur Diskussion gestellt.
Hervorgegangen ist die Idee aus langen Diskussionen um Talpa, das ähnliches leisten sollte, aber bei den Kernel-Entwicklern keinen Anklang fand. Hintergründe liefern die Artikel "Kernel-based malware scanning", "The TALPA molehill" und "The fanotify API" bei LWN.net.
Staccato
Bei den bisher genannten Neuerungen handelt es sich nur um die bedeutsamsten Änderungen, die die Kernel-Hacker bei Dateisystemen und im Storage-Bereich vorgenommen haben. Einige weitere im Kurzüberblick:
Dateisysteme:
- Das Ext4-Dateisystem enthält jetzt Code zum Defragmentieren im laufenden Betrieb (Online Defrag). Komplett sei dieser aber noch nicht, wie Ext-Dateisystem-Entwickler Theodore Tso (tytso) kürzlich an anderer Stelle betonte. Weitere Patches für diese Funktion müssten noch begutachtet werden und auch beim zugehörigen Userspace-Programm stehe noch Arbeit an.
- Die Unterstützung für NFS 4.1 wurde erweitert, es sind jedoch noch weitere Änderungen für 2.6.32 vorgesehen.
Storage:
- Durch eine noch vor der Stabübergabe von Zolnierkiewicz an Miller aufgenommene Änderung respektiert das IDE-Subsystem nun standardmäßig HPAs (Host Protected Areas) – wer eine solche hat und noch Treiber des IDE-Subsystems einsetzt, sollte sich daher nicht wundern, wenn der Datenträger mit 2.6.31 ein wenig kleiner ist.
- Der im Libata-Subsystem angesiedelte IDE/PATA-Treiber ata_piix für Intel-Controller scannt jetzt parallel nach Datenträgern, was die Initialiserungszeit des Treiber auf dem Eeepc des Entwickler halbieren soll.
- Durch eine von vielen Änderungen im Block-Layer exportiert dieses nun etwa mit Hilfe der vom SCSI-Subsystem gelieferten Daten Informationen zur I/O-Topologie – dazu zählt unter anderem die dem Datenträger zugrunde liegende Sektorgröße. Das ist etwa für die Einteilung von Datenträgern mit Sektorgrößen ungleich 512 Byte oder die optimale Anordnung von Daten im RAID-Verbund von Interesse. Der Entwickler diese Codes erläutert einige Hintergründe in einem kürzlich veröffentlichten Vortrag (PDF, Seite 235 ff). Der für Software-RAIDs zuständige MD-Code kann die Topologie-Informationen bereits nutzen.
- Die Unterstützung für Barrieren im Device Mapper wurde erheblich verbessert (delay, mpath, snapshot).
- Nach der Aufnahme von generischer Unterstützung für OSDs (Object-Based Storage Devices) und einem darauf aufbauenden Dateisystem bei 2.6.30 integrierten die Kernel-Hacker nun den Treiber osdblk, über den sich OSD-Objekte als Block-Device nutzen lassen.
- Das MMC-Subsystem enthält nun einen via-sdmmc genannten Treiber für SD/MMC Card Reader von VIA sowie einen platform driver für SDHCI
- Ein Emulex-Entwickler steuerte einen fast 340 KByte großen Patch bei, der Unterstützung für neuere Fibre Channel Host Adapter aus Emulex' FightPulse-Familie im Treiber lpfc (Light Pulse Fibre Channel) nachrüstet; später kam noch ein Update obendrauf, das Unterstützung für target reset handler entrypoints nachrüstet. Vom selben Programmierer stammt auch der FC (FibreChannel) Pass Thru support.
- Neu dabei ist der iSCSI-Treiber bnx2i für BNX2-Chips von Broadcom. Er arbeitet auf Wunsch mit dem neuen Treiber Cnic zusammen, den das Kernel-Log bereits bei der Beschreibung der Neuerungen im Netzwerkbereich erwähnte.
- Der SAS/SATA-Treiber mvsas rüstet neben verschiedenen Verbesserungen auch Unterstützung für Marvell-Chips der 94xx-Baureihe nach.
Die kleinen Perlen
Die kleineren Perlen
Die englischen Überschriften von zahlreichen weiteren nicht ganz so wichtigen, aber keineswegs unbedeutenden Änderungen finden sich in der folgenden Liste. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf den jeweiligen Commit im Webfrontend des Hauptentwicklungszweigs von Linux. Dort liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.
File systems
Btrfs:
- Btrfs: Add mount -o nossd
- Btrfs: honor nodatacow/sum mount options for new files
- Btrfs: reduce mount -o ssd CPU usage
- Btrfs: update backrefs while dropping snapshot
CIFS:
- CIFS: add addr= mount option alias for ip=
- CIFS: Add mention of new mount parm (forceuid) to cifs readme
- CIFS: reinstate original behavior when uid=/gid= options are specified
- CIFS: show noforceuid/noforcegid mount options (try #2)
- CIFS: Update readme to indicate change to default mount (serverino)
- CIFS: Update readme to reflect forceuid mount parms
- CIFS: Updates fs/cifs/CHANGES
Ext[234]:
- Doc fix: ext2 can only have 32,000 subdirs, not 32,768
- ext4: Avoid races caused by on-line resizing and SMP memory reordering
- ext4: Change all super.c messages to print the device
- ext4: document the "abort" mount option
NFS:
- nfs41: Add ability to read RPC call direction on TCP stream.
- nfs41: Add backchannel processing support to RPC state machine
- nfs41: Add Kconfig symbols for NFSv4.1
- nfs41: add mount command option minorversion
- nfs41: add session reset to state manager
- nfs41: add session setup to the state manager
- nfs41: create_session operation
- nfs41: Setup the backchannel
- nfs41: Use mount minorversion option
- NFS: Add separate mountd status code decoders for each mountd version
- NFS: add support for splice writes
- nfsd: support ext4 i_version
- NFS: Invalid mount option values should always fail, even with "sloppy"
- NFS: More "sloppy" parsing problems
- update Documentation/filesystems/00-INDEX with new nfsd related docs.
Various:
- add caching of ACLs in struct inode
- documentation: register ioctl entry of nilfs2
- FAT: add 'errors' mount option
- GFS2: Add commit= mount option
- GFS2: Add tracepoints
- GFS2: Update docs
- hostfs: set maximum filesize in superblock for proper LFS support
- isofs: let mode and dmode mount options override rock ridge mode setting
- nilfs2: allow future expansion of metadata read out via get info ioctl
- nilfs2: modify list of unsupported features in caveats
- ocfs2: Add statistics for the checksum and ecc operations.
- partitions: warn about the partition exceeding device capacity
- proc: export statistics for softirq to /proc
- proc.txt: update kernel filesystem/proc.txt documentation
- splice: implement pipe to pipe splicing
- update Documentation/filesystems/Locking
- VFS: Add VFS helper functions for setting up private namespaces
- xfs: use generic Posix ACL code
Storage
Block Layer:
- Add serial number support for virtio_blk, V4a
- block: enable by default support for large devices and files on 32-bit archs
- block: rename CONFIG_LBD to CONFIG_LBDAF
- block: Update topology documentation
- Make SCSI SG v4 driver enabled by default and remove EXPERIMENTAL dependency, since udev depends on BSG
- ramdisk: remove long-deprecated "ramdisk=" boot-time parameter
Device Mapper:
- dm ioctl: support cookies for udev
- dm mpath: add queue length load balancer
- dm mpath: add service time load balancer
- dm raid1: add userspace log
- dm: sysfs add suspended attribute
Libata:
- ahci: add device ID for 82801JI sata controller
- ahci: add device IDs for Ibex Peak ahci controllers
- ata_piix: Add new laptop short cable IDs
- ata_piix: Add new short cable ID
- ata_piix: Turn on hotplugging support for older chips
- libata: accept late unlocking of HPA
- libata: ahci: Restore SB600 SATA controller 64 bit DMA
- libata: beautify module parameters
- libata: PATA driver for CF interface on AT91SAM9260 SoC
- sata_fsl: Add power mgmt support
- sata_sil: enable 32-bit PIO
MMC:
- sdhci: Add support for hosts that are only capable of 1-bit transfers
- sdhci-s3c: Samsung S3C based SDHCI controller glue
- sdhci: Specific quirk vor VIA SDHCI controller in VX855ES
MTD:
- Documentation: add MTD sysfs docs
- mtd: add MEMERASE64 ioctl for >4GiB devices
- mtd: add on-flash BBT support for Atmel NAND driver
- mtd: add OOB ioctls for >4GiB devices
- mtd: add SST39SF040 chip to jedec_probe
- mtd: CFI 1.0 and CFI 1.1
- mtd: Flex-OneNAND support
- mtd: m25p80: add support for Macronix MX25L12805D
- mtd: nand: add OMAP2/OMAP3 NAND driver
- mtd: OneNAND: add support for OneNAND manufactured by Numonyx
- mtd: physmap_of: Add multiple regions and concatenation support
- mtd: Restore suspend/resume support for mtd devices
SCSI:
- explain the hidden scsi_wait_scan Kconfig variable
- fcoe: Add runtime debug logging with module parameter debug_logging
- libfc: Add runtime debugging with debug_logging module parameter
- libfcoe: Add runtime debugging with module param debug_logging
- SCSI: mpt2sas: add query task support for MPT2COMMAND ioctl
- SCSI: mpt2sas: LUN Reset Support
- SCSI: mpt2sas: T10 DIF Support
- SCSI: mpt fusion: RAID device handling and Dual port Raid support is added
- SCSI: net, libfcoe: Add the FCoE Initialization Protocol ethertype
- SCSI: qla2xxx: Add 10Gb iiDMA support.
- SCSI: qla2xxx: Add CPU affinity support.
- SCSI: qla2xxx: Add QoS support.
- SCSI: zfcp: Add FC pass-through support
- sd: Block limits VPD support
- sd: Detect non-rotational devices
Various:
Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in vorangegangen Ausgaben des Kernel-Logs auf heise open. (thl/c't) (thl)