Skip to content

readahead

Sets the mergerfs and underlying filesystem readahead values. The value unit is in kibibytes.

  • readahead=1024

While the max size of messages sent between the kernel and mergerfs is configurable via the fuse_msg_size option that doesn't mean that is the size used by the kernel for read and writes.

Linux has a max read/write size of 2GB. Since the max FUSE message size is just over 1MB the kernel will break up read and write requests with buffers larger than that 1MB.

When page caching is disabled (cache.files=off), besides the kernel breaking up requests with larger buffers, requests are effectively one for one to mergerfs. A read or write request for X bytes is made to the kernel and a request for X bytes is made to mergerfs. No readahead behavior will occur because there is no page cache available for it to store that data. In FUSE this is referred to as "direct IO". Note that "direct IO" is not the same as O_DIRECT.

When page caching is enabled the kernel can and will utilize readahead. However, there are two values which impact the size of the readahead requests. The filesystem's readahead value and the FUSE max_readahead value. Whichever is lowest is used. The default max_readahead in mergerfs is maxed out meaning only the filesystem readahead value is relevant.

Preferably this value would be set by the user externally since it is a generic feature but there is no standard way to do so mergerfs added this feature to make it easier to set.

There is currently no way to set separate values for different branches through mergerfs.