diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-04-16 12:49:33 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-04-27 15:25:42 +0300 |
commit | 02665acfcb2c2821eb99da5e70fd8980fa713721 (patch) | |
tree | 759f19c0030f8eb6fb53ec4f480e247282c19807 | |
parent | 5b6bb50de0c0383a88d6367d0b64759e5a5d24a4 (diff) |
linux-dpdk: preallocate dpdk memory in process mode
DPDK memory needs to be preallocated to support process mode. The amount of
preallocated memory can be adjusted with dpdk.process_mode_memory_mb
configuration file option.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Jere Leppänen <jere.leppanen@nokia.com>
-rw-r--r-- | config/odp-linux-dpdk.conf | 12 | ||||
-rw-r--r-- | platform/linux-dpdk/m4/odp_libconfig.m4 | 2 | ||||
-rw-r--r-- | platform/linux-dpdk/odp_init.c | 28 |
3 files changed, 36 insertions, 6 deletions
diff --git a/config/odp-linux-dpdk.conf b/config/odp-linux-dpdk.conf index 7242bc32f..0c541fdd5 100644 --- a/config/odp-linux-dpdk.conf +++ b/config/odp-linux-dpdk.conf @@ -16,7 +16,7 @@ # Mandatory fields odp_implementation = "linux-dpdk" -config_file_version = "0.1.10" +config_file_version = "0.1.11" # System options system: { @@ -37,6 +37,16 @@ system: { thread_count_max = 256 } +# DPDK options +dpdk: { + # Amount of preallocated memory for process mode usage in megabytes + # + # NOTE: Process mode is not officially supported by DPDK. Application + # should reserve all shared resources and configure the system before + # forking child processes for the best success probability. + process_mode_memory_mb = 512 +} + # Pool options pool: { # Packet pool options diff --git a/platform/linux-dpdk/m4/odp_libconfig.m4 b/platform/linux-dpdk/m4/odp_libconfig.m4 index 7f9ca3d6e..f56946ec5 100644 --- a/platform/linux-dpdk/m4/odp_libconfig.m4 +++ b/platform/linux-dpdk/m4/odp_libconfig.m4 @@ -3,7 +3,7 @@ ########################################################################## m4_define([_odp_config_version_generation], [0]) m4_define([_odp_config_version_major], [1]) -m4_define([_odp_config_version_minor], [10]) +m4_define([_odp_config_version_minor], [11]) m4_define([_odp_config_version], [_odp_config_version_generation._odp_config_version_major._odp_config_version_minor]) diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 98f7d3926..1f39c4377 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -1,5 +1,5 @@ /* Copyright (c) 2013-2018, Linaro Limited - * Copyright (c) 2019, Nokia + * Copyright (c) 2019-2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -18,6 +18,7 @@ #include <stdio.h> #include <unistd.h> #include <ctype.h> +#include <inttypes.h> #include <rte_config.h> #include <rte_eal.h> @@ -80,6 +81,20 @@ static int _odp_init_dpdk(const char *cmdline) { int dpdk_argc; int i, cmdlen; + const char *str; + uint32_t mem_prealloc; + int val = 0; + + ODP_PRINT("DPDK config:\n"); + + str = "dpdk.process_mode_memory_mb"; + if (!_odp_libconfig_lookup_int(str, &val)) { + ODP_ERR("Config option '%s' not found.\n", str); + return -1; + } + mem_prealloc = val; + + ODP_PRINT(" %s: %" PRIu32 "\n\n", str, mem_prealloc); if (cmdline == NULL) { cmdline = getenv("ODP_PLATFORM_PARAMS"); @@ -87,12 +102,17 @@ static int _odp_init_dpdk(const char *cmdline) cmdline = ""; } - cmdlen = snprintf(NULL, 0, "odpdpdk %s ", cmdline); + cmdlen = snprintf(NULL, 0, "odpdpdk -m %" PRIu32 " %s ", mem_prealloc, cmdline); char full_cmdline[cmdlen]; - /* first argument is facility log, simply bind it to odpdpdk for now.*/ - cmdlen = snprintf(full_cmdline, cmdlen, "odpdpdk %s", cmdline); + /* First argument is facility log, simply bind it to odpdpdk for now. In + * process mode DPDK memory has to be preallocated. */ + if (odp_global_ro.init_param.mem_model == ODP_MEM_MODEL_PROCESS) + cmdlen = snprintf(full_cmdline, cmdlen, "odpdpdk -m %" PRIu32 " %s", + mem_prealloc, cmdline); + else + cmdlen = snprintf(full_cmdline, cmdlen, "odpdpdk %s", cmdline); for (i = 0, dpdk_argc = 1; i < cmdlen; ++i) { if (isspace(full_cmdline[i])) |