X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fmem_dlmalloc.c;h=9b089aee8ec86a1e017a6398bd13e94255817baa;hb=2fef3dfa5cd916baf346369e47be468e7887904b;hp=38226e26f8f190a732cac4a4e79496476d973e02;hpb=a690fdbfe179e0ea65818c03b52535bf9210efd0;p=vpp.git diff --git a/src/vppinfra/mem_dlmalloc.c b/src/vppinfra/mem_dlmalloc.c index 38226e26f8f..9b089aee8ec 100644 --- a/src/vppinfra/mem_dlmalloc.c +++ b/src/vppinfra/mem_dlmalloc.c @@ -31,11 +31,7 @@ typedef struct uword callers[12]; /* Count of allocations with this traceback. */ -#if CLIB_VEC64 > 0 - u64 n_allocations; -#else u32 n_allocations; -#endif /* Count of bytes allocated with this traceback. */ u32 n_bytes; @@ -243,46 +239,25 @@ clib_mem_init_thread_safe (void *memory, uword memory_size) } void * -clib_mem_init_thread_safe_numa (void *memory, uword memory_size) +clib_mem_init_thread_safe_numa (void *memory, uword memory_size, u8 numa) { + clib_mem_vm_alloc_t alloc = { 0 }; + clib_error_t *err; void *heap; - unsigned long this_numa; - - heap = - clib_mem_init_internal (memory, memory_size, - 0 /* do NOT clib_mem_set_heap */ ); - - ASSERT (heap); - - this_numa = os_get_numa_index (); - -#if HAVE_NUMA_LIBRARY > 0 - unsigned long nodemask = 1 << this_numa; - void *page_base; - unsigned long page_mask; - long rv; - /* - * Bind the heap to the current thread's NUMA node. - * heap is not naturally page-aligned, so fix it. - */ - - page_mask = ~(clib_mem_get_page_size () - 1); - page_base = (void *) (((unsigned long) heap) & page_mask); - - clib_warning ("Bind heap at %llx size %llx to NUMA numa %d", - page_base, memory_size, this_numa); + alloc.size = memory_size; + alloc.flags = CLIB_MEM_VM_F_NUMA_FORCE; + alloc.numa_node = numa; + if ((err = clib_mem_vm_ext_alloc (&alloc))) + { + clib_error_report (err); + return 0; + } - rv = mbind (page_base, memory_size, MPOL_BIND /* mode */ , - &nodemask /* nodemask */ , - BITS (nodemask) /* max node number */ , - MPOL_MF_MOVE /* flags */ ); + heap = clib_mem_init_internal (memory, memory_size, + 0 /* do NOT clib_mem_set_heap */ ); - if (rv < 0) - clib_unix_warning ("mbind"); -#else - clib_warning ("mbind unavailable, can't bind to numa %d", this_numa); -#endif + ASSERT (heap); return heap; }