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

Is there a limit on memory allocated using huge pages?

我正在使用 "huge pages(1MB size)" 和 mmap 分配内存。分配 4 GB 内存后,mmap returns 失败。

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

此处 memsize = 1GB

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

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

以上语句(没有大页面)适用于任意数量的迭代。我是否遗漏了与大页面相关的任何信息? 我也尝试了 "MAP_NORESERVE" 标志,如 mmap fail after 4GB 中所述。

任何类型的信息将不胜感激。谢谢。

更改文件

中分配的"number of huge pages"
 /proc/sys/vm/nr_hugepages

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

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

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

已消耗 2048 个大页面。

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