From 23d5455517568966ca8cac216941128ed3d3a455 Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Fri, 29 Mar 2019 14:01:29 +0000 Subject: [PATCH] mem: warn user when running without NUMA support Running in non-legacy mode on a NUMA-enabled system without libnuma is unsupported, so explicitly print out a warning when trying to do so. Running in legacy mode without libnuma is still supported whether or not we are running with libnuma support enabled, so also fix init to allow that scenario. Cc: stable@dpdk.org Signed-off-by: Anatoly Burakov --- lib/librte_eal/common/eal_options.h | 2 ++ lib/librte_eal/linux/eal/eal_memalloc.c | 4 ++++ lib/librte_eal/linux/eal/eal_memory.c | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h index 58ee9ae333..9855429e58 100644 --- a/lib/librte_eal/common/eal_options.h +++ b/lib/librte_eal/common/eal_options.h @@ -5,6 +5,8 @@ #ifndef EAL_OPTIONS_H #define EAL_OPTIONS_H +#include "getopt.h" + enum { /* long options mapped to a short option */ #define OPT_HELP "help" diff --git a/lib/librte_eal/linux/eal/eal_memalloc.c b/lib/librte_eal/linux/eal/eal_memalloc.c index 14c3ea838e..a965a9b652 100644 --- a/lib/librte_eal/linux/eal/eal_memalloc.c +++ b/lib/librte_eal/linux/eal/eal_memalloc.c @@ -725,6 +725,10 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, __func__, socket_id, cur_socket_id); goto mapped; } +#else + if (rte_socket_count() > 1) + RTE_LOG(DEBUG, EAL, "%s(): not checking hugepage NUMA node.\n", + __func__); #endif ms->addr = addr; diff --git a/lib/librte_eal/linux/eal/eal_memory.c b/lib/librte_eal/linux/eal/eal_memory.c index 23fe441279..39cd359a03 100644 --- a/lib/librte_eal/linux/eal/eal_memory.c +++ b/lib/librte_eal/linux/eal/eal_memory.c @@ -50,6 +50,7 @@ #include "eal_internal_cfg.h" #include "eal_filesystem.h" #include "eal_hugepages.h" +#include "eal_options.h" #define PFN_MASK_SIZE 8 @@ -2105,7 +2106,8 @@ memseg_primary_init_32(void) socket_id = rte_socket_id_by_idx(i); #ifndef RTE_EAL_NUMA_AWARE_HUGEPAGES - if (socket_id > 0) + /* we can still sort pages by socket in legacy mode */ + if (!internal_config.legacy_mem && socket_id > 0) break; #endif @@ -2286,7 +2288,8 @@ memseg_primary_init(void) int socket_id = rte_socket_id_by_idx(i); #ifndef RTE_EAL_NUMA_AWARE_HUGEPAGES - if (socket_id > 0) + /* we can still sort pages by socket in legacy mode */ + if (!internal_config.legacy_mem && socket_id > 0) break; #endif memtypes[cur_type].page_sz = hugepage_sz; @@ -2445,6 +2448,13 @@ rte_eal_memseg_init(void) } else { RTE_LOG(ERR, EAL, "Cannot get current resource limits\n"); } +#ifndef RTE_EAL_NUMA_AWARE_HUGEPAGES + if (!internal_config.legacy_mem && rte_socket_count() > 1) { + RTE_LOG(WARNING, EAL, "DPDK is running on a NUMA system, but is compiled without NUMA support.\n"); + RTE_LOG(WARNING, EAL, "This will have adverse consequences for performance and usability.\n"); + RTE_LOG(WARNING, EAL, "Please use --"OPT_LEGACY_MEM" option, or recompile with NUMA support.\n"); + } +#endif return rte_eal_process_type() == RTE_PROC_PRIMARY ? #ifndef RTE_ARCH_64 -- 2.20.1