我使用"大页面(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)中所述。
任何形式的信息都将受到高度赞赏。谢谢。
答案 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,小型研究暴露了工作