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 <anatoly.burakov@intel.com>
This commit is contained in:
Anatoly Burakov 2019-03-29 14:01:29 +00:00 committed by Thomas Monjalon
parent 76f8486e16
commit 23d5455517
3 changed files with 18 additions and 2 deletions

View File

@ -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"

View File

@ -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;

View File

@ -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