2016-05-16 70 views
0

我使用“巨大页面(1MB大小)”和使用mmap分配内存。分配4 GB内存后,mmap返回失败。使用巨大页面分配的内存是否有限制?

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

这里memsize个= 1GB

我打电话上面的循环语句。 Upto 4迭代很好。在第5次迭代中,mmap失败。

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

上面的语句(没有巨大的页面)完美地适用于任何数量的迭代。我是否缺少任何有关巨大页面的信息? 我也尝试过“MAP_NORESERVE”标志,如mmap fail after 4GB中所述。

任何形式的信息将不胜感激。谢谢。

+0

'mmap returns fail' - 这没有用 – KevinDTimm

+0

你的系统有多少可用?你可以使用'cat/proc/meminfo |列出它grep HugePages'。补充阅读:https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt –

+0

@KevinDTimm:我检查了返回值(MAP_FAILED),然后只有我结束了mmap失败。 – ANTHONY

回答

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,小研究暴露了工作

相关问题