Include mbind support (this is a rebase commit to merge into development)

This commit is contained in:
Katsuya Horigome
2017-11-06 12:47:56 +09:00
parent bad487cc07
commit d649d6fc2d
124 changed files with 1458 additions and 103 deletions

View File

@ -225,7 +225,7 @@ static void devobj_release(struct memobj *memobj)
return;
}
static int devobj_get_page(struct memobj *memobj, off_t off, int p2align, uintptr_t *physp, unsigned long *flag)
static int devobj_get_page(struct memobj *memobj, off_t off, int p2align, uintptr_t *physp, unsigned long *flag, uintptr_t virt_addr)
{
const off_t pgoff = off / PAGE_SIZE;
struct devobj *obj = to_devobj(memobj);

View File

@ -191,7 +191,7 @@ static struct fileobj *obj_list_lookup(uintptr_t handle)
/***********************************************************************
* fileobj
*/
int fileobj_create(int fd, struct memobj **objp, int *maxprotp)
int fileobj_create(int fd, struct memobj **objp, int *maxprotp, uintptr_t virt_addr)
{
ihk_mc_user_context_t ctx;
struct pager_create_result result __attribute__((aligned(64)));
@ -265,7 +265,7 @@ int fileobj_create(int fd, struct memobj **objp, int *maxprotp)
/* Get the actual pages NUMA interleaved */
for (j = 0; j < nr_pages; ++j) {
mo->pages[j] = ihk_mc_alloc_aligned_pages_node_user(1,
PAGE_P2ALIGN, IHK_MC_AP_NOWAIT, node);
PAGE_P2ALIGN, IHK_MC_AP_NOWAIT, node, virt_addr);
if (!mo->pages[j]) {
kprintf("%s: ERROR: allocating pages[%d]\n",
__FUNCTION__, j);
@ -558,7 +558,7 @@ out:
}
static int fileobj_get_page(struct memobj *memobj, off_t off,
int p2align, uintptr_t *physp, unsigned long *pflag)
int p2align, uintptr_t *physp, unsigned long *pflag, uintptr_t virt_addr)
{
struct thread *proc = cpu_local_var(current);
struct fileobj *obj = to_fileobj(memobj);
@ -571,7 +571,7 @@ static int fileobj_get_page(struct memobj *memobj, off_t off,
struct mcs_rwlock_node mcs_node;
int hash = (off >> PAGE_SHIFT) & FILEOBJ_PAGE_HASH_MASK;
dkprintf("fileobj_get_page(%p,%lx,%x,%p)\n", obj, off, p2align, physp);
dkprintf("fileobj_get_page(%p,%lx,%x,%x,%p)\n", obj, off, p2align, virt_addr, physp);
if (p2align != PAGE_P2ALIGN) {
return -ENOMEM;
}
@ -584,13 +584,13 @@ static int fileobj_get_page(struct memobj *memobj, off_t off,
int page_ind = off >> PAGE_SHIFT;
if (!memobj->pages[page_ind]) {
virt = ihk_mc_alloc_pages_user(1, IHK_MC_AP_NOWAIT | IHK_MC_AP_USER);
virt = ihk_mc_alloc_pages_user(1, IHK_MC_AP_NOWAIT | IHK_MC_AP_USER, virt_addr);
if (!virt) {
error = -ENOMEM;
kprintf("fileobj_get_page(%p,%lx,%x,%p):"
kprintf("fileobj_get_page(%p,%lx,%x,%x,%x,%p):"
"alloc failed. %d\n",
obj, off, p2align, physp,
obj, off, p2align, virt_addr, physp,
error);
goto out_nolock;
}
@ -627,22 +627,22 @@ static int fileobj_get_page(struct memobj *memobj, off_t off,
args = kmalloc(sizeof(*args), IHK_MC_AP_NOWAIT);
if (!args) {
error = -ENOMEM;
kprintf("fileobj_get_page(%p,%lx,%x,%p):"
kprintf("fileobj_get_page(%p,%lx,%x,%x,%p):"
"kmalloc failed. %d\n",
obj, off, p2align, physp, error);
obj, off, p2align, virt_addr, physp, error);
goto out;
}
if (!page) {
npages = 1 << p2align;
virt = ihk_mc_alloc_pages_user(npages, IHK_MC_AP_NOWAIT |
(to_memobj(obj)->flags & MF_ZEROFILL) ? IHK_MC_AP_USER : 0);
virt = ihk_mc_alloc_pages_user(npages, (IHK_MC_AP_NOWAIT |
(to_memobj(obj)->flags & MF_ZEROFILL) ? IHK_MC_AP_USER : 0), virt_addr);
if (!virt) {
error = -ENOMEM;
kprintf("fileobj_get_page(%p,%lx,%x,%p):"
kprintf("fileobj_get_page(%p,%lx,%x,%x,%p):"
"alloc failed. %d\n",
obj, off, p2align, physp,
obj, off, p2align, virt_addr, physp,
error);
goto out;
}
@ -707,8 +707,8 @@ out_nolock:
if (args) {
kfree(args);
}
dkprintf("fileobj_get_page(%p,%lx,%x,%p): %d %lx\n",
obj, off, p2align, physp, error, phys);
dkprintf("fileobj_get_page(%p,%lx,%x,%x,%p): %d %lx\n",
obj, off, p2align, virt_addr, physp, error, phys);
return error;
}

View File

@ -148,7 +148,7 @@ int prepare_process_ranges_args_envs(struct thread *thread,
}
if ((up_v = ihk_mc_alloc_pages_user(range_npages,
IHK_MC_AP_NOWAIT | ap_flags)) == NULL) {
IHK_MC_AP_NOWAIT | ap_flags, s)) == NULL) {
kprintf("ERROR: alloc pages for ELF section %i\n", i);
goto err;
}
@ -259,7 +259,7 @@ int prepare_process_ranges_args_envs(struct thread *thread,
e = addr + PAGE_SIZE * ARGENV_PAGE_COUNT;
if((args_envs = ihk_mc_alloc_pages_user(ARGENV_PAGE_COUNT,
IHK_MC_AP_NOWAIT)) == NULL){
IHK_MC_AP_NOWAIT, -1)) == NULL){
kprintf("ERROR: allocating pages for args/envs\n");
goto err;
}

View File

@ -65,7 +65,7 @@ struct memobj {
typedef void memobj_release_func_t(struct memobj *obj);
typedef void memobj_ref_func_t(struct memobj *obj);
typedef int memobj_get_page_func_t(struct memobj *obj, off_t off, int p2align, uintptr_t *physp, unsigned long *flag);
typedef int memobj_get_page_func_t(struct memobj *obj, off_t off, int p2align, uintptr_t *physp, unsigned long *flag, uintptr_t virt_addr);
typedef uintptr_t memobj_copy_page_func_t(struct memobj *obj, uintptr_t orgphys, int p2align);
typedef int memobj_flush_page_func_t(struct memobj *obj, uintptr_t phys, size_t pgsize);
typedef int memobj_invalidate_page_func_t(struct memobj *obj, uintptr_t phys, size_t pgsize);
@ -96,10 +96,10 @@ static inline void memobj_ref(struct memobj *obj)
}
static inline int memobj_get_page(struct memobj *obj, off_t off,
int p2align, uintptr_t *physp, unsigned long *pflag)
int p2align, uintptr_t *physp, unsigned long *pflag, uintptr_t virt_addr)
{
if (obj->ops->get_page) {
return (*obj->ops->get_page)(obj, off, p2align, physp, pflag);
return (*obj->ops->get_page)(obj, off, p2align, physp, pflag, virt_addr);
}
return -ENXIO;
}
@ -159,7 +159,7 @@ static inline int memobj_is_removable(struct memobj *obj)
return !!(obj->flags & MF_IS_REMOVABLE);
}
int fileobj_create(int fd, struct memobj **objp, int *maxprotp);
int fileobj_create(int fd, struct memobj **objp, int *maxprotp, uintptr_t virt_addr);
struct shmid_ds;
int shmobj_create(struct shmid_ds *ds, struct memobj **objp);
int zeroobj_create(struct memobj **objp);

View File

@ -390,7 +390,7 @@ struct vm_range {
};
struct vm_range_numa_policy {
struct list_head list;
struct rb_node policy_rb_node;
unsigned long start, end;
DECLARE_BITMAP(numa_mask, PROCESS_NUMA_MASK_BITS);
int numa_mem_policy;
@ -725,7 +725,7 @@ struct process_vm {
DECLARE_BITMAP(numa_mask, PROCESS_NUMA_MASK_BITS);
int numa_mem_policy;
/* Protected by memory_range_lock */
struct list_head vm_range_numa_policy_list;
struct rb_root vm_range_numa_policy_tree;
struct vm_range *range_cache[VM_RANGE_CACHE_SIZE];
int range_cache_ind;
struct swapinfo *swapinfo;

View File

@ -471,6 +471,7 @@ int arch_map_vdso(struct process_vm *vm); /* arch dependent */
int arch_setup_vdso(void);
int arch_cpu_read_write_register(struct ihk_os_cpu_register *desc,
enum mcctrl_os_cpu_operation op);
struct vm_range_numa_policy *vm_range_policy_search(struct process_vm *vm, uintptr_t addr);
#ifndef POSTK_DEBUG_ARCH_DEP_52
#define VDSO_MAXPAGES 2

View File

@ -76,7 +76,7 @@ static void *___kmalloc(int size, ihk_mc_ap_flag flag);
static void ___kfree(void *ptr);
static void *___ihk_mc_alloc_aligned_pages_node(int npages,
int p2align, ihk_mc_ap_flag flag, int node, int is_user);
int p2align, ihk_mc_ap_flag flag, int node, int is_user, uintptr_t virt_addr);
static void *___ihk_mc_alloc_pages(int npages, ihk_mc_ap_flag flag, int is_user);
static void ___ihk_mc_free_pages(void *p, int npages, int is_user);
@ -193,7 +193,7 @@ struct pagealloc_track_entry *__pagealloc_track_find_entry(
/* Top level routines called from macros */
void *_ihk_mc_alloc_aligned_pages_node(int npages, int p2align,
ihk_mc_ap_flag flag, int node, int is_user,
ihk_mc_ap_flag flag, int node, int is_user, uintptr_t virt_addr,
char *file, int line)
{
unsigned long irqflags;
@ -201,7 +201,7 @@ void *_ihk_mc_alloc_aligned_pages_node(int npages, int p2align,
struct pagealloc_track_addr_entry *addr_entry;
int hash, addr_hash;
void *r = ___ihk_mc_alloc_aligned_pages_node(npages,
p2align, flag, node, is_user);
p2align, flag, node, is_user, virt_addr);
if (!memdebug || !pagealloc_track_initialized)
return r;
@ -497,10 +497,10 @@ void pagealloc_memcheck(void)
/* Actual allocation routines */
static void *___ihk_mc_alloc_aligned_pages_node(int npages, int p2align,
ihk_mc_ap_flag flag, int node, int is_user)
ihk_mc_ap_flag flag, int node, int is_user, uintptr_t virt_addr)
{
if (pa_ops)
return pa_ops->alloc_page(npages, p2align, flag, node, is_user);
return pa_ops->alloc_page(npages, p2align, flag, node, is_user, virt_addr);
else
return early_alloc_pages(npages);
}
@ -508,7 +508,7 @@ static void *___ihk_mc_alloc_aligned_pages_node(int npages, int p2align,
static void *___ihk_mc_alloc_pages(int npages, ihk_mc_ap_flag flag,
int is_user)
{
return ___ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, is_user);
return ___ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, is_user, -1);
}
static void ___ihk_mc_free_pages(void *p, int npages, int is_user)
@ -544,7 +544,7 @@ static void reserve_pages(struct ihk_page_allocator_desc *pa_allocator,
extern int cpu_local_var_initialized;
static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
ihk_mc_ap_flag flag, int pref_node, int is_user)
ihk_mc_ap_flag flag, int pref_node, int is_user, uintptr_t virt_addr)
{
unsigned long pa = 0;
int i, node;
@ -553,6 +553,12 @@ static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
#endif
int numa_id;
struct vm_range_numa_policy *range_policy_iter = NULL;
int numa_mem_policy = -1;
struct process_vm *vm;
struct vm_range *range = NULL;
int chk_shm = 0;
if(npages <= 0)
return NULL;
@ -565,7 +571,23 @@ static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
/* No explicitly requested NUMA or user policy? */
if ((pref_node == -1) && (!(flag & IHK_MC_AP_USER) ||
cpu_local_var(current)->vm->numa_mem_policy == MPOL_DEFAULT)) {
goto distance_based;
if (virt_addr != -1) {
vm = cpu_local_var(current)->vm;
range_policy_iter = vm_range_policy_search(vm, virt_addr);
if (range_policy_iter) {
range = lookup_process_memory_range(vm, (uintptr_t)virt_addr, ((uintptr_t)virt_addr) + 1);
if (range) {
if( (range->memobj) && (range->memobj->flags == MF_SHM)) {
chk_shm = 1;
}
}
}
}
if ((!((range_policy_iter) && (range_policy_iter->numa_mem_policy != MPOL_DEFAULT))) && (chk_shm == 0))
goto distance_based;
}
node = ihk_mc_get_numa_id();
@ -611,7 +633,28 @@ static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
}
}
switch (cpu_local_var(current)->vm->numa_mem_policy) {
if ((virt_addr != -1) && (chk_shm == 0)) {
vm = cpu_local_var(current)->vm;
if (!(range_policy_iter)) {
range_policy_iter = vm_range_policy_search(vm, virt_addr);
}
if (range_policy_iter) {
range = lookup_process_memory_range(vm, (uintptr_t)virt_addr, ((uintptr_t)virt_addr) + 1);
if ((range && (range->memobj->flags == MF_SHM))) {
chk_shm = 1;
} else {
numa_mem_policy = range_policy_iter->numa_mem_policy;
}
}
}
if (numa_mem_policy == -1)
numa_mem_policy = cpu_local_var(current)->vm->numa_mem_policy;
switch (numa_mem_policy) {
case MPOL_BIND:
case MPOL_PREFERRED:

View File

@ -256,7 +256,7 @@ init_process_vm(struct process *owner, struct address_space *asp, struct process
ihk_atomic_set(&vm->refcount, 1);
vm->vm_range_tree = RB_ROOT;
INIT_LIST_HEAD(&vm->vm_range_numa_policy_list);
vm->vm_range_numa_policy_tree = RB_ROOT;
vm->address_space = asp;
vm->proc = owner;
vm->exiting = 0;
@ -646,7 +646,7 @@ static int copy_user_pte(void *arg0, page_table_t src_pt, pte_t *src_ptep, void
npages = pgsize / PAGE_SIZE;
virt = ihk_mc_alloc_aligned_pages_user(npages, pgalign,
IHK_MC_AP_NOWAIT);
IHK_MC_AP_NOWAIT, (uintptr_t)pgaddr);
if (!virt) {
kprintf("ERROR: copy_user_pte() allocating new page\n");
error = -ENOMEM;
@ -1765,7 +1765,7 @@ static int page_fault_process_memory_range(struct process_vm *vm, struct vm_rang
off = pte_get_off(ptep, pgsize);
}
error = memobj_get_page(range->memobj, off, p2align,
&phys, &memobj_flag);
&phys, &memobj_flag, fault_addr);
if (error) {
struct memobj *obj;
@ -1787,7 +1787,7 @@ retry:
npages = pgsize / PAGE_SIZE;
virt = ihk_mc_alloc_aligned_pages_user(npages, p2align,
IHK_MC_AP_NOWAIT |
(range->flag & VR_AP_USER) ? IHK_MC_AP_USER : 0);
((range->flag & VR_AP_USER) ? IHK_MC_AP_USER : 0), fault_addr);
if (!virt && !range->pgshift && (pgsize != PAGE_SIZE)) {
error = arch_get_smaller_page_size(NULL, pgsize, &pgsize, &p2align);
if (error) {
@ -1847,7 +1847,7 @@ retry:
npages = pgsize / PAGE_SIZE;
virt = ihk_mc_alloc_aligned_pages_user(npages, p2align,
IHK_MC_AP_NOWAIT);
IHK_MC_AP_NOWAIT, fault_addr);
if (!virt) {
error = -ENOMEM;
kprintf("page_fault_process_memory_range(%p,%lx-%lx %lx,%lx,%lx):cannot allocate copy page. %d\n", vm, range->start, range->end, range->flag, fault_addr, reason, error);
@ -2156,7 +2156,7 @@ int init_process_stack(struct thread *thread, struct program_load_desc *pn,
ap_flag ? "(IHK_MC_AP_USER)" : "");
stack = ihk_mc_alloc_aligned_pages_user(minsz >> PAGE_SHIFT,
LARGE_PAGE_P2ALIGN, IHK_MC_AP_NOWAIT | ap_flag);
LARGE_PAGE_P2ALIGN, IHK_MC_AP_NOWAIT | ap_flag, start);
if (!stack) {
kprintf("%s: error: couldn't allocate initial stack\n",
@ -2300,7 +2300,7 @@ unsigned long extend_process_region(struct process_vm *vm,
p = ihk_mc_alloc_aligned_pages_user(
(new_end_allocated - end_allocated) >> PAGE_SHIFT,
align_p2align, IHK_MC_AP_NOWAIT |
(!(vm->proc->mpol_flags & MPOL_NO_HEAP) ? IHK_MC_AP_USER : 0));
(!(vm->proc->mpol_flags & MPOL_NO_HEAP) ? IHK_MC_AP_USER : 0), end_allocated);
if (!p) {
return end_allocated;
@ -2891,7 +2891,7 @@ void sched_init(void)
ihk_mc_init_context(&idle_thread->ctx, NULL, idle);
ihk_mc_spinlock_init(&idle_thread->vm->memory_range_lock);
idle_thread->vm->vm_range_tree = RB_ROOT;
INIT_LIST_HEAD(&idle_thread->vm->vm_range_numa_policy_list);
idle_thread->vm->vm_range_numa_policy_tree = RB_ROOT;
idle_thread->proc->pid = 0;
idle_thread->tid = ihk_mc_get_processor_id();

View File

@ -374,7 +374,7 @@ static void shmobj_ref(struct memobj *memobj)
}
static int shmobj_get_page(struct memobj *memobj, off_t off, int p2align,
uintptr_t *physp, unsigned long *pflag)
uintptr_t *physp, unsigned long *pflag, uintptr_t virt_addr)
{
struct shmobj *obj = to_shmobj(memobj);
int error;
@ -415,7 +415,7 @@ static int shmobj_get_page(struct memobj *memobj, off_t off, int p2align,
if (!page) {
npages = 1 << p2align;
virt = ihk_mc_alloc_aligned_pages_user(npages, p2align,
IHK_MC_AP_NOWAIT);
IHK_MC_AP_NOWAIT, virt_addr);
if (!virt) {
error = -ENOMEM;
ekprintf("shmobj_get_page(%p,%#lx,%d,%p):"

View File

@ -1473,7 +1473,7 @@ do_mmap(const intptr_t addr0, const size_t len0, const int prot,
maxprot = PROT_READ | PROT_WRITE | PROT_EXEC;
if (!(flags & MAP_ANONYMOUS)) {
off = off0;
error = fileobj_create(fd, &memobj, &maxprot);
error = fileobj_create(fd, &memobj, &maxprot, addr0);
#ifdef ATTACHED_MIC
/*
* XXX: refuse device mapping in attached-mic now:
@ -1536,7 +1536,7 @@ do_mmap(const intptr_t addr0, const size_t len0, const int prot,
}
p = ihk_mc_alloc_aligned_pages_user(npages, p2align,
IHK_MC_AP_NOWAIT | ap_flag);
IHK_MC_AP_NOWAIT | ap_flag, addr0);
if (p == NULL) {
dkprintf("%s: warning: failed to allocate %d contiguous pages "
" (bytes: %lu, pgshift: %d), enabling demand paging\n",
@ -3771,6 +3771,57 @@ perf_mmap(struct mckfd *sfd, ihk_mc_user_context_t *ctx)
return rc;
}
struct vm_range_numa_policy *vm_range_policy_search(struct process_vm *vm, uintptr_t addr)
{
struct rb_root *root = &vm->vm_range_numa_policy_tree;
struct rb_node *node = root->rb_node;
struct vm_range_numa_policy *numa_policy = NULL;
while (node) {
numa_policy = rb_entry(node, struct vm_range_numa_policy, policy_rb_node);
if (addr < numa_policy->start) {
node = node->rb_left;
} else if (addr >= numa_policy->end) {
node = node->rb_right;
} else {
return numa_policy;
}
}
return NULL;
}
static int vm_policy_insert(struct process_vm *vm, struct vm_range_numa_policy *newrange)
{
struct rb_root *root = &vm->vm_range_numa_policy_tree;
struct rb_node **new = &(root->rb_node), *parent = NULL;
struct vm_range_numa_policy *range;
while (*new) {
range = rb_entry(*new, struct vm_range_numa_policy, policy_rb_node);
parent = *new;
if (newrange->end <= range->start) {
new = &((*new)->rb_left);
} else if (newrange->start >= range->end) {
new = &((*new)->rb_right);
} else {
ekprintf("vm_range_insert(%p,%lx-%lx (nodemask)%lx (policy)%d): overlap %lx-%lx (nodemask)%lx (policy)%d\n",
vm, newrange->start, newrange->end, newrange->numa_mask, newrange->numa_mem_policy,
range->start, range->end, range->numa_mask, range->numa_mem_policy);
return -EFAULT;
}
}
dkprintf("vm_range_insert: %p,%p: %lx-%lx (nodemask)%lx (policy)%d\n",
vm, newrange, newrange->start, newrange->end, newrange->numa_mask, newrange->numa_mem_policy);
rb_link_node(&newrange->policy_rb_node, parent, new);
rb_insert_color(&newrange->policy_rb_node, root);
return 0;
}
struct mc_perf_event*
mc_perf_event_alloc(struct perf_event_attr *attr)
{
@ -8063,8 +8114,7 @@ SYSCALL_DECLARE(mbind)
int error = 0;
int bit;
struct vm_range *range;
struct vm_range_numa_policy *range_policy, *range_policy_iter;
struct vm_range_numa_policy *range_policy_next = NULL;
struct vm_range_numa_policy *range_policy, *range_policy_iter = NULL;
DECLARE_BITMAP(numa_mask, PROCESS_NUMA_MASK_BITS);
dkprintf("%s: addr: 0x%lx, len: %lu, mode: 0x%x, "
@ -8275,17 +8325,12 @@ SYSCALL_DECLARE(mbind)
case MPOL_INTERLEAVE:
case MPOL_PREFERRED:
/* Adjust any overlapping range settings and add new one */
range_policy_next = NULL;
list_for_each_entry(range_policy_iter,
&vm->vm_range_numa_policy_list, list) {
range_policy_iter = vm_range_policy_search(vm, addr);
if (range_policy_iter) {
int adjusted = 0;
unsigned long orig_end = range_policy_iter->end;
if (range_policy_iter->end < addr)
continue;
/* Special case of entirely overlapping */
if (range_policy_iter->start == addr &&
if (range_policy_iter->start == addr &&
range_policy_iter->end == addr + len) {
range_policy = range_policy_iter;
goto mbind_update_only;
@ -8302,7 +8347,7 @@ SYSCALL_DECLARE(mbind)
if (orig_end > addr + len) {
if (adjusted) {
/* Add a new entry after */
range_policy = kmalloc(sizeof(*range_policy),
range_policy = kmalloc(sizeof(struct vm_range_numa_policy),
IHK_MC_AP_NOWAIT);
if (!range_policy) {
dkprintf("%s: error allocating range_policy\n",
@ -8311,31 +8356,24 @@ SYSCALL_DECLARE(mbind)
goto unlock_out;
}
memcpy(range_policy, range_policy_iter,
sizeof(*range_policy));
RB_CLEAR_NODE(&range_policy->policy_rb_node);
range_policy->start = addr + len;
range_policy->end = orig_end;
list_add(&range_policy->list,
&range_policy_iter->list);
range_policy_next = range_policy;
break;
error = vm_policy_insert(vm, range_policy);
if (error) {
kprintf("%s: ERROR: could not insert range: %d\n",__FUNCTION__, error);
return error;
}
}
else {
range_policy_iter->start = addr + len;
range_policy_next = range_policy_iter;
break;
}
}
/* Next one in ascending address order? */
if (range_policy_iter->start >= addr + len) {
range_policy_next = range_policy_iter;
break;
}
}
/* Add a new entry */
range_policy = kmalloc(sizeof(*range_policy),
range_policy = kmalloc(sizeof(struct vm_range_numa_policy),
IHK_MC_AP_NOWAIT);
if (!range_policy) {
dkprintf("%s: error allocating range_policy\n",
@ -8344,17 +8382,14 @@ SYSCALL_DECLARE(mbind)
goto unlock_out;
}
memset(range_policy, 0, sizeof(*range_policy));
RB_CLEAR_NODE(&range_policy->policy_rb_node);
range_policy->start = addr;
range_policy->end = addr + len;
if (range_policy_next) {
list_add_tail(&range_policy->list,
&range_policy_next->list);
}
else {
list_add_tail(&range_policy->list,
&vm->vm_range_numa_policy_list);
error = vm_policy_insert(vm, range_policy);
if (error) {
kprintf("%s: ERROR: could not insert range: %d\n",__FUNCTION__, error);
return error;
}
mbind_update_only:
@ -8395,8 +8430,6 @@ SYSCALL_DECLARE(set_mempolicy)
struct process_vm *vm = cpu_local_var(current)->vm;
int error = 0;
int bit, valid_mask;
struct vm_range_numa_policy *range_policy_iter;
struct vm_range_numa_policy *range_policy_next = NULL;
DECLARE_BITMAP(numa_mask, PROCESS_NUMA_MASK_BITS);
memset(numa_mask, 0, sizeof(numa_mask));
@ -8417,6 +8450,8 @@ SYSCALL_DECLARE(set_mempolicy)
}
}
mode &= ~MPOL_MODE_FLAGS;
switch (mode) {
case MPOL_DEFAULT:
if (nodemask && nodemask_bits) {
@ -8440,6 +8475,13 @@ SYSCALL_DECLARE(set_mempolicy)
set_bit(bit, vm->numa_mask);
}
#if 0
/* In man, "MPOL_DEFAULT mode deletes a process memory policy
other than the default and interprets that the memory policy"
falls back to the system default policy ", but not to delete
the NUMA memory policy.
There was no processing of Linux's same name command. */
/* Delete all range settings */
ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock);
list_for_each_entry_safe(range_policy_iter, range_policy_next,
@ -8448,6 +8490,7 @@ SYSCALL_DECLARE(set_mempolicy)
kfree(range_policy_iter);
}
ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock);
#endif
vm->numa_mem_policy = mode;
error = 0;
@ -8595,7 +8638,6 @@ SYSCALL_DECLARE(get_mempolicy)
/* Address range specific? */
if (flags & MPOL_F_ADDR) {
struct vm_range_numa_policy *range_policy_iter;
struct vm_range *range;
ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock);
@ -8607,16 +8649,8 @@ SYSCALL_DECLARE(get_mempolicy)
goto out;
}
list_for_each_entry(range_policy_iter,
&vm->vm_range_numa_policy_list, list) {
if (range_policy_iter->start > addr ||
range_policy_iter->end <= addr) {
continue;
}
range_policy = vm_range_policy_search(vm, addr);
range_policy = range_policy_iter;
break;
}
ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock);
}

View File

@ -169,7 +169,7 @@ out:
}
static int zeroobj_get_page(struct memobj *memobj, off_t off, int p2align,
uintptr_t *physp, unsigned long *pflag)
uintptr_t *physp, unsigned long *pflag, uintptr_t virt_addr)
{
int error;
struct zeroobj *obj = to_zeroobj(memobj);

View File

@ -90,7 +90,7 @@ void ihk_mc_reserve_arch_pages(struct ihk_page_allocator_desc *pa_allocator,
unsigned long, unsigned long, int));
struct ihk_mc_pa_ops {
void *(*alloc_page)(int, int, ihk_mc_ap_flag, int node, int is_user);
void *(*alloc_page)(int, int, ihk_mc_ap_flag, int node, int is_user, uintptr_t virt_addr);
void (*free_page)(void *, int, int is_user);
void *(*alloc)(int, ihk_mc_ap_flag);
@ -115,33 +115,33 @@ int ihk_mc_free_micpa(unsigned long mic_pa);
void ihk_mc_clean_micpa(void);
void *_ihk_mc_alloc_aligned_pages_node(int npages, int p2align,
ihk_mc_ap_flag flag, int node, int is_user, char *file, int line);
ihk_mc_ap_flag flag, int node, int is_user, uintptr_t virt_addr, char *file, int line);
#define ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, node) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, node, IHK_MC_PG_KERNEL, __FILE__, __LINE__);\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, node, IHK_MC_PG_KERNEL, -1, __FILE__, __LINE__);\
r;\
})
#define ihk_mc_alloc_aligned_pages_node_user(npages, p2align, flag, node) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, node, IHK_MC_PG_USER, __FILE__, __LINE__);\
#define ihk_mc_alloc_aligned_pages_node_user(npages, p2align, flag, node, virt_addr) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, node, IHK_MC_PG_USER, virt_addr, __FILE__, __LINE__);\
r;\
})
#define ihk_mc_alloc_aligned_pages(npages, p2align, flag) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, -1, IHK_MC_PG_KERNEL, __FILE__, __LINE__);\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, -1, IHK_MC_PG_KERNEL, -1, __FILE__, __LINE__);\
r;\
})
#define ihk_mc_alloc_aligned_pages_user(npages, p2align, flag) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, -1, IHK_MC_PG_USER, __FILE__, __LINE__);\
#define ihk_mc_alloc_aligned_pages_user(npages, p2align, flag, virt_addr) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, p2align, flag, -1, IHK_MC_PG_USER, virt_addr, __FILE__, __LINE__);\
r;\
})
#define ihk_mc_alloc_pages(npages, flag) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, IHK_MC_PG_KERNEL, __FILE__, __LINE__);\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, IHK_MC_PG_KERNEL, -1, __FILE__, __LINE__);\
r;\
})
#define ihk_mc_alloc_pages_user(npages, flag) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, IHK_MC_PG_USER, __FILE__, __LINE__);\
#define ihk_mc_alloc_pages_user(npages, flag, virt_addr) ({\
void *r = _ihk_mc_alloc_aligned_pages_node(npages, PAGE_P2ALIGN, flag, -1, IHK_MC_PG_USER, virt_addr, __FILE__, __LINE__);\
r;\
})

19
test/mbind/README Normal file
View File

@ -0,0 +1,19 @@
===================
Advance preparation
===================
1)Implement patch of test_trace_mem.patch
cd mckernel
patch -p0 < test_trace_mem.patch
make
make install
2)Compile command execution processing
cd mckernel/test/mbind/mcexec_test_proc/
make
==========
How to run
==========
./go_mbind_test.sh

58
test/mbind/chk_mbind_result.sh Executable file
View File

@ -0,0 +1,58 @@
#!/bin/sh
DEFAULT_POLICY_KIND="<default policy>"
#SHARED_POLICY_KIND="<default policy:Mapping of MAP_SHARED>"
NUMA_NODE_POLICY_KIND="<NUMA node policy>"
FILE_NAME=$1
CHK_LOG_FILE="./result/${FILE_NAME}.log"
source "./testcases/${FILE_NAME}.txt"
CHK_POLICY_KIND=${POLICY_KIND}
SET_MEM_POLICY=`grep "OK:set_mempolicy" $CHK_LOG_FILE | grep -o '(MPOL.*)'`
SET_POLICY_NUM=`grep -c1 "OK:mbind" $CHK_LOG_FILE`
for exec_num in `seq 0 $((SET_POLICY_NUM - 1))`
do
if [ $exec_num -lt 10 ]; then
NUMA_NODE_ADDR=`grep "OK:mbind" $CHK_LOG_FILE | grep -e "0$exec_num]" | grep -o '(0x.*000)'`
NUMA_NODE_POLICY=`grep "OK:mbind" $CHK_LOG_FILE | grep -e "0$exec_num]" | grep -o '(MPOL.*)'`
else
NUMA_NODE_ADDR=`grep "OK:mbind" $CHK_LOG_FILE | grep -e "$exec_num]" | grep -o '(0x.*000)'`
NUMA_NODE_POLICY=`grep "OK:mbind" $CHK_LOG_FILE | grep -e "$exec_num]" | grep -o '(MPOL.*)'`
fi
if [ "$CHK_POLICY_KIND" = "$DEFAULT_POLICY_KIND" ]; then
SET_MEM_POLICY_NUM=`grep -v $NUMA_NODE_ADDR $CHK_LOG_FILE | grep -e "$CHK_POLICY_KIND" | grep -ce "$SET_MEM_POLICY"`
if [ $SET_MEM_POLICY_NUM -gt 0 ]; then
echo "OK:" $exec_num $CHK_POLICY_KIND" - not address" $NUMA_NODE_ADDR "test policy" $SET_MEM_POLICY "allocate num:" $SET_MEM_POLICY_NUM
exit 0
else
echo "NG:" $exec_num $CHK_POLICY_KIND" - not address" $NUMA_NODE_ADDR "test policy" $SET_MEM_POLICY "allocate num:" $SET_MEM_POLICY_NUM
exit 1
fi
fi
ALLOCATE_POLICY=`grep "mckernel_allocate_aligned_pages_node" $CHK_LOG_FILE | grep -e $NUMA_NODE_ADDR | grep -e "$CHK_POLICY_KIND" | grep -o '(MPOL.*)'`
if [ "$CHK_POLICY_KIND" = "$NUMA_NODE_POLICY_KIND" ]; then
if [ $NUMA_NODE_POLICY != $ALLOCATE_POLICY ]; then
echo "NG:" $exec_num $CHK_POLICY_KIND" - address" $NUMA_NODE_ADDR "test policy" $NUMA_NODE_POLICY "allocate policy" $ALLOCATE_POLICY
exit 1
else
echo "OK:" $exec_num $CHK_POLICY_KIND" - address" $NUMA_NODE_ADDR "test policy" $NUMA_NODE_POLICY "allocate policy" $ALLOCATE_POLICY
fi
else
if [ $SET_MEM_POLICY != $ALLOCATE_POLICY ]; then
echo "NG:" $exec_num $CHK_POLICY_KIND" - address" $NUMA_NODE_ADDR "test policy" $SET_MEM_POLICY "allocate policy" $ALLOCATE_POLICY
exit 1
else
echo "OK:" $exec_num $CHK_POLICY_KIND" - address" $NUMA_NODE_ADDR "test policy" $SET_MEM_POLICY "allocate policy" $ALLOCATE_POLICY
fi
fi
done
exit 0

3
test/mbind/config Executable file
View File

@ -0,0 +1,3 @@
MCMOD_DIR=$HOME/ppos
export MCMOD_DIR

26
test/mbind/go_mbind_test.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/sh
START_NG_TEST_NO=0085
for test_case in `ls -1 ./testcases/*.txt`
do
case_name=`basename ${test_case} .txt`
logfile="./result/${case_name}.log"
./mbind_test.sh ${test_case} &> ${logfile}
if [ $? -eq 0 ]; then
./chk_mbind_result.sh ${case_name}
if [ $? -eq 0 ]; then
echo "[OK] ${case_name} is done."
else
echo "[NG] failed to test ${case_name}. Please check ${logfile}"
fi
else
test_number=`basename ${test_case} _mbind.txt`
if [ $test_number -ge $START_NG_TEST_NO ]; then
echo "[OK] ${case_name} is done(NG test case)."
else
echo "[NG] failed to test ${case_name}. Please check ${logfile}"
fi
fi
done

47
test/mbind/mbind_test.sh Executable file
View File

@ -0,0 +1,47 @@
#!/bin/sh
if [ $# -lt 1 ]; then
echo "Error: too few arguments."
echo "usage: `basename $0` <param_file>"
fi
# read config
source ./config
# read testcase param
source $1
# mcexec processのkill
./utils/kill_mcexec.sh &> /dev/null
# stop mckernel
sudo ${MCMOD_DIR}/sbin/mcstop+release.sh
sleep 1
# boot mckernel
echo "${MCMOD_DIR}/sbin/mcreboot.sh ${MCRBT_OPT%,}"
sudo ${MCMOD_DIR}/sbin/mcreboot.sh ${MCRBT_OPT%,}
sleep 1
if [ ! -e "/dev/mcos0" ]; then
echo "Error: failed to mcreboot"
exit 1
fi
# exec mckernel test program
echo "${MCMOD_DIR}/bin/mcexec ${USR_PROC}"
${MCMOD_DIR}/bin/mcexec ${USR_PROC}
#if [ $? -eq 0 ]; then
if [ $? == 0 ]; then
sleep 1
echo "${MCMOD_DIR}/sbin/ihkosctl ${OS_IDX} kmsg"
sudo ${MCMOD_DIR}/sbin/ihkosctl ${OS_IDX} kmsg
exit 0
else
echo "Error: faild to mcexec"
exit 1
fi

View File

@ -0,0 +1,7 @@
OBJS = exec_setmempolicy_mbind exec_setmempolicy_mbind_shared
LDFLAGS = -lnuma
all: $(OBJS)
clean:
rm $(OBJS)

View File

@ -0,0 +1,208 @@
#include <stdio.h>
#include <assert.h>
#include <sys/mman.h>
#include <numa.h>
#include <numaif.h>
#define PAGE_SIZE (4096)
typedef struct func_setmem_para {
int set_mode;
int dummy;
unsigned long set_nodemask;
unsigned long set_maxnode;
} set_mem_para;
typedef struct func_mbind_para {
int set_mode;
int loop_cnt;
unsigned long set_nodemask;
unsigned long set_maxnode;
unsigned flags;
} mbind_para;
typedef struct func_para {
set_mem_para para1;
mbind_para para2;
} main_para;
char *mempolicy [] = {
"MPOL_DEFAULT",
"MPOL_PREFERRED",
"MPOL_BIND",
"MPOL_INTERLEAVE"
};
int func_set_mempolicy(set_mem_para* inpara)
{
int rst = -1;
int set_mode = inpara->set_mode;
unsigned long set_nodemask = inpara->set_nodemask;
unsigned long set_maxnode = inpara->set_maxnode;
int mode = set_mode & 0x00000003;
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("-----\n");
return rst;
}
int func_mbind(mbind_para* inpara)
{
int rst = -1;
unsigned char *addr = NULL;
int get_mode = 0;
int i = 0;
unsigned long mem_len = PAGE_SIZE;
int set_mode = inpara->set_mode;
unsigned long set_nodemask = inpara->set_nodemask;
unsigned long set_maxnode = inpara->set_maxnode;
unsigned flags = inpara->flags;
int loop_cnt = inpara->loop_cnt;
int mode = set_mode & 0x00000003;
for (i = 0; i < loop_cnt; i++) {
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));
//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));
}
if ((inpara->set_mode & 0x000000ff) == 0xff) {
switch ((i & 0x3)) {
case 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_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_BIND;
break;
case MPOL_INTERLEAVE:
set_mode = ((set_mode & 0xffffff00) | MPOL_INTERLEAVE);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_INTERLEAVE;
break;
case MPOL_DEFAULT:
default:
set_mode = ((set_mode & 0xffffff00) | MPOL_DEFAULT);
set_nodemask = 0;
flags = MPOL_MF_STRICT;
mode = MPOL_DEFAULT;
break;
}
}
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);
//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);
}
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);
//assert(0 && "get_mempolicy failed");
return -1;
} else {
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n"
,i ,addr ,mempolicy[get_mode]);
}
rst = munmap(addr, mem_len);
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);
}
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");
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("-----\n");
}
return 0;
}
int main(int argc, char *argv[])
{
main_para inpara;
int rst = -1;
if (argc == 9 ) {
inpara.para1.set_mode = strtol(argv[1], NULL, 16);
inpara.para1.set_nodemask = strtoul(argv[2], NULL, 16);
inpara.para1.set_maxnode = strtol(argv[3], NULL, 10);
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_maxnode = strtoul(argv[6], NULL, 10);
inpara.para2.flags = strtoul(argv[7], NULL, 16);
inpara.para2.loop_cnt = strtol(argv[8], NULL, 10);
rst = func_mbind(&inpara.para2);
}
} else {
printf("NG: Invalid number of parameters(%d)\n",(argc-1));
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 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");
}
return rst;
}

View File

@ -0,0 +1,208 @@
#include <stdio.h>
#include <assert.h>
#include <sys/mman.h>
#include <numa.h>
#include <numaif.h>
#define PAGE_SIZE (4096)
typedef struct func_setmem_para {
int set_mode;
int dummy;
unsigned long set_nodemask;
unsigned long set_maxnode;
} set_mem_para;
typedef struct func_mbind_para {
int set_mode;
int loop_cnt;
unsigned long set_nodemask;
unsigned long set_maxnode;
unsigned flags;
} mbind_para;
typedef struct func_para {
set_mem_para para1;
mbind_para para2;
} main_para;
char *mempolicy [] = {
"MPOL_DEFAULT",
"MPOL_PREFERRED",
"MPOL_BIND",
"MPOL_INTERLEAVE"
};
int func_set_mempolicy(set_mem_para* inpara)
{
int rst = -1;
int set_mode = inpara->set_mode;
unsigned long set_nodemask = inpara->set_nodemask;
unsigned long set_maxnode = inpara->set_maxnode;
int mode = set_mode & 0x00000003;
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("-----\n");
return rst;
}
int func_mbind(mbind_para* inpara)
{
int rst = -1;
unsigned char *addr = NULL;
int get_mode = 0;
int i = 0;
unsigned long mem_len = PAGE_SIZE;
int set_mode = inpara->set_mode;
unsigned long set_nodemask = inpara->set_nodemask;
unsigned long set_maxnode = inpara->set_maxnode;
unsigned flags = inpara->flags;
int loop_cnt = inpara->loop_cnt;
int mode = set_mode & 0x00000003;
for (i = 0; i < loop_cnt; i++) {
addr = mmap(0, mem_len, (PROT_READ | PROT_WRITE),
(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_ANONYMOUS | MAP_SHARED | MAP_POPULATE));
//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_SHARED | MAP_POPULATE));
}
if ((inpara->set_mode & 0x000000ff) == 0xff) {
switch ((i & 0x3)) {
case 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_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_BIND;
break;
case MPOL_INTERLEAVE:
set_mode = ((set_mode & 0xffffff00) | MPOL_INTERLEAVE);
set_nodemask = inpara->set_nodemask;
flags = 0;
mode = MPOL_INTERLEAVE;
break;
case MPOL_DEFAULT:
default:
set_mode = ((set_mode & 0xffffff00) | MPOL_DEFAULT);
set_nodemask = 0;
flags = MPOL_MF_STRICT;
mode = MPOL_DEFAULT;
break;
}
}
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);
//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);
}
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);
//assert(0 && "get_mempolicy failed");
return -1;
} else {
printf("[%02d] OK:get_mempolicy - addr:(0x%016lx) mode:(%s)\n"
,i ,addr ,mempolicy[get_mode]);
}
rst = munmap(addr, mem_len);
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);
}
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");
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("-----\n");
}
return 0;
}
int main(int argc, char *argv[])
{
main_para inpara;
int rst = -1;
if (argc == 9 ) {
inpara.para1.set_mode = strtol(argv[1], NULL, 16);
inpara.para1.set_nodemask = strtoul(argv[2], NULL, 16);
inpara.para1.set_maxnode = strtol(argv[3], NULL, 10);
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_maxnode = strtoul(argv[6], NULL, 10);
inpara.para2.flags = strtoul(argv[7], NULL, 16);
inpara.para2.loop_cnt = strtol(argv[8], NULL, 10);
rst = func_mbind(&inpara.para2);
}
} else {
printf("NG: Invalid number of parameters(%d)\n",(argc-1));
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 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");
}
return rst;
}

0
test/mbind/result/.gitignore vendored Normal file
View File

View File

@ -0,0 +1,75 @@
diff --git kernel/mem.c kernel/mem.c
index 62cb206..5bfb6d6 100644
--- kernel/mem.c
+++ kernel/mem.c
@@ -542,6 +542,15 @@ static void reserve_pages(struct ihk_page_allocator_desc *pa_allocator,
ihk_pagealloc_reserve(pa_allocator, start, end);
}
+#if 1 /* Trace for DEBUG */
+char *mempolicy [] = {
+ "MPOL_DEFAULT",
+ "MPOL_PREFERRED",
+ "MPOL_BIND",
+ "MPOL_INTERLEAVE"
+};
+#endif
+
extern int cpu_local_var_initialized;
static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
ihk_mc_ap_flag flag, int pref_node, int is_user, uintptr_t virt_addr)
@@ -585,6 +594,23 @@ static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
}
}
+#if 1 /* Trace for DEBUG */
+ if (!((range_policy_iter) && (range_policy_iter->numa_mem_policy != MPOL_DEFAULT))) {
+ if ((range_policy_iter) && (range_policy_iter->numa_mem_policy == MPOL_DEFAULT)) {
+ if (chk_shm == 0) {
+ kprintf("%s[%d]: addr(0x%016lx) policy(%s) <NUMA node policy>\n"
+ ,__FUNCTION__ ,__LINE__ ,virt_addr ,mempolicy[(range_policy_iter->numa_mem_policy & 0x3)]);
+ }
+ } else {
+ if ((cpu_local_var(current)->vm->numa_mem_policy == MPOL_DEFAULT) && (virt_addr != -1)) {
+ if (virt_addr) {
+ kprintf("%s[%d]: addr(0x%016lx) policy(%s) <default policy>\n"
+ ,__FUNCTION__ ,__LINE__ ,virt_addr ,mempolicy[(cpu_local_var(current)->vm->numa_mem_policy & 0x3)]);
+ }
+ }
+ }
+ }
+#endif
if ((!((range_policy_iter) && (range_policy_iter->numa_mem_policy != MPOL_DEFAULT))) && (chk_shm == 0))
goto distance_based;
@@ -647,10 +673,30 @@ static void *mckernel_allocate_aligned_pages_node(int npages, int p2align,
chk_shm = 1;
} else {
numa_mem_policy = range_policy_iter->numa_mem_policy;
+
+#if 1 /* Trace for DEBUG */
+ kprintf("%s[%d]: addr(0x%016lx) policy(%s) <NUMA node policy>\n"
+ ,__FUNCTION__ ,__LINE__ ,virt_addr ,mempolicy[(numa_mem_policy & 0x3)]);
+#endif
+
}
}
}
+#if 1 /* Trace for DEBUG */
+ if (numa_mem_policy == -1) {
+ if (chk_shm == 1) {
+ kprintf("%s[%d]: addr(0x%016lx) policy(%s) <default policy:Mapping of MAP_SHARED>\n"
+ ,__FUNCTION__ ,__LINE__ ,virt_addr ,mempolicy[(cpu_local_var(current)->vm->numa_mem_policy & 0x3)]);
+ } else {
+ if (virt_addr) {
+ kprintf("%s[%d]: addr(0x%016lx) policy(%s) <default policy>\n"
+ ,__FUNCTION__ ,__LINE__ ,virt_addr ,mempolicy[(cpu_local_var(current)->vm->numa_mem_policy & 0x3)]);
+ }
+ }
+ }
+#endif
+
if (numa_mem_policy == -1)
numa_mem_policy = cpu_local_var(current)->vm->numa_mem_policy;

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8001 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8002 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8002 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8003 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8001 0x1 1 0x8002 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8002 0x1 1 0x8001 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8003 0x1 1 0x8000 0x0 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8001 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8002 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8003 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8002 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8003 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8000 0x0 2 0x8003 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8001 0x3 2 0x8002 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8002 0x3 2 0x8001 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 1`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8003 0x3 2 0x8000 0x0 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8001 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8002 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8002 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8003 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8001 0x1 1 0x8002 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8002 0x1 1 0x8001 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8003 0x1 1 0x8000 0x0 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8001 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8002 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8003 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8002 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8003 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8000 0x0 2 0x8003 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8001 0x3 2 0x8002 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8002 0x3 2 0x8001 0x3 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 16`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8003 0x3 2 0x8000 0x0 2 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8001 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8002 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x80ff 0x1 1 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8002 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8003 0x1 1 0x8000 0x0 1 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8000 0x0 1 0x8003 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8001 0x1 1 0x8002 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8002 0x1 1 0x8001 0x1 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind_shared 0x8003 0x1 1 0x8000 0x0 1 0 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8001 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8002 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8003 0x3 2 0 1"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 4"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x80ff 0x3 2 0 40"
OS_IDX=0
POLICY_KIND="<NUMA node policy>"
#POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8000 0x0 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

View File

@ -0,0 +1,6 @@
MCRBT_OPT="-m `./utils/gen_mem_chunks.sh "0 1" 32M 128`"
USR_PROC="mcexec_test_proc/exec_setmempolicy_mbind 0x8001 0x3 2 0x8000 0x0 2 1 1"
OS_IDX=0
#POLICY_KIND="<NUMA node policy>"
POLICY_KIND="<default policy>"
#POLICY_KIND="<default policy:Mapping of MAP_SHARED>"

Some files were not shown because too many files have changed in this diff Show More