mmap()/stack/heap: follow user requested NUMA policy

This commit is contained in:
Balazs Gerofi
2016-12-31 17:32:51 +09:00
parent e3f0662130
commit 5bac38ce8b
2 changed files with 11 additions and 6 deletions

View File

@@ -1841,6 +1841,7 @@ int init_process_stack(struct thread *thread, struct program_load_desc *pn,
unsigned long minsz; unsigned long minsz;
unsigned long at_rand; unsigned long at_rand;
struct process *proc = thread->proc; struct process *proc = thread->proc;
unsigned long __flag;
/* create stack range */ /* create stack range */
end = STACK_TOP(&thread->vm->region); end = STACK_TOP(&thread->vm->region);
@@ -1863,8 +1864,11 @@ int init_process_stack(struct thread *thread, struct program_load_desc *pn,
return rc; return rc;
} }
__flag = (size >= 16777216) ? IHK_MC_AP_USER : 0;
/* map physical pages for initial stack frame */ /* map physical pages for initial stack frame */
stack = ihk_mc_alloc_pages(minsz >> PAGE_SHIFT, IHK_MC_AP_NOWAIT); stack = ihk_mc_alloc_pages(minsz >> PAGE_SHIFT,
IHK_MC_AP_NOWAIT | __flag);
if (!stack) { if (!stack) {
return -ENOMEM; return -ENOMEM;
} }
@@ -2027,7 +2031,8 @@ unsigned long extend_process_region(struct process_vm *vm,
p=0; p=0;
}else{ }else{
p = ihk_mc_alloc_pages((aligned_new_end - aligned_end) >> PAGE_SHIFT, IHK_MC_AP_NOWAIT); p = ihk_mc_alloc_pages((aligned_new_end - aligned_end) >> PAGE_SHIFT,
IHK_MC_AP_NOWAIT | IHK_MC_AP_USER);
if (!p) { if (!p) {
return end; return end;

View File

@@ -1321,15 +1321,15 @@ do_mmap(const intptr_t addr0, const size_t len0, const int prot,
npages = len >> PAGE_SHIFT; npages = len >> PAGE_SHIFT;
/* Small allocations mostly benefit from closest RAM, /* Small allocations mostly benefit from closest RAM,
* otherwise follow user requested policy */ * otherwise follow user requested policy */
unsigned long __flag = (len >= 1048576) ? IHK_MC_AP_USER : 0; unsigned long __flag = (len >= 2097152) ? IHK_MC_AP_USER : 0;
p = ihk_mc_alloc_aligned_pages(npages, p2align, p = ihk_mc_alloc_aligned_pages(npages, p2align,
IHK_MC_AP_NOWAIT | __flag); IHK_MC_AP_NOWAIT | __flag);
if (p == NULL) { if (p == NULL) {
ekprintf("%s: warning: failed to allocate %d contiguous pages" dkprintf("%s: warning: failed to allocate %d contiguous pages "
" (pgshift: %d), enabling demand paging\n", " (bytes: %lu, pgshift: %d), enabling demand paging\n",
__FUNCTION__, __FUNCTION__,
npages, p2align); npages, npages * PAGE_SIZE, p2align);
/* Give demand paging a chance */ /* Give demand paging a chance */
vrflags |= VR_DEMAND_PAGING; vrflags |= VR_DEMAND_PAGING;