Я пытаюсь запустить код, который я не писал, для которого требуется большой кусок (~ 1 ГБ) непрерывной памяти. Я пробую на двух разных конфигурациях оборудования, но с одним и тем же двоичным кодом 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 "
.. / sys / kernel / mm / hugepages / hugepages-1048576kB / free_hugepages показывает 1 в успешной системе и 0 в неисправной системе!