Help output for `arv-mount --file-cache` is oversimplified
arv-mount --help says:
--file-cache FILE_CACHE File data cache size, in bytes (default 8 GiB for disk-based cache or 256 MiB with RAM-only cache)
But what the code actually does for disk-based cache (in
# Each block uses two file descriptors, one used to # open it initially and hold the flock(), and a second # hidden one used by mmap(). # # Set max slots to 1/8 of maximum file handles. This # means we'll use at most 1/4 of total file handles. # # NOFILE typically defaults to 1024 on Linux so this # is 128 slots (256 file handles), which means we can # cache up to 8 GiB of 64 MiB blocks. This leaves # 768 file handles for sockets and other stuff. # # When we want the ability to have more cache (e.g. in # arv-mount) we'll increase rlimit before calling # this. self._max_slots = int(resource.getrlimit(resource.RLIMIT_NOFILE) / 8) [...] fs = os.statvfs(self._disk_cache_dir) # Calculation of available space incorporates existing cache usage existing_usage = arvados.diskcache.DiskCacheSlot.cache_usage(self._disk_cache_dir) avail = (fs.f_bavail * fs.f_bsize + existing_usage) / 4 maxdisk = int((fs.f_blocks * fs.f_bsize) * 0.10) # pick smallest of: # 10% of total disk size # 25% of available space # max_slots * 64 MiB self.cache_max = min(min(maxdisk, avail), (self._max_slots * 64 * 1024 * 1024))
This means there are a lot of situations where the default size is not "8 GiB." If there's not much space on the filesystem, it'll be smaller. If the administrator has bumped up the
NOFILE limit (which I suspect is common-ish in HPC-type environments), it'll be larger.
Expand the help documentation to reflect this.