aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Ying <ying.huang@intel.com>2018-05-11 15:58:52 +0800
committerFengguang Wu <fengguang.wu@intel.com>2018-05-11 16:20:19 +0800
commitf218124ddd60fbd37fc9610aac78783c4742678f (patch)
tree4861dd8f28dbb9da61c0ed0c329010a45ff123af
parented7b37de564ae7c1cb0e456b7a7a023821e27c16 (diff)
downloadvm-scalability-f218124ddd60fbd37fc9610aac78783c4742678f.tar.gz
usemem: Support allocate hugetlbfs memory
Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
-rw-r--r--usemem.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/usemem.c b/usemem.c
index f7ecc43..38cd90a 100644
--- a/usemem.c
+++ b/usemem.c
@@ -56,6 +56,13 @@
#define MAX_POINTERS 32
+#ifndef MAP_HUGE_2MB
+#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
+#endif
+#ifndef MAP_HUGE_1GB
+#define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT)
+#endif
+
char *ourname;
int pagesize;
unsigned long done_bytes = 0;
@@ -97,6 +104,7 @@ char *pid_filename;
int map_shared = MAP_PRIVATE;
int map_populate;
int map_anonymous;
+int map_hugetlb;
int fd;
int start_ready_fds[2];
int start_wake_fds[2];
@@ -140,6 +148,7 @@ void usage(int ok)
" -x|--sync-free sync between tasks before free memory\n"
" -e|--delay delay for each page in ns\n"
" -O|--anonymous mmap with MAP_ANONYMOUS\n"
+ " -U|--hugetlb allocate hugetlbfs page\n"
" -h|--help show this message\n"
, ourname);
@@ -380,7 +389,7 @@ unsigned long * allocate(unsigned long bytes)
} else {
p = mmap(NULL, bytes, (opt_readonly && !opt_openrw) ?
PROT_READ : PROT_READ|PROT_WRITE,
- map_shared|map_populate|map_anonymous,
+ map_shared|map_populate|map_anonymous|map_hugetlb,
map_anonymous ? -1 : fd, 0);
if (p == MAP_FAILED) {
fprintf(stderr, "%s: mmap failed: %s\n",
@@ -916,7 +925,7 @@ int main(int argc, char *argv[])
pagesize = getpagesize();
while ((c = getopt_long(argc, argv,
- "aAf:FPp:gqowRMm:n:t:b:ds:T:Sr:u:j:e:EHDNLWyxOh", opts, NULL)) != -1)
+ "aAf:FPp:gqowRMm:n:t:b:ds:T:Sr:u:j:e:EHDNLWyxOUh", opts, NULL)) != -1)
{
switch (c) {
case 'a':
@@ -1031,6 +1040,9 @@ int main(int argc, char *argv[])
case 'O':
map_anonymous = MAP_ANONYMOUS;
+
+ case 'U':
+ map_hugetlb = MAP_HUGETLB | MAP_HUGE_2MB;
break;
default: