【发布时间】:2014-11-04 03:21:34
【问题描述】:
如果我想mmap 一个 10 GB 的文件并立即将整个文件加载到物理内存中,我该怎么做?
我不想使用像 mlock 这样的函数,因为它需要 root 权限。
有没有可以满足我需求的系统调用?
(我有足够的内存。)
【问题讨论】:
如果我想mmap 一个 10 GB 的文件并立即将整个文件加载到物理内存中,我该怎么做?
我不想使用像 mlock 这样的函数,因为它需要 root 权限。
有没有可以满足我需求的系统调用?
(我有足够的内存。)
【问题讨论】:
MAP_POPULATE(自 Linux 2.5.46 起)
为映射填充(预设)页表。对于一个文件 映射,这会导致文件预读。以后的访问 到映射不会被页面错误阻塞。
MAP_POPULATE仅支持私有映射,因为 Linux 2.6.23
发出您的请求,并为短暂的等待做好准备(除非您超出进程限制)(取决于磁盘带宽和缓存)。
【讨论】:
mmap 内屏蔽,您也可以选择madvise(MADV_WILLNEED)。您当然放弃了“立即存在”的保证,但整个范围仍将立即加载到 RAM 中,只是异步的。尽管除非您成功mlock,否则您永远无法保证(页面可能随时被换出或丢弃),因此这是可以接受的。