[FUSE] Support scaling the internal block cache based on number of open files
FUSE's current caching strategy can serve you well if you're reading files sequentially, or a bunch of small files. If you're interleaving reads across many large files, you can potentially exhaust the cache and thrash it endlessly.
For these sorts of use cases, FUSE would perform better if it kept a small number of blocks in the cache for each file it has open.
The exact implementation should be hashed out. One possibility: the current limit becomes the maximum size of the entire cache. FUSE tracks which blocks belong to which file(s). When it comes time to evict blocks from the cache, FUSE figures out which file(s) have the most blocks cached, and from that list, evicts the least recently used block.