我想到的问题是在常规文件上有效地进行多次异步随机访问读取,其中读取的顺序无关紧要,但我想尽快开始获取数据。除非我能为每次读取提供一个线程,否则从文件中已经存在于缓存中的部分读取开始是有意义的,并且为其他人发出fadvise
个请求,希望他们能够在读取已经缓存的文件时可用。
确定文件的哪些部分已被缓存的一种方法是mmap
该文件,然后打开/proc/self/pagemap
并在其上使用readv
以获取有关映射是否存在的信息对应于文件所需区域的页面。如果整个文件不适合虚拟地址空间,那么这种方法的缺点是它不起作用(或者至少需要多个mmap
和munmap
步骤)打开和阅读/proc
文件的速度往往很慢(但我还没有特别针对pagemap
进行测试)。
有没有更直接的方法来获取文件的缓存存在信息,给定fd?也许某种ioctl
?