From f2f4ca8efd10bd9524c4ba718a17b30334b4308e Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Mon, 28 Oct 2019 15:10:31 +0100 Subject: [PATCH 1/5] memory: init page size for mmap even if number of hugepages is equal to 0 --- include/villas/memory_type.h | 2 +- lib/memory.cpp | 15 +++----------- lib/memory/mmap.cpp | 38 ++++++++++++++++++++---------------- 3 files changed, 25 insertions(+), 30 deletions(-) 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; } From 9aab0118cdd17cfc54a63a9a6743b76363219f39 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 29 Oct 2019 09:20:57 +0100 Subject: [PATCH 2/5] fix code-style --- lib/memory/mmap.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/memory/mmap.cpp b/lib/memory/mmap.cpp index f7813615b..c9a3a2085 100644 --- a/lib/memory/mmap.cpp +++ b/lib/memory/mmap.cpp @@ -64,17 +64,20 @@ int memory_mmap_init(int 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 { + } + 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 { + } + else { warning("Hugepage allocator disabled."); memory_default = &memory_mmap; } + return 0; } From d919a76dd77f4057677361b54d62947d50bd905e Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 29 Oct 2019 09:21:13 +0100 Subject: [PATCH 3/5] mmap: fix name of hugepage allocator --- lib/memory/mmap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/memory/mmap.cpp b/lib/memory/mmap.cpp index c9a3a2085..f608d0b4b 100644 --- a/lib/memory/mmap.cpp +++ b/lib/memory/mmap.cpp @@ -153,7 +153,7 @@ struct memory_type memory_mmap = { }; struct memory_type memory_mmap_hugetlb = { - .name = "mmap", + .name = "mmap_hugetlb", .flags = (int) MemoryFlags::MMAP | (int) MemoryFlags::HUGEPAGE, .alignment = 21, /* 2 MiB hugepage */ .alloc = memory_mmap_alloc, From 1370ad7f7b58a115000d0381cf469bf441ba08aa Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 29 Oct 2019 09:21:27 +0100 Subject: [PATCH 4/5] mmap: remove debugging output --- lib/memory/mmap.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/memory/mmap.cpp b/lib/memory/mmap.cpp index f608d0b4b..d56ee150b 100644 --- a/lib/memory/mmap.cpp +++ b/lib/memory/mmap.cpp @@ -104,16 +104,12 @@ static struct memory_allocation * memory_mmap_alloc(size_t len, size_t alignment fd = -1; #endif sz = hugepgsz; - - info("allocate %#zx bytes mmap_hugetlb memory", len); } else { flags = MAP_PRIVATE | MAP_ANONYMOUS; fd = -1; sz = pgsz; - - info("allocate %#zx bytes mmap memory", len); } /** We must make sure that len is a multiple of the page size From 4a35f84bc980d61f22681e1c3d1f99fd6e57cd9f Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 29 Oct 2019 09:23:36 +0100 Subject: [PATCH 5/5] fix code-style --- lib/memory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/memory.cpp b/lib/memory.cpp index cbb4172f1..7adb5211a 100644 --- a/lib/memory.cpp +++ b/lib/memory.cpp @@ -46,7 +46,7 @@ int memory_init(int hugepages) ret = memory_mmap_init(hugepages); if (ret < 0) - return ret; + return ret; size_t lock = kernel_get_hugepage_size() * hugepages;