【问题标题】:mmap a 10 GB file and load it into memorymmap 一个 10 GB 的文件并将其加载到内存中
【发布时间】:2014-11-04 03:21:34
【问题描述】:

如果我想mmap 一个 10 GB 的文件并立即将整个文件加载到物理内存中,我该怎么做?
我不想使用像 mlock 这样的函数,因为它需要 root 权限。
有没有可以满足我需求的系统调用?

(我有足够的内存。)

【问题讨论】:

    标签: c++ linux mmap


    【解决方案1】:

    阅读man-page for mmap

    MAP_POPULATE(自 Linux 2.5.46 起)

    为映射填充(预设)页表。对于一个文件 映射,这会导致文件预读。以后的访问 到映射不会被页面错误阻塞。 MAP_POPULATE 仅支持私有映射,因为 Linux 2.6.23

    发出您的请求,并为短暂的等待做好准备(除非您超出进程限制)(取决于磁盘带宽和缓存)。

    【讨论】:

    • +1 要添加此内容,如果您不想在mmap 内屏蔽,您也可以选择madvise(MADV_WILLNEED)。您当然放弃了“立即存在”的保证,但整个范围仍将立即加载到 RAM 中,只是异步的。尽管除非您成功mlock,否则您永远无法保证(页面可能随时被换出或丢弃),因此这是可以接受的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多