mbind: Fix test programs

Refs: #1226
Change-Id: I12bf807812d93b7eca8f452e70e70e7c4e32f6a3
This commit is contained in:
Masamichi Takagi
2018-11-30 15:44:58 +09:00
parent b94247c478
commit 6b293409e5
107 changed files with 494 additions and 295 deletions

View File

@@ -43,18 +43,30 @@ int func_set_mempolicy(set_mem_para* inpara)
unsigned long set_nodemask = inpara->set_nodemask;
unsigned long set_maxnode = inpara->set_maxnode;
int mode = set_mode & 0x00000003;
int get_mode;
rst = set_mempolicy(set_mode, &set_nodemask, set_maxnode);
printf("-----\n");
if (rst < 0) {
printf("NG:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d rst:%d\n"
,mempolicy[mode] ,set_nodemask ,set_maxnode, rst);
//assert(0 && "set_mempolicy() failed");
} else {
printf("OK:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d\n"
,mempolicy[mode] ,set_nodemask ,set_maxnode);
printf("NG:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d rst:%d\n",
mempolicy[mode], set_nodemask, set_maxnode, rst);
return -1;
}
printf("OK:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d\n",
mempolicy[mode], set_nodemask, set_maxnode);
rst = get_mempolicy(&get_mode, &set_nodemask, set_maxnode, NULL,
MPOL_F_NODE);
if (rst < 0) {
printf("NG:get_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d rst:%d\n",
mempolicy[mode], set_nodemask, set_maxnode, rst);
return -1;
}
printf("OK:get_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d\n",
mempolicy[mode], set_nodemask, set_maxnode);
printf("-----\n");
return rst;
@@ -63,7 +75,7 @@ int func_set_mempolicy(set_mem_para* inpara)
int func_mbind(mbind_para* inpara)
{
int rst = -1;
unsigned char *addr = NULL;
unsigned char *addr = NULL, *fresh_addr = NULL;
int get_mode = 0;
int i = 0;
unsigned long mem_len = PAGE_SIZE;
@@ -77,36 +89,43 @@ int func_mbind(mbind_para* inpara)
for (i = 0; i < loop_cnt; i++) {
addr = mmap(0, mem_len, (PROT_READ | PROT_WRITE),
(MAP_ANONYMOUS | MAP_PRIVATE), 0, 0);
/* Grab the virtual address range */
addr = mmap(0, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
if (addr == (void *) -1) {
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n"
,i ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_ANONYMOUS | MAP_PRIVATE));
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n",
i, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
//assert(0 && "mmap() failed");
return -1;
} else {
// printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n"
// ,i ,addr ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_ANONYMOUS | MAP_PRIVATE));
printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n",
i, addr, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
}
if ((inpara->set_mode & 0x000000ff) == 0xff) {
switch ((i & 0x3)) {
/* Skip MPOL_INTERLEAVE because it's not supported */
switch ((i % 3)) {
case MPOL_PREFERRED:
set_mode = ((set_mode & 0xffffff00) | MPOL_PREFERRED);
set_mode = ((set_mode & 0xffffff00) |
MPOL_PREFERRED);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_PREFERRED;
break;
case MPOL_BIND:
set_mode = ((set_mode & 0xffffff00) | MPOL_BIND);
set_mode = ((set_mode & 0xffffff00) |
MPOL_BIND);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_BIND;
break;
case MPOL_INTERLEAVE:
set_mode = ((set_mode & 0xffffff00) | MPOL_INTERLEAVE);
set_mode = ((set_mode & 0xffffff00) |
MPOL_INTERLEAVE);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_INTERLEAVE;
@@ -114,7 +133,8 @@ int func_mbind(mbind_para* inpara)
case MPOL_DEFAULT:
default:
set_mode = ((set_mode & 0xffffff00) | MPOL_DEFAULT);
set_mode = ((set_mode & 0xffffff00) |
MPOL_DEFAULT);
set_nodemask = 0;
flags = MPOL_MF_STRICT;
mode = MPOL_DEFAULT;
@@ -122,48 +142,72 @@ int func_mbind(mbind_para* inpara)
}
}
rst = mbind(addr, mem_len, set_mode, &set_nodemask, set_maxnode, flags);
rst = mbind(addr, mem_len, set_mode, &set_nodemask,
set_maxnode, flags);
if (rst < 0) {
printf("[%02d] NG:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d rst:%d\n"
,i ,addr ,mem_len ,mempolicy[mode] ,set_nodemask ,set_maxnode ,flags ,rst);
printf("[%02d] NG:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d rst:%d\n",
i, addr, mem_len, mempolicy[mode],
set_nodemask, set_maxnode, flags, rst);
//assert(0 && "mbind() failed");
return -1;
} else {
printf("[%02d] OK:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d\n"
,i ,addr ,mem_len ,mempolicy[mode] ,set_nodemask ,set_maxnode ,flags);
printf("[%02d] OK:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d\n",
i, addr, mem_len, mempolicy[mode],
set_nodemask, set_maxnode, flags);
}
rst = get_mempolicy(&get_mode, NULL, 0, addr, MPOL_F_ADDR);
if(rst < 0) {
printf("[%02d] NG:get_mempolicy - addr:(0x%016lx) rst:%d\n"
,i ,addr , rst);
printf("[%02d] NG:get_mempolicy - addr:(0x%016lx) rst:%d\n",
i, addr, rst);
//assert(0 && "get_mempolicy failed");
return -1;
} else {
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n"
,i ,addr ,mempolicy[get_mode]);
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n",
i, addr, mempolicy[get_mode]);
}
/* Remap with the address policy */
rst = munmap(addr, mem_len);
if (rst < 0) {
printf("[%02d] NG:munmap - addr:(0x%016lx) len:%d\n"
,i ,addr ,mem_len);
printf("[%02d] NG:munmap - addr:(0x%016lx) len:%d\n",
i, addr, mem_len);
} else {
// printf("[%02d] OK:munmap - addr:(0x%016lx) len:%d\n"
// ,i ,addr ,mem_len);
printf("[%02d] OK:munmap - addr:(0x%016lx) len:%d\n",
i, addr, mem_len);
}
addr = mmap(addr, mem_len, (PROT_READ | PROT_WRITE),
(MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE), 0, 0);
addr = mmap(addr, mem_len, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
if (addr == (void *) -1) {
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n"
,i ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE));
//assert(0 && "mmap() failed");
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n",
i, mem_len, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE);
return -1;
}
printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n",
i, addr, mem_len, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE);
/* Map with the default policy */
fresh_addr = mmap(0, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
if (fresh_addr == (void *) -1) {
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n",
i, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
return -1;
} else {
// printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n"
// ,i ,addr ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE));
printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n",
i, fresh_addr, mem_len,
PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
}
printf("-----\n");
}
@@ -184,10 +228,16 @@ int main(int argc, char *argv[])
rst = func_set_mempolicy(&inpara.para1);
if (rst == 0) {
inpara.para2.set_mode = strtol(argv[4], NULL, 16);
inpara.para2.set_nodemask = strtoul(argv[5], NULL, 16);
inpara.para2.set_nodemask = strtoul(argv[5], NULL,
16);
inpara.para2.set_maxnode = strtoul(argv[6], NULL, 10);
/* Ignored */
inpara.para2.flags = strtoul(argv[7], NULL, 16);
/* Sweep over MPOL_* values */
inpara.para2.loop_cnt = strtol(argv[8], NULL, 10);
rst = func_mbind(&inpara.para2);
}
} else {
@@ -195,12 +245,12 @@ int main(int argc, char *argv[])
printf(" parameter 1 : set_mempolicy(mode)\n");
printf(" parameter 2 : set_mempolicy(nodemask)\n");
printf(" parameter 3 : set_mempolicy(maxnode)\n");
printf(" parameter 4 : mbind(mode) 0xff - all mode\n");
printf(" parameter 4 : mbind(mode). Pass 0xff when looping over mode values\n");
printf(" parameter 5 : mbind(nodemask)\n");
printf(" parameter 6 : mbind(maxnode)\n");
printf(" parameter 7 : mbind(flags)\n");
printf(" parameter 8 : Number of mbind executed\n");
printf(" example) ./exec_setmempolicy_mbind 0x1 0x1 2 0x2 0x1 2 0x0 1\n");
printf(" parameter 7 : not used (mbind(flags))\n");
printf(" parameter 8 : Loop count over mode values\n");
printf(" example) ./exec_setmempolicy_mbind 0x8001 0x1 2 0x8002 0x1 2 0x0 1\n");
}
return rst;

View File

@@ -1,6 +1,7 @@
#include <stdio.h>
#include <assert.h>
#include <sys/mman.h>
#include <sys/shm.h>
#include <numa.h>
#include <numaif.h>
@@ -19,6 +20,7 @@ typedef struct func_mbind_para {
unsigned long set_nodemask;
unsigned long set_maxnode;
unsigned flags;
char **argv;
} mbind_para;
@@ -48,12 +50,11 @@ int func_set_mempolicy(set_mem_para* inpara)
printf("-----\n");
if (rst < 0) {
printf("NG:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d rst:%d\n"
,mempolicy[mode] ,set_nodemask ,set_maxnode, rst);
//assert(0 && "set_mempolicy() failed");
printf("NG:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d rst:%d\n",
mempolicy[mode], set_nodemask, set_maxnode, rst);
} else {
printf("OK:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d\n"
,mempolicy[mode] ,set_nodemask ,set_maxnode);
printf("OK:set_mempolicy - mode:(%s) nodemask:0x%x maxnode:%d\n",
mempolicy[mode], set_nodemask, set_maxnode);
}
printf("-----\n");
@@ -63,7 +64,7 @@ int func_set_mempolicy(set_mem_para* inpara)
int func_mbind(mbind_para* inpara)
{
int rst = -1;
unsigned char *addr = NULL;
unsigned char *addr = NULL, *fresh_addr = NULL;
int get_mode = 0;
int i = 0;
unsigned long mem_len = PAGE_SIZE;
@@ -74,39 +75,54 @@ int func_mbind(mbind_para* inpara)
unsigned flags = inpara->flags;
int loop_cnt = inpara->loop_cnt;
int mode = set_mode & 0x00000003;
key_t key, key2;
int shmid, shmid2;
struct shmid_ds shmid_ds;
for (i = 0; i < loop_cnt; i++) {
addr = mmap(0, mem_len, (PROT_READ | PROT_WRITE),
(MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE), 0, 0);
key = ftok(inpara->argv[0], 0);
shmid = shmget(key, mem_len, IPC_CREAT | 0660);
if (shmid == -1) {
printf("%s:%d: shmget failed\n",
__func__, __LINE__);
return -1;
}
addr = shmat(shmid, NULL, 0);
if (addr == (void *) -1) {
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n"
,i ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE));
//assert(0 && "mmap() failed");
printf("[%02d] NG:shmat - len:%d prot:0x%x flags:0x%x\n",
i, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE);
return -1;
} else {
// printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n"
// ,i ,addr ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE));
printf("[%02d] OK:shmat - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n",
i, addr, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE);
}
if ((inpara->set_mode & 0x000000ff) == 0xff) {
switch ((i & 0x3)) {
case MPOL_PREFERRED:
set_mode = ((set_mode & 0xffffff00) | MPOL_PREFERRED);
set_mode = ((set_mode & 0xffffff00) |
MPOL_PREFERRED);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_PREFERRED;
break;
case MPOL_BIND:
set_mode = ((set_mode & 0xffffff00) | MPOL_BIND);
set_mode = ((set_mode & 0xffffff00) |
MPOL_BIND);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_BIND;
break;
case MPOL_INTERLEAVE:
set_mode = ((set_mode & 0xffffff00) | MPOL_INTERLEAVE);
set_mode = ((set_mode & 0xffffff00) |
MPOL_INTERLEAVE);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_INTERLEAVE;
@@ -114,7 +130,8 @@ int func_mbind(mbind_para* inpara)
case MPOL_DEFAULT:
default:
set_mode = ((set_mode & 0xffffff00) | MPOL_DEFAULT);
set_mode = ((set_mode & 0xffffff00) |
MPOL_DEFAULT);
set_nodemask = 0;
flags = MPOL_MF_STRICT;
mode = MPOL_DEFAULT;
@@ -122,48 +139,92 @@ int func_mbind(mbind_para* inpara)
}
}
rst = mbind(addr, mem_len, set_mode, &set_nodemask, set_maxnode, flags);
rst = mbind(addr, mem_len, set_mode, &set_nodemask,
set_maxnode, flags);
if (rst < 0) {
printf("[%02d] NG:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d rst:%d\n"
,i ,addr ,mem_len ,mempolicy[mode] ,set_nodemask ,set_maxnode ,flags ,rst);
printf("[%02d] NG:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d rst:%d\n",
i, addr, mem_len, mempolicy[mode],
set_nodemask, set_maxnode, flags, rst);
//assert(0 && "mbind() failed");
return -1;
} else {
printf("[%02d] OK:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d\n"
,i ,addr ,mem_len ,mempolicy[mode] ,set_nodemask ,set_maxnode ,flags);
printf("[%02d] OK:mbind - addr:(0x%016lx) len:%d mode:(%s) nodemask:0x%x maxnode:%d flags:%d\n",
i, addr, mem_len, mempolicy[mode],
set_nodemask, set_maxnode, flags);
}
rst = get_mempolicy(&get_mode, NULL, 0, addr, MPOL_F_ADDR);
if(rst < 0) {
printf("[%02d] NG:get_mempolicy - addr:(0x%016lx) rst:%d\n"
,i ,addr , rst);
printf("[%02d] NG:get_mempolicy - addr:(0x%016lx) rst:%d\n",
i, addr, rst);
//assert(0 && "get_mempolicy failed");
return -1;
} else {
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n"
,i ,addr ,mempolicy[get_mode]);
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n",
i, addr, mempolicy[get_mode]);
}
rst = munmap(addr, mem_len);
/* Fault to allocate page with the address policy */
*(int *)addr = 0x12345678;
rst = shmctl(shmid, IPC_RMID, &shmid_ds);
if (rst < 0) {
printf("[%02d] NG:munmap - addr:(0x%016lx) len:%d\n"
,i ,addr ,mem_len);
} else {
// printf("[%02d] OK:munmap - addr:(0x%016lx) len:%d\n"
// ,i ,addr ,mem_len);
printf("%s:%d: shmctl failed\n",
__func__, __LINE__);
return -1;
}
addr = mmap(addr, mem_len, (PROT_READ | PROT_WRITE),
(MAP_FIXED | MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE), 0, 0);
if (addr == (void *) -1) {
printf("[%02d] NG:mmap - len:%d prot:0x%x flags:0x%x\n"
,i ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_FIXED | MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE));
//assert(0 && "mmap() failed");
rst = shmdt(addr);
if (rst < 0) {
printf("%s:%d: shmdt failed\n",
__func__, __LINE__);
return -1;
}
/* Map with the default policy */
key2 = ftok(inpara->argv[0], 1);
shmid2 = shmget(key2, mem_len, IPC_CREAT | 0660);
if (shmid2 == -1) {
printf("%s:%d: shmget failed\n",
__func__, __LINE__);
return -1;
}
fresh_addr = shmat(shmid2, NULL, 0);
if (fresh_addr == (void *) -1) {
printf("[%02d] NG:shmat - len:%d prot:0x%x flags:0x%x\n",
i, mem_len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
return -1;
} else {
// printf("[%02d] OK:mmap - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n"
// ,i ,addr ,mem_len ,(PROT_READ | PROT_WRITE) ,(MAP_FIXED | MAP_ANONYMOUS | MAP_SHARED | MAP_POPULATE));
printf("[%02d] OK:shmat - addr:(0x%016lx) len:%d prot:0x%x flags:0x%x\n",
i, fresh_addr, mem_len,
PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE);
}
/* Fault to allocate page with the policy */
*(int *)fresh_addr = 0x12345678;
rst = shmctl(shmid2, IPC_RMID, &shmid_ds);
if (rst < 0) {
printf("%s:%d: shmctl failed\n",
__func__, __LINE__);
return -1;
}
rst = shmdt(fresh_addr);
if (rst < 0) {
printf("%s:%d: shmdt failed\n",
__func__, __LINE__);
return -1;
}
printf("-----\n");
}
@@ -188,6 +249,7 @@ int main(int argc, char *argv[])
inpara.para2.set_maxnode = strtoul(argv[6], NULL, 10);
inpara.para2.flags = strtoul(argv[7], NULL, 16);
inpara.para2.loop_cnt = strtol(argv[8], NULL, 10);
inpara.para2.argv = argv;
rst = func_mbind(&inpara.para2);
}
} else {