Kernel-Log – Was 2.6.35 bringt (2): Dateisysteme und Storage
Direct-I/O und besseres Out-of-Space-Handling für Btrfs, Optimierungen für XFS und OCFS2, größere Umbauarbeiten bei Libata-Treibern und erweiterte Möglichkeiten zur RAID-Migration sind einige der wichtigsten Änderungen von Linux 2.6.35.
- Thorsten Leemhuis
In der Nacht vom Montag auf Dienstag hat Linus Torvalds die fünfte Vorabversion von Linux 2.6.35 freigegeben. Wie schon beim Rc3 und Rc4 gab es weniger und größtenteils konservativere Änderungen als bei früheren Kernel-Version in diesem Stadium. Ein Commit fällt jedoch aus dem Rahmen, denn er ist über 5 Megabyte groß und entfernt über 200.000 Zeilen Text aus den Standard-Konfigurationsdateien für ARM-Systeme. Das ist die erste Konsequenz einer Diskussion, in der Torvalds sich über die umfangreichen und nur mäßig hilfreichen Dateien beschwert hatte. Vermutlich sollen schon bald auch die Konfigurationsdateien für Power-Systeme reduziert werden; darauf folgen werden vielleicht noch weitere Änderungen, um Standard-Konfigurationsdateien dynamisch und mit weniger Overhead zu erzeugen. Hintergründe zum Thema hat LWN.net kürzlich in einem Artikel zusammengefasst.
Das Kernel-Log nimmt den Rc5 zum Anlass, um die Mini-Serie "Was 2.6.35 bringt" mit der Beschreibung der Neuerungen rund um Dateisysteme sowie Storage-Infrastruktur und -Treiber fortzusetzen. Der erste Teil der Mini-Serie hatte sich mit den Änderungen rund um Grafik-Hardware beschäftigt; folgen werden in den kommenden Wochen noch Artikel zur Netzwerk-Unterstützung, Treibern für USB, FireWire, V4L/DVB und Co. sowie Architektur-Code und Infrastruktur.
Dateisysteme
Das Btrfs-Dateisystem unterstützt ab 2.6.35 Direct I/O – also den Zugriff auf Dateien unter Umgehung der Kernel-Caches, was etwa für Datenbank-Software mit eigenen Cache-Funktionen von Interesse ist. Bereits bei 2.6.32 gab es zudem zahlreiche Verbesserungen am Btrfs-Code, um Probleme zu vermeiden, wenn der Speicherplatz zu Ende geht; unter bestimmten, eher selten anzutreffenden Umgebungsbedingungen entstanden aber weiter Schwierigkeiten, die einige nun aufgenommene Patches fortan verhindern sollen (u. a. 1, 2, 3, 4).
Wie bislang wird der Kernel Schreibbarrieren, die die Datensicherheit steigern, aber die Performance mindern, bei Ext4 standardmäßig aktivieren und bei Ext3 nicht nutzen – einige Anpassungen an den Modul-Parametern und der Dokumentation sollen allerdings etwas Verwirrung aus dieser historisch gewachsenen Inkonsistenz nehmen.
SquashFS beherrscht nun Erweiterte Attribute, was den Einsatz mit SELinux ermöglicht. Der Fuse-Code im Kernel kann zum Datenaustausch mit dem Userspace Splice verwenden, was einen Kopiervorgang der Daten im Arbeitspeicher eliminiert und so die Performance des "File System in Userspace" steigert (1, 2, 3). XFS bietet nun das vorerst experimentelle und über eine Mount-Option aktivierbare Delayed Logging, was laut Dokumentation und dem XFS Status Update für Mai 2010 die zum Loggen von I/O benötigte Bandbreite erheblich reduziert. Beim Cluster-Dateisystem OCFS2 sollen Allocation Reservations und Discontiguous Block Groups einige Dateisystemeigenschaften verbessern, die Joel Becker in seinem Haupt-Git-Pull-Request kurz erläutert.
Informationen zu weiteren Dateisystem-Änderungen finden sich über die Links im Abschnitt "Die kleinen Perlen" am Ende des Artikels sowie den Git-Pull-Request für das VFS (1, 2) sowie, Btrfs, Ceph und Nilfs2.
Storage
Im Libata-Subsystem gab es einige etwas größere Umbauarbeiten, die Jeff Garzik in seinen beiden Haupt-Git-Pull-Requests hervorhebt (1, 2). Der meiste Code des AHCI-Treibers wurde etwa in die neue libahci ausgelagert, auf die der generische AHCI-Treiber und systemspezifische Treiber wie der neue, für System-on-a-Chip (SOC) geeignete Treiber ahci_platform aufbauen. Zudem gab es einige Umstrukturierungen (siehe auch "Die kleinen Perlen" am Ende des Artikels), um den für Übertragungen mit Bus-Master-DMA und SFF zuständigen Code zu trennen und um den Treiber-Code besser zu strukturieren. Die über Medienwechseln bei ATAPI-Geräten berichtende Asynchronous Notification (AN) ist nun standardmäßig deaktiviert und lässt sich fortan über den neuen Treiber-Parameter "atapi_an" aktivieren.
Das Infiniband-Subsystem bringt für Netzwerkadapter der T4-Serie von Chelsio nun den RDMA/iWARP-Treiber iw_cxgb4 mit. Ebenfalls neu ist der Treiber ib_qib für PCIe-InfiniBand-Adapter von QLogic; er übernimmt zudem die Unterstützung von QLogic-QLE-Adaptern vom Treiber ib_ipath. Weitere Hintergründe rund um aktuellen und für spätere Kernel-Versionen geplanten Entwicklung im Infiniband-Bereich listet Roland Dreier in seinem Haupt-Git-Pull-Request.
Der im SCSI-Subsystem angesiedelte Qlogic-Treiber qla2xxx spricht ab 2.6.35 auch mit den FCoE-Adaptern der ISP82XX-Baureihe. Der SCSI-Code enthält nun zahlreiche Tracepoints, um Fehlersuche und Performance-Optimierung zu erleichtern. Weitere Änderungen im SCSI-Subsystem listet dessen Verwalter in den beiden Mails mit Bitte um Aufnahme der von ihm gesammelten Änderungen auf (1, 2).
Dem Kernel liegt nun ein MTD-Treiber für den Denali genannten NAND-Controller von Intels Moorestown-Plattform bei. Das bei 2.6.33 eingeführte "Blkio Controller Cgroup Interface" wurde erheblich erweitert und bietet nun einige neue Möglichkeiten, um den Datendurchsatz zu messen sowie applikations- oder gruppenweise einzuteilen (1, 2, 3, 4, 5, 6, 7). Überarbeitet und erweitert wurde auch die für SSDs interessante Discard-Unterstützung. Den Laptop-Mode muss man nun nicht mehr global aktivieren, sondern kann ihn für jeden Datenträger separat einschalten.
Die RAID10-Unterstützung gilt nun nicht mehr als experimentell. Der Code des MD-Subsystems bietet zahlreiche weitere Konvertierungsmöglichkeiten: Raid0->Raid5, Raid0->Raid10, Raid5->Raid4, Raid4->Raid0 sowie Raid5->Raid0 und Raid10->Raid0.
[pagebreak Die kleinen Perlen]
Die kleinen Perlen
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 angezeigte 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 Hilfetexte und Konfigurationsoptionen enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge 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" steht etwa für Ä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.
Dateisysteme
Btrfs
- [
5] Btrfs: Integrate metadata reservation with start_transaction - [
5] Btrfs: Introduce contexts for metadata reservation - [
1] Btrfs: Introduce global metadata reservation - [
] Btrfs: Kill allocate_wait in space_info - [
1] Btrfs: Link block groups of different raid types - [
1] Btrfs: Shrink delay allocated space in a synchronized - [
3] Btrfs: Update metadata reservation for delayed allocation
Ext[234]
- [
] BKL: Remove BKL from ext2 filesystem - [
] ext4: Add new tracepoints to track mballoc's buddy bitmap loads - [
] ext4: check for a good block group before loading buddy pages - [
2] ext4: Convert callers of ext4_get_blocks() to use ext4_map_blocks() - [
] ext4: Print mount options in when mounting and add a remount message - [
] ext4: stop issuing discards if not supported by device - [
2] ext4: Use bitops to read/modify i_flags in struct ext4_inode_info
VFS, XFS, OCFS2 and others
- [
] 9p: add 9P2000.L rename operation - [
] 9p: add 9P2000.L statfs operation - [
] 9p: Add mksock support - [
] Ban ecryptfs over ecryptfs - [
D] doc: inode uses a mutex instead of a semaphore. - [
D 4] drop unused dentry argument to ->fsync - [
D 2] fs: introduce new truncate sequence - [
D] GFS2: docs update - [
] gss_krb5: add ability to have a keyed checksum (hmac) - [
1] gss_krb5: add remaining pieces to enable AES encryption support - [
1] gss_krb5: add support for new token formats in rfc4121 - [
1] gss_krb5: Add support for rc4-hmac encryption - [
] gss_krb5: add support for triple-des encryption - [
] gss_krb5: Add upcall info indicating supported kerberos enctypes - [
] gss_krb5: Introduce encryption type framework - [
] Introduce freeze_super and thaw_super for the fsfreeze ioctl - [
] logfs: handle powerfail on NAND flash - [
D] mempolicy: document cpuset interaction with tmpfs mpol mount option - [
D] nfsd4: implement reclaim_complete - [
D] nilfs2: change default of 'errors' mount option to 'remount-ro' mode - [
D] ocfs2: Add dir_resv_level mount option - [
1] ocfs2: Allocate discontiguous block groups. - [
D] ocfs2: change default reservation window sizes - [
] ocfs2: Define data structures for discontiguous block groups. - [
] ocfs2: enable discontig block group support. - [
] ocfs2: increase the default size of local alloc windows - [
] ocfs2: Make nointr a default mount option - [
] Ocfs2: Optimize punching-hole code. - [
] ocfs2: use allocation reservations during file write - [
] ocfs2: use allocation reservations for directory data - [
] procfs: Kill BKL in llseek on proc base - [
] procfs: Kill the bkl in ioctl - [
1] squashfs: add new extended inode types - [
N1] squashfs: add support for xattr reading - [
N] squashfs: add xattr id support - [
D] squashfs: update documentation to include description of xattr layout - [
] SUNRPC: Don't spam gssd with upcall requests when the kerberos key expired - [
] sysfs: Basic support for multiple super blocks - [
] udf: BKL ioctl pushdown - [
] ufs: permit mounting of BorderWare filesystems - [
] xfs: add blockdev name to kthreads - [
] xfs: Add inode pin counts to traces - [
3] xfs: Improve scalability of busy extent tracking
Storage
Block-Layer
- [
] Add virtio disk identification ioctl - [
] Add virtio disk identification support - [
CD 1] blk-cgroup: config options re-arrangement - [
] brd: support discard - [
] cfq: Don't allow queue merges for queues that have no process references - [
] direct-io: add a hook for the fs to provide its own submit_bio function - [
3] drbd: Allow drbd_epoch_entries to use multiple bios. - [
] drbd: Four new configuration settings for resync speed control - [
] drbd: This is now equivalent to drbd release 8.3.8rc1 - [
] generate "change" uevent for loop device
Infiniband
- [
] IB/core: Add support for masked atomic operations - [
] IB/iser: Add asynchronous event handler - [
1] IB/iser: Enhance disconnection logic for multi-pathing - [
] IB/mlx4: Add support for masked atomic operations - [
2] IB/qib: Use a single txselect module parameter for serdes tuning - [
1] MAINTAINERS: Add cxgb4 and iw_cxgb4 entries
Libata
- [
] ahci: add pci quirk for JMB362 - [
] libata: disable ATAPI AN by default - [
D] libata: implement dump_id force param - [
] libata: implement on-demand HPA unlocking - [
D] libata: introduce sff_set_devctl() method - [
CDN2] libata-sff: clean up BMDMA initialization - [
D] libata-sff: kill unused ata_bus_reset() - [
CD 2] libata-sff: make BMDMA optional - [
2] libata-sff: separate out BMDMA init - [
2] libata-sff: separate out BMDMA irq handler - [
C] sata_inic162x: inic162x is not dependent on CONFIG_ATA_SFF
MD
- [
] md: Fix read balancing in RAID1 and RAID10 on drives > 2TB - [
] md: notify level changes through sysfs. - [
] md/raid4: permit raid0 takeover
MFD, MMC, MTD, ...
- [
] davinci: mmc: add a function to control reset state of the controller - [
C N3] mfd: AB3550 core driver - [
C N] mfd: Add support for the RDC321x southbridge - [
C N1] mfd: Add Toshiba's TC35892 MFD core - [
C N1] mfd: Add TPS6507x support - [
C N1] mfd: Add WM8994 interrupt controller support - [
C N1] MFD: DaVinci Voice Codec - [
C N1] mfd: Janz CMOD-IO PCI MODULbus Carrier Board support - [
C N3] mfd: New AB8500 driver - [
C 1] mmc: add DMA support to tmio_mmc driver, when used on SuperH - [
C N3] mmc: add support MMCIF for SuperH - [
] mmc: atmel-mci: Add support for SDIO interrupts - [
] mmc: atmel-mci: enable SD high speed support - [
C N3] mtd: Add new SmartMedia/xD FTL - [
C N3] mtd: add Samsung SoC OneNAND driver - [
] mtd: cfi_cmdset_0002: add CFI detection for SST 39VF{16, 32}xx chips - [
] mtd: cfi_cmdset_0002: add CFI detection for SST 39VF{32, 64}xxB chips - [
] mtd: cfi_cmdset_0002: Add reboot notifier for AMD flashes - [
] mtd: cfi_probe: add support for SST 0x0701 vendorname - [
C N] mtd: common module for smartmedia/xD support - [
D] MTD DocBook: fix ioremap return type - [
] mtd: Few follow up cleanups for Smartmedia/xD support - [
C N3] mtd: nand: Add driver for Ricoh xD/SmartMedia reader - [
C N2] mtd: nand: Add MPC5121 NAND Flash Controller driver - [
C] mtd: nand: Add SmartMedia device table to sm_common module - [
] mtd: nand: add Toshiba TC58NVG0 device ID - [
C 1] mtd: nand: rename w90p910_nand.c to nuc900_nand.c - [
] mtd: onenand: add support for chips with 4KiB page size - [
] mtd: pxa32xx_nand: add support for partition table parsing - [
C] mtd: Remove now-defunct ts7250 nand driver - [
] pcmciamtd: add another ID - [
N] sdhci-pltfm: implement platform data passing - [
C N1] sdhci-spear: ST SPEAr based SDHCI controller glue - [
] sdio: add new function for RAW (Read after Write) operation - [
] tmio: add a platform flag to disable card write-protection detection
SCSI
- [
] SCSI: aacraid: add support for handling ATA pass-through commands. - [
] SCSI: aacraid: expose physical devices for models with newer firmware - [
] SCSI: aacraid: respond automatically to volumes added by config tool - [
4] SCSI: arcmsr: Support HW reset for EH and polling scheme for scsi device - [
1] SCSI: bfa: add fc transport class based vport create/delete - [
2] SCSI: lpfc 8.3.11: Driver management improvements via BSG - [
1] SCSI: lpfc 8.3.12: T10-PI/DIF changes - [
] SCSI: mpt2sas: Added support for PCIe Advanced Error Recovery. - [
1] scsi: Push down BKL into ioctl functions - [
2] SCSI: qla2xxx: Add APEX support. - [
] SCSI: qla2xxx: Fix documentation of ql2xfdmienable module parameter - [
] SCSI: qla2xxx: Optionally disable target reset. - [
1] SCSI: qla2xxx: Support for asynchronous TM and Marker IOCBs. - [
4] SCSI: qla2xxx: T10 DIF support added. - [
1] SCSI: qla2xxx: Updates to ISP82xx support. - [
2] SCSI: qla4xxx: added IPv6 support. - [
1] SCSI: qla4xxx: added support for abort task management command - [
1] SCSI: scsi_debug: add max_queue + no_uld parameters - [
] SCSI: scsi_debug: Block Limits VPD page fixes
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)