使用大页面分配的内存是否有限制?
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,小研究暴露了工作
我正在使用 "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,小研究暴露了工作