Hi!
I'm trying to track down a performance issue with cgofuse vs bazil.org/fuse in rclone.
Here is cgofuse mounting a local disk on Linux.
$ dd if=/tmp/1G of=/mnt/tmp/1G bs=128k
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 18.2636 s, 58.8 MB/s
And here is the mount command. Note the 4k writes
rclone cmount -vv /tmp/data /mnt/tmp/ 2>&1 | grep "Write: "
...
2021/03/24 16:13:04 DEBUG : /1G: >Write: n=4096
And here is bazil.org/fuse
$ time dd if=/tmp/1G of=/mnt/tmp/1G bs=128k
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.67968 s, 229 MB/s
And its mount command - note the 128k blocks
rclone mount -vv /tmp/data /mnt/tmp/ 2>&1 | grep "Write: "
...
2021/03/24 16:14:42 DEBUG : &{1G (w)}: >Write: written=131072, err=<nil>
I'd say this difference is entirely down to the different sized write blocks, but I haven't been able to change it. I've tried loads of fuse parameters (max_write,auto_cache) and I haven't been able to budge cgofuse from its 4k blocks for write.
Fuse mysteriously says this in the docs for max_write
max_write=N
Set the maximum number of bytes in a single write operation. The default is 128kbytes. Note, that due to various limitations, the size of write requests can be much smaller (4kbytes). This limitation will be removed in the future.
This was originally noted with macOS on the rclone forum but it replicated with linux for me very easily.
Any help much appreciated - running short of hair to pull out ;-)
(Testing done with rclone master (built with go build -tags cmount to include cgofuse support on Linux, and use --debug-fuse to see the fuse debug).)
Hi!
I'm trying to track down a performance issue with cgofuse vs bazil.org/fuse in rclone.
Here is cgofuse mounting a local disk on Linux.
And here is the mount command. Note the 4k writes
And here is bazil.org/fuse
And its mount command - note the 128k blocks
I'd say this difference is entirely down to the different sized write blocks, but I haven't been able to change it. I've tried loads of fuse parameters (
max_write,auto_cache) and I haven't been able to budge cgofuse from its 4k blocks for write.Fuse mysteriously says this in the docs for
max_writeThis was originally noted with macOS on the rclone forum but it replicated with linux for me very easily.
Any help much appreciated - running short of hair to pull out ;-)
(Testing done with rclone master (built with
go build -tags cmountto include cgofuse support on Linux, and use--debug-fuseto see the fuse debug).)