Linux 7.3’s iomap Rework Gives EXT4 and XFS Up to 10% More Small-Read Speed on Gen5 NVMe

An early VFS pull for Linux 7.3 finishes iomap's move to an iterator model and adds a simple direct I/O path for small reads, taking EXT4 from 1.92 million to 2.19 million IOPS in one test.
Linux 7.3’s iomap Rework Gives EXT4 and XFS Up to 10% More Small-Read Speed on Gen5 NVMe
Linux 7.3’s iomap Rework Gives EXT4 and XFS Up to 10% More Small-Read Speed on Gen5 NVMe

On a PCIe Gen5 NVMe drive, a single CPU core running io_uring in poll mode could push about 3.2 million 4K random reads per second to the raw block device, but only about 1.92 million through EXT4 or XFS. One of the first filesystem pulls merged for Linux 7.3 narrows that gap.

The pull request, merged Monday and covered by Phoronix, does two things to iomap, the framework many Linux filesystems use to map file offsets to locations on disk. It adds a simple direct I/O path for small reads, which “takes ext4 from 1.92M to 2.19M IOPS in the original workload,” according to the pull request. In fio runs on both EXT4 and XFS, the gains were about 4% at libaio queue depths of 64 and higher, around 5% with io_uring, and up to 10% in io_uring poll mode at a queue depth of 256.

ByteDance engineer Fengnan Chang found the bottleneck, which Phoronix first reported in July: during 4K random reads, much of the CPU time went to memory allocations and iomap’s direct I/O state machine. His fast path applies when the read is no larger than the inode’s block size and the file isn’t encrypted.

Fewer indirect calls

The other half is structural. A 21-patch series from Joanne Koong, posted to the kernel lists in July, finishes converting iomap to an iterator model, following a suggestion from Christoph Hellwig and reviving an earlier RFC from Matthew Wilcox. Until now, every iomap operation went through a pair of callbacks, iomap_begin() and iomap_end(), and “every step of every iteration is an indirect call, including on the hottest paths,” the cover letter says. The series replaces them with a single iomap_next() callback that a performance-critical caller can pass as a compile-time constant, letting the compiler turn it into a direct, inlineable call.

The series is meant to change no behavior. Besides EXT4 and XFS, the conversion touches Btrfs, EXT2, EROFS, F2FS, GFS2, HPFS, FUSE, exFAT, ZoneFS, NTFS and NTFS3. To avoid disrupting filesystems landing their own iomap work during the merge window, Koong planned to merge the final three patches, which remove the old begin/end path, after 7.3-rc1 is tagged.

Only EXT4 and XFS numbers were published, and all came from single-core tests on Gen5 hardware, so results on busier multi-core systems may differ.

Subscribe for Updates

SysAdminNews Newsletter

News & updates for IT system administrators.

By signing up for our newsletter you agree to receive content related to ientry.com / webpronews.com and our affiliate partners. For additional information refer to our terms of service.

Notice an error?

Help us improve our content by reporting any issues you find.

Get the WebProNews newsletter delivered to your inbox

Get the free daily newsletter read by decision makers

Subscribe
Advertise with Us

Ready to get started?

Get our media kit

Advertise with Us