mount: add -asyncDio flag for async direct I/O (#7922)

* mount: add -asyncDio flag for async direct I/O

This adds support for async direct I/O via the -asyncDio flag.

Async DIO enables the FUSE_CAP_ASYNC_DIO capability, allowing the kernel
to perform direct I/O operations asynchronously. This improves concurrency
for applications that use O_DIRECT flag.

Benefits:
- Better concurrency for direct I/O operations
- Improved performance for applications using O_DIRECT
- Reduced blocking on I/O operations

Use cases:
- Database workloads that use direct I/O
- Applications that bypass page cache intentionally
- High-performance I/O scenarios

Implementation inspired by JuiceFS which enables this capability
for improved I/O performance.

Usage:
  weed mount -filer=localhost:8888 -dir=/mnt/seaweedfs -asyncDio

* mount: add all remaining FUSE options (asyncDio, cacheSymlink, novncache)

This combines the remaining three FUSE mount options on top of the merged writebackCache PR:

1. asyncDio: Enable async direct I/O for better concurrency
2. cacheSymlink: Enable symlink caching to reduce metadata lookups
3. novncache: (macOS only) Disable vnode name caching to avoid stale data

All options use the function parameter 'option' instead of global 'mountOptions'.
This commit is contained in:
Chris Lu
2025-12-31 00:30:12 -08:00
committed by GitHub
parent 1424fe6ed5
commit 9072e1d38a
2 changed files with 19 additions and 1 deletions

View File

@@ -50,6 +50,11 @@ type MountOptions struct {
// FUSE performance options
writebackCache *bool
asyncDio *bool
cacheSymlink *bool
// macOS-specific FUSE options
novncache *bool
}
var (
@@ -108,6 +113,11 @@ func init() {
// FUSE performance options
mountOptions.writebackCache = cmdMount.Flag.Bool("writebackCache", false, "enable FUSE writeback cache for improved write performance (at risk of data loss on crash)")
mountOptions.asyncDio = cmdMount.Flag.Bool("asyncDio", false, "enable async direct I/O for better concurrency")
mountOptions.cacheSymlink = cmdMount.Flag.Bool("cacheSymlink", false, "enable symlink caching to reduce metadata lookups")
// macOS-specific FUSE options
mountOptions.novncache = cmdMount.Flag.Bool("sys.novncache", false, "(macOS only) disable vnode name caching to avoid stale data")
}
var cmdMount = &Command{