exfat: slow write performance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've found that write performance of exFAT is a lot lower than other
filesystems on our setup with a fast NVMe SSD:

- Kernel: 6.10.0-364.vanilla.fc40.x86_64
- Test cmd: fio -name=fioWr -ioengine=libaio -directory=<mount point>
-blocksize=1M -readwrite=write -filesize=10G -end_fsync=1 -numjobs=8
-direct=1 -group_reporting
- Benchmarks:
    - exFAT: Direct I/O: ~1370 MiB/s (Buffered: ~1250 MiB/s)
(mkfs.exfat -c 1M -b 1M <device>)
    - ext4: Direct I/O: ~2230 MiB/s (Buffered: ~2150 MiB/s)
    - xfs: Direct I/O: ~2220 MiB/s (Buffered: ~2200 MiB/s)

I found that direct I/O is disabled for most of these writes in exFAT,
code responsible is "exfat_direct_IO()" in "fs/exfat/inode.c". As the
written file is being expanded it is falling back to normal buffered
write. The relevant code also has the following FIXME comment
(inherited from the fat driver):

/*
* FIXME: blockdev_direct_IO() doesn't use ->write_begin(),
* so we need to update the ->i_size_aligned to block boundary.
*
* But we must fill the remaining area or hole by nul for
* updating ->i_size_aligned
*
* Return 0, and fallback to normal buffered write.
*/

I have tried working around this problem by preallocating the file. I
see good write speeds in the direct I/O case (matching ext4 ~2200
MiB/s, Buffered: ~1700 MiB/s), the problem is that preallocation is
slow since native fallocate is not supported.

What would the maintainers recommend as the best course of action for
us here? I have noticed [1] that FALLOC_FL_KEEP_SIZE was implemented
in fat, so perhaps that would be simple to work on first?

Does anyone with more experience in the exFAT driver know the full
reasons behind the direct I/O disabling, and what it would take to
support direct I/O during file extension? Perhaps recent changes may
have made fixing this simpler?

Thanks.

1: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/fat?id=b13bb33eacb7266d66a3adf03adaa0886d091789




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux