使用大页面分配的内存是否有限制?

时间:2016-05-16 13:05:20

标签: c linux memory-management mmap

我使用"大页面(1MB大小)"分配内存。并使用mmap。分配4 GB内存后,mmap返回失败。

mmap(NULL, memsize, PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS |MAP_POPULATE , -1, 0);

这里memsize = 1GB

我在循环中调用上面的语句。最多4次迭代就可以了。在第5次迭代中,mmap失败。

{{1}}

上述语句(没有hugepages)适用于任意数量的迭代。我错过了与大页面相关的任何信息吗? 我试过" MAP_NORESERVE"标志也如TextUtils.isEmpty(str)中所述。

任何形式的信息都将受到高度赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

更改文件

中分配的“大页数”
 /proc/sys/vm/nr_hugepages

根据您要分配的内存量。 早些时候它说:

>cat /proc/meminfo | grep HugePages 
 HugePages_Total = 2500

4GB =>它有2048 * 2Mb = 4Gb

已经消耗了2048个大页面。

需要多GB内存(1GB / 2MB = 512)512个更大的页面。但是只剩下2500 - 2048 = 452。但是你需要512.这就是为什么mmap失败的问题。如果将上述文件(/ proc / sys / vm / nr_hugepages)内容编辑为2560,则允许5GB。根据您需要的内存量更改它。感谢@KlasLindbäck。我提到了the link,小型研究暴露了工作