请阅读 mmap man-page: MAP_POPULATE (自Linux 2.5.46以来) 为映射填充(预缓存)页面表。对于文件映射,这会导致对文件的预读取。稍后对映射的访问将不会被页面错误所阻塞。MAP_POPULATE仅支持私有映射自Linux 2.6.23起。 提交请求并准备短暂等待(除非您超过进程限制)(取决于磁盘带宽和缓存)。
mmap
内部阻塞,您可以选择使用madvise(MADV_WILLNEED)
。当然,您放弃了“立即存在”的保证,但整个范围仍将异步地立即加载到RAM中。但是,除非您成功地mlock
,否则您永远没有保证(页面可能随时被交换或丢弃),因此这可能是可以接受的。 - Damon