diff --git a/include/villas/memory_type.h b/include/villas/memory_type.h index fbe2553d6..f96e28274 100644 --- a/include/villas/memory_type.h +++ b/include/villas/memory_type.h @@ -60,4 +60,4 @@ extern struct memory_type *memory_default; struct memory_type * memory_ib(struct node *n, struct memory_type *parent); struct memory_type * memory_managed(void *ptr, size_t len); -int memory_hugepage_init(int hugepages); +int memory_mmap_init(int hugepages); diff --git a/lib/memory.cpp b/lib/memory.cpp index 86cc9d3d9..cbb4172f1 100644 --- a/lib/memory.cpp +++ b/lib/memory.cpp @@ -44,18 +44,9 @@ int memory_init(int hugepages) info("Initialize memory sub-system: #hugepages=%d", hugepages); - if (hugepages > 0) { - ret = memory_hugepage_init(hugepages); - if (ret) - return ret; - - memory_default = &memory_mmap_hugetlb; - } - else { - memory_default = &memory_mmap; - - warning("Hugepage allocator disabled."); - } + ret = memory_mmap_init(hugepages); + if (ret < 0) + return ret; size_t lock = kernel_get_hugepage_size() * hugepages; diff --git a/lib/memory/mmap.cpp b/lib/memory/mmap.cpp index aad72f196..f7813615b 100644 --- a/lib/memory/mmap.cpp +++ b/lib/memory/mmap.cpp @@ -45,32 +45,36 @@ using namespace villas::utils; static size_t pgsz = -1; static size_t hugepgsz = -1; -int memory_hugepage_init(int hugepages) +int memory_mmap_init(int hugepages) { pgsz = kernel_get_page_size(); if (pgsz < 0) return -1; - hugepgsz = kernel_get_hugepage_size(); - if (hugepgsz < 0) - return -1; + if (hugepages > 0) { + hugepgsz = kernel_get_hugepage_size(); + if (hugepgsz < 0) + return -1; #if defined(__linux__) && defined(__x86_64__) - int pagecnt; + int pagecnt; - pagecnt = kernel_get_nr_hugepages(); - if (pagecnt < hugepages) { - if (getuid() == 0) { - kernel_set_nr_hugepages(hugepages); - debug(LOG_MEM | 2, "Increased number of reserved hugepages from %d to %d", pagecnt, hugepages); - } - else { - warning("Failed to reserved hugepages. Please reserve manually by running as root:"); - warning(" $ echo %d > /proc/sys/vm/nr_hugepages", hugepages); - } - } + pagecnt = kernel_get_nr_hugepages(); + if (pagecnt < hugepages) { + if (getuid() == 0) { + kernel_set_nr_hugepages(hugepages); + debug(LOG_MEM | 2, "Increased number of reserved hugepages from %d to %d", pagecnt, hugepages); + } else { + warning("Failed to reserved hugepages. Please reserve manually by running as root:"); + warning(" $ echo %d > /proc/sys/vm/nr_hugepages", hugepages); + } + } #endif - + memory_default = &memory_mmap_hugetlb; + } else { + warning("Hugepage allocator disabled."); + memory_default = &memory_mmap; + } return 0; }