mmap调用在一个系统上有效,但在另一个系统上失败,并显示“无法分配内存”。两者都运行相同的linux映像,并具有足够的内存

问题描述 投票:0回答:2

我正在尝试运行一些我未编写的代码,这些代码需要大块(〜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”

c linux mmap
2个回答
1
投票

从mmap(2)中读取,似乎并非到处都支持MAP_HUGE_1GB(即您的(30 << MAP_HUGE_SHIFT)标志:]

系统支持的大页面尺寸范围可以通过在/ sys / kernel / mm / hugepages中列出子目录来发现]

您的ls /sys/kernel/mm/hugepages/输出是什么?

© www.soinside.com 2019 - 2024. All rights reserved.