我正在尝试运行一些我未编写的代码,这些代码需要大块(〜1GB)的连续内存。我正在两种不同的硬件配置上尝试,但使用相同的Linux二进制文件。它在一个系统上运行,但在另一个系统上显示错误“无法分配内存”。
uint64_t alloc_flags = MAP_PRIVATE | MAP_POPULATE | MAP_ANONYMOUS | MAP_HUGETLB | (30 << MAP_HUGE_SHIFT)
mem->buffer = (char *)mmap(NULL, mem->size, PROT_READ | PROT_WRITE,
alloc_flags, mem->fd, 0);
if (mem->buffer == MAP_FAILED) {
perror("[ERROR] - mmap() failed with");
exit(1);
}
关于什么可能是问题或要看什么的任何想法?
/ proc / meminfo在两个系统上看起来都差不多。
我尝试没有成功:echo 20 > /proc/sys/vm/nr_hugepages
编辑:两个系统/ sys / kernel / mm / hugepages /具有:“ hugepages-1048576kB hugepages-2048kB”
从mmap(2)中读取,似乎并非到处都支持MAP_HUGE_1GB(即您的(30 << MAP_HUGE_SHIFT)标志:]
系统支持的大页面尺寸范围可以通过在/ sys / kernel / mm / hugepages中列出子目录来发现]
您的
ls /sys/kernel/mm/hugepages/
输出是什么?