diff options
Diffstat (limited to 'src/vppinfra')
-rw-r--r-- | src/vppinfra/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/vppinfra/config.h.in | 1 | ||||
-rw-r--r-- | src/vppinfra/mem.h | 3 | ||||
-rw-r--r-- | src/vppinfra/mem_dlmalloc.c | 49 |
4 files changed, 17 insertions, 45 deletions
diff --git a/src/vppinfra/CMakeLists.txt b/src/vppinfra/CMakeLists.txt index 60e6eeff9fe..1c234cce234 100644 --- a/src/vppinfra/CMakeLists.txt +++ b/src/vppinfra/CMakeLists.txt @@ -24,13 +24,6 @@ else(VPP_USE_DLMALLOC) set(DLMALLOC 0) endif(VPP_USE_DLMALLOC) -find_library(NUMA numa) -if (NUMA) - set(NUMA_LIBRARY_FOUND 1) -else(NUMA) - set(NUMA_LIBRARY_FOUND 0) -endif() - configure_file( ${CMAKE_SOURCE_DIR}/vppinfra/config.h.in ${CMAKE_BINARY_DIR}/vppinfra/config.h @@ -217,7 +210,7 @@ endif(VPP_USE_DLMALLOC) add_vpp_library(vppinfra SOURCES ${VPPINFRA_SRCS} - LINK_LIBRARIES m ${NUMA} + LINK_LIBRARIES m INSTALL_HEADERS ${VPPINFRA_HEADERS} COMPONENT libvppinfra ) diff --git a/src/vppinfra/config.h.in b/src/vppinfra/config.h.in index b2366630447..a7a22a6a992 100644 --- a/src/vppinfra/config.h.in +++ b/src/vppinfra/config.h.in @@ -21,7 +21,6 @@ #endif #define USE_DLMALLOC @DLMALLOC@ -#define HAVE_NUMA_LIBRARY @NUMA_LIBRARY_FOUND@ #define CLIB_TARGET_TRIPLET "@CMAKE_C_COMPILER_TARGET@" #endif diff --git a/src/vppinfra/mem.h b/src/vppinfra/mem.h index c00c78ad9a4..0367c4a1213 100644 --- a/src/vppinfra/mem.h +++ b/src/vppinfra/mem.h @@ -308,7 +308,8 @@ clib_mem_set_heap (void *heap) void *clib_mem_init (void *heap, uword size); void *clib_mem_init_thread_safe (void *memory, uword memory_size); -void *clib_mem_init_thread_safe_numa (void *memory, uword memory_size); +void *clib_mem_init_thread_safe_numa (void *memory, uword memory_size, + u8 numa); void clib_mem_exit (void); diff --git a/src/vppinfra/mem_dlmalloc.c b/src/vppinfra/mem_dlmalloc.c index 38226e26f8f..d62bb740c6c 100644 --- a/src/vppinfra/mem_dlmalloc.c +++ b/src/vppinfra/mem_dlmalloc.c @@ -243,46 +243,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; } |