[Bug 271065] Kernel FUSE limits read() size by 64k/128k

From: <bugzilla-noreply_at_freebsd.org>
Date: Tue, 25 Apr 2023 15:27:37 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=271065

--- Comment #1 from Alan Somers <asomers@FreeBSD.org> ---
If your userland program opens the file with O_DIRECT and tries to do large
reads, what size of read does the server see?  That should bypass the cache. 
I'm not saying that it's a permanent solution, but it might be a good
experiment.

The clustering and readahead code happens above the file system, up in the VFS.
 It enters fuse in fuse_vnop_strategy.  I'm a little rusty in that area, but I
think that you'll want to tweak settings so as to maximize the value of
bp->b_bcount that the VFS sends in VOP_STRATEGY, rather than try to increase
the size that we read from within there.

You could try setting F_READAHEAD with fcntl, though I think it will still be
limited by maxphys.  By doing that, I'm able to get sizes of 1 MB in
VOP_STRATEGY.

And you should certainly be setting -o async_read in the sshfs process.

If you're planning to change the clustering code itself, you should definitely
talk to mckusick.

-- 
You are receiving this mail because:
You are the assignee for the bug.