Kernel-Log – Was 3.12 bringt (1): Dateisysteme & Storage
Btrfs beherrscht jetzt Daten-Deduplikation und Ext4 soll sparsamer mit dem Arbeitsspeicher umgehen. Neue Locking-Techniken und Multi-Threading im RAID-5-Code versprechen bessere Performance.
- Thorsten Leemhuis
In der Nacht von Sonntag auf Montag hat Linus Torvalds die vierte Vorabversion von Linux 3.12 veröffentlicht. Damit hat der Kernel 3.12 die Hälfte seiner Entwicklungszeit bereits hinter sich gebracht, sofern die Kernel-Entwickler ihrem gewohnten Rhythmus treu bleiben. Alle größeren Neuerungen dieser Version sind bereits jetzt absehbar, denn die haben Torvalds und seine Mitstreiter wie gewohnt in den ersten zwei Wochen nach Freigabe der Version 3.11 integriert; nach diesem Merge Windows gibt es normalerweise keine größeren Änderungen mehr.
Das Kernel-Log kann daher bereits jetzt einen umfassenden Überblick über die wichtigsten Neuerungen geben, die der in drei bis vier Wochen erwartete Kernel bringt. Den Anfang macht die folgende Beschreibung zu den Neuerungen rund um Dateisysteme und Storage-Hardware; in den nächsten Wochen folgen Artikel zur Grafiktreibern, Netzwerk-Unterstützung, Kernel-Infrastruktur, Prozessor/Plattform-Unterstützung und Treibern für andere Hardware.
Dateisysteme
Btrfs, das weiterhin als experimentell gilt, beherrscht jetzt Out-of-Band Deduplication. Durch diese Technik können Userspace-Programme den Kernel anweisen, bestimmte Speicherbereiche eines Dateisystems nach identischen Daten abzusuchen; findet er solche, legt er diese zusammen, um Speicherplatz zu sparen. Der Vorgang muss bei eingehängtem Dateisystem angestoßen werden, wird aber auch "Offline Dedupe" genannt, weil die Deduplizierung nicht im Rahmen der normalen Lese- und Schreiboperationen erfolgt. Das Dateisystem ZFS beherrscht letzteres; Patches, die diese Fähigkeit bei Btrfs nachrüsten, sind noch in Entwicklung.
Unter den weiteren Änderungen an Btrfs sind einige Anpassungen, die das bei 3.6 eingeführte Send/Receive bei Dateisystemen beschleunigen sollen, die viele Subvolumes oder Snapshots enthalten.
Ext4 soll durch einige Umbauten am Extent-Cache sparsamer mit dem Arbeitsspeicher umgehen und bessere Performance bei asynchronen I/O-Aufgaben liefern (1, 2). Ferner können Ext3 und Ext4 ein extern vorgehaltenes Dateisystem-Journal nun über eine Pfadangabe finden, die eine Mount-Option spezifiziert; das ist für Systeme interessant, bei denen sich die Datenträgerbezeichnung im /dev-Verzeichnis immer mal wieder ändert.
Das XFS-Dateisystem unterstützt nun User Namespaces, die unter anderem für Container-Virtualisierung und Sandboxing interessant sind. Die vor einigen Monaten stark überarbeitete Unterstützung für User Namespaces lässt sich bei der Kernel-Konfiguration daher jetzt wieder aktivieren, auch wenn Support für das XFS-Dateisystem eingebaut wird; diese Abhängigkeit war ein Grund, warum User Namespaces bei den Kerneln der meisten Distributionen derzeit außen vor bleiben. Es gab noch zahlreiche andere Änderungen an XFS (1, 2); zwei davon sollen das Auffinden von Dateien auf Datenträgern erheblich beschleunigen, die sehr viele Dateisystemeinträge enthalten (1, 2)
Das zum Ablegen von Absturzinformationen gedachte Pstore-Dateisystem unterstützt jetzt Datenkompression. Beim Mac-OS-Dateisystems HFSplus beherrscht der Linux-Kernel nun Posix-ACLs (1, 2).
Über den neuen Locking-Mechanismus lockref (locked reference count) kann der Kernel-Code einen normalerweise per Spinlock gesicherten Referenz-Zähler oft direkt aktualisieren, statt warten zu müssen, dass der Spinlock greift. Das Virtual File System (VFS), das Basis-Funktionen für Dateisysteme stellt, nutzt Lockref bei 3.12 bereits an einigen Stellen, was Overhead vermeiden und die Performance steigern soll (1, 2, 3).
Storage
Bei der Interaktion mit RAID-5-Arrays, die mit Mdadm angelegt wurden, kann der Kernel jetzt mehrere Threads verwenden. Das kann die Zahl der pro Sekunde ausgeführten I/O-Operationen bei Arrays steigern, die aus flotten Datenträgern, etwa SSDs, bestehen. In manchen Konstellationen soll der optionale Threading-Support die Performance jedoch verschlechtern.
Der AHCI-Treiber, der bei vielen modernen PCs die SATA-Controller betreut, beherrscht jetzt das im SATA-Standard 3.1 definierte "Queued DSM TRIM". Durch diese Technik kann der Kernel nun Informationen zu frei gewordenen Speicherbereichen im Rahmen des normalen Befehlsstroms an Datenträger übermitteln. Die Garbage Collection von SSDs kann anschließend selbst darüber entscheiden, wann sie das Kommando verarbeitet. Das kann die Performance beim Online Discard verbessern, sofern die SSD Queued Trim beherrscht. Performance-Probleme beim Online Discard sind ein Grund, warum unter Linux dieser Tage zumeist Batched Discard genutzt wird; anders als beim Online Discard werden freigewordene Bereiche nicht sofort beim Löschen, sondern erst beim Aufruf des Werkzeugs Fstrim an die SSD gemeldet.
Vorwiegend für Embedded-Systeme interessant ist eine neue Funktion, um eine Partitionstabelle über einen Kernel-Parameter zu übergeben (1, 2).
Der Linux-Kernel enthält jetzt einen Treiber für die ExpressSAS 6G SAS/SATA RAID Adapter von ATTO Technology. Neu ist auch Unterstützung für die QLogic-Controller ISP8042 und ISP8044.
Die kleinen Perlen
Die kleinen Perlen
Einige weitere für Sie vielleicht interessante Neuerungen liefert die folgenden Liste mit den englischen Commit-Überschriften ausgewählter Änderungen, die es in den beschriebenen Kernel-Subsystemen gab. Wie viele Verweise im vorangegangenen Text verlinken die Einträge auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs auf Kernel.org. Der über diese Links angezeigte Commit-Kommentar und der darunter ausgegebene Patch liefern Hintergrundinformationen zur jeweiligen Änderung.
File systems
- Pull dlm updates from David Teigland
- Pull vfs pile 1 from Al Viro
- Pull f2fs updates from Jaegeuk Kim
- Pull ext3, reiserfs, udf & isofs fixes from Jan Kara
- Pull ceph updates from Sage Weil
- Pull GFS2 updates from Steven Whitehouse
- Pull fuse bugfixes from Miklos Szeredi
- Pull NFS client updates from Trond Myklebust
- Pull vfs pile 3 (of many) from Al Viro
- Pull nfsd updates from Bruce Fields
- Pull squashfs updates from Phillip Lougher
- Pull 9p updates from Eric Van Hensbergen
- Pull eCryptfs fixes from Tyler Hicks
- Pull CIFS fixes from Steve French
- Pull vfs pile 4 from Al Viro
- Pull NFS client bugfixes (part 2) from Trond Myklebust
- [
] Btrfs: add branch prediction hints in the read page end IO function - [
] Btrfs: add missing mounting options in btrfs_show_options() - [
C] Btrfs: add support for asserts - [
] Btrfs: improve replacing nocow extents - [
N1] Btrfs: introduce a tree for items that map UUIDs to something - [
N2] Btrfs: separate out tests into their own directory - [
1] CIFS: Implement follow_link for SMB2 - [
] CIFS: Implement follow_link for nounix CIFS mounts - [
1] CIFS: Respect epoch value from create lease context v2 - [
D] Documentation/filesystems/proc.txt: fix mistake in the description of Committed_AS - [
D 1] FS-Cache: Add interface to check consistency of a cached object - [
D] FS-Cache: Fix heading in documentation - [
N1] NFS: Add event tracing for generic NFS events - [
] NFS: Add event tracing for generic NFS lookups - [
] NFSv4.1: Add tracepoints for debugging slot table operations - [
] NFSv4: Add tracepoints for debugging reads and writes - [
N1] NFSv4: Add tracepoints for debugging state management problems - [
D] NFSv4: Document the recover_lost_locks kernel parameter - [
1] NFSv4: Don't try to recover NFSv4 locks when they are lost. - [
] NFSv4: Refuse mount attempts with proto=udp - [
1] SUNRPC new rpc_credops to test credential expiry - [
D] add formats for dentry/file pathnames - [
] btrfs: add mount option to set commit interval - [
] ceph: introduce i_truncate_mutex - [
] ceph: punch hole support - [
C N2] ceph: use fscache as a local presisent cache - [
] cifs: Start using per session key for smb2/3 for signature generation - [
N4] cifs: add new case-insensitive conversion routines that are based on wchar_t's - [
DN] cifs: add winucase_convert.pl to Documentation/ directory - [
] cifs: create a new Documentation/ directory and move docfiles into it - [
D] cifs: update cifs.txt and remove some outdated infos - [
D] coredump: add new %P variable in core_pattern - [
2] direct-io: Implement generic deferred AIO completions - [
] efi-pstore: Read and write to the 'compressed' flag of pstore - [
] erst: Read and write to the 'compressed' flag of pstore - [
D] f2fs: add description for fsck.f2fs and dump.f2fs - [
] f2fs: add flags for inline xattrs - [
] f2fs: add proc entry to monitor current usage of segments - [
D] f2fs: add sysfs entries to select the gc policy - [
DN1] f2fs: add sysfs support for controlling the gc_thread - [
] f2fs: optimize gc for better performance - [
1] f2fs: support the inline xattrs - [
1] fs: bump inode and dentry counters to long - [
D] fs: remove vfs_follow_link - [
D] fs: remove vfs_follow_link - [
D] fscache: Netfs function for cleanup post readpages - [
] nfs4.1: Add state protection handler - [
1] nfs4.1: Minimal SP4_MACH_CRED implementation - [
] only regular files with FMODE_WRITE need to be on s_files - [
] powerpc/pseries: Read and write to the 'compressed' flag of pstore - [
] powerpc/pseries: Remove (de)compression in nvram with pstore enabled - [
] pstore/ram: Read and write to the 'compressed' flag of pstore - [
] pstore: Add compression support to pstore - [
] pstore: Add decompression support to pstore - [
] pstore: Add file extension to pstore file if compressed - [
] pstore: Add new argument 'compressed' in pstore write callback - [
] pstore: Introduce new argument 'compressed' in the read callback - [
] quota: Add a new quotactl command Q_XGETQSTATV - [
4] reiserfs: locking, handle nested locks properly - [
] udf: Refuse RW mount of the filesystem instead of making it RO - [
] vfs: fix dentry RCU to refcounting possibly sleeping dput() - [
D] vfs: improve i_op->atomic_open() documentation - [
] vfs: reorganize dput() memory accesses - [
] xfs: Add support for the Q_XGETQSTATV - [
] xfs: XFS_MOUNT_QUOTA_ALL needed by userspace - [
] xfs: introduce object readahead to log recovery - [
] xfs: ioctl check for capabilities in the current user namespace
Storage
- Pull IDE changes from David Miller
- Pull NVM Express driver update from Matthew Wilcox.
- Pull SCSI target updates from Nicholas Bellinger
- Pull aio changes from Ben LaHaise
- Pull device-mapper updates from Mike Snitzer
- Pull device-mapper fixes from Mike Snitzer
- Pull libata changes from Tejun Heo
- Pull md update from Neil Brown
- Pull first round of SCSI updates from James Bottomley
- Pull SCSI target fixes from Nicholas Bellinger
- Pull misc SCSI driver updates from James Bottomley
- [
] IB/iser: Add Discovery support - [
] NVMe: Disk IO statistics - [
2] ata: acpi: rework the ata acpi bind support - [
D] dm cache: add data block size limits to code and Documentation - [
D] dm cache: document metadata device is exclussive to a cache - [
D] dm thin: add data block size limits to Documentation - [
] dm: add reserved_bio_based_ios module parameter - [
] dm: add reserved_rq_based_ios module parameter - [
DN4] dm: add statistics support - [
] fnic: fnic Driver Tuneables Exposed through CLI - [
I] hpsa: add HP Smart Array Gen9 PCI ID's - [
1] iscsi-target: Add login negotiation multi-plexing support - [
1] iscsi-target: Prepare login code for multi-plexing support - [
1] iser-target: introduce fast memory registration mode (FRWR) - [
] lpfc 8.3.41: Add first burst support to driver - [
1] megaraid_sas: Add High Availability clustering support using shared Logical Disks - [
D] megaraid_sas: Version and Changelog update - [
6] megaraid_sas: addded support for big endian architecture - [
] mpt3sas: Added a driver module parameter max_msix_vectors - [
] partitions/efi: detect hybrid MBRs - [
] partitions/efi: do not require gpt partition to begin at sector 1 - [
] partitions/efi: use lba-aware partition records - [
1] qla2xxx: Add critical temperature handling for ISPFX00. - [
1] qla4xxx: Add pex-dma support for capturing minidump - [
1] qla4xxx: Implementation of ACB configuration during Loopback for ISP8042 - [
] raid5: make release_stripe lockless - [
] raid5: only wakeup necessary threads - [
] raid5: sysfs entry to control worker thread number - [
D] sata, highbank: send extra clock cycles in SGPIO patterns - [
D] sata, highbank: set tx_atten override bits - [
1] target: Add support for COMPARE_AND_WRITE emulation - [
N3] target: Add support for EXTENDED_COPY copy offload emulation - [
] ufs: Add runtime PM support for UFS host controller driver - [
1] ufs: Add support for host assisted background operations - [
] zfcp: enable FCP hardware data router by default
Ein "C" im Bereich "[ ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "I" ausgezeichnete Patches rüsten neue PCI- oder USB-IDs nach; jene mit "D" verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer.
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. (thl) (thl)