So the pattern could be something like this:
[1M data] [hole] [0.5M data] [hole] [0.7M data] [1M data]
Every time an application reads mmap data, it may not only
read a single 4KB page, but also a cluster of nearby pages in
a range(e.g. 1MB) of the first page after a cache miss.
The readahead engine is modified to track the range size of
a cluster of mmap reads, so that after a seek and/or cache miss,
the range size is used to efficiently prefetch multiple pages
in a single RPC rather than many small RPCs.