将一个10GB的文件通过mmap加载到内存中

6

如果我想把一个10GB的文件通过mmap映射到物理内存中,那么如何立即加载整个文件?
我不想使用像mlock这样需要root权限的函数。
是否有系统调用可以满足我的需求?

(我有足够的内存。)

1个回答

5
请阅读 mmap man-page:

MAP_POPULATE (自Linux 2.5.46以来)

为映射填充(预缓存)页面表。对于文件映射,这会导致对文件的预读取。稍后对映射的访问将不会被页面错误所阻塞。MAP_POPULATE仅支持私有映射自Linux 2.6.23起。

提交请求并准备短暂等待(除非您超过进程限制)(取决于磁盘带宽和缓存)。


1
另外,如果您不想在mmap内部阻塞,您可以选择使用madvise(MADV_WILLNEED)。当然,您放弃了“立即存在”的保证,但整个范围仍将异步地立即加载到RAM中。但是,除非您成功地mlock,否则您永远没有保证(页面可能随时被交换或丢弃),因此这可能是可以接受的。 - Damon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接