[dpdk-dev] [PATCH v2] eal: add additional info if lcore exceeds max cores
David Hunt
david.hunt at intel.com
Wed Sep 15 14:11:04 CEST 2021
If the user requests to use an lcore above 128 using -l or -c,
the eal will exit with "EAL: invalid core list syntax" and
very little other useful information.
This patch adds some extra information suggesting to use --lcores
so that physical cores above RTE_MAX_LCORE (default 128) can be
used. This is achieved by using the --lcores option by mapping
the logical cores in the application onto to physical cores.
There is no change in functionalty, just additional messages
suggesting how the --lcores option might be used for the supplied
list of lcores. For example, if "-l 12-14,130,132" is used, we
see the following additional output on the command line:
EAL: Error = One of the 5 cores provided exceeds RTE_MAX_LCORE (128)
EAL: Please use --lcores instead, e.g. --lcores 0 at 12,1 at 13,2 at 14,3 at 130,4 at 132
Signed-off-by: David Hunt <david.hunt at intel.com>
---
changes in v2
* Rather than increasing the default max lcores (as in v1),
it was agreed to do this instead (switch to --lcores).
* As the other patches in the v1 of the set are no longer related
to this change, I'll submit as a separate patch set.
---
lib/eal/common/eal_common_options.c | 31 +++++++++++++++++++++++++----
1 file changed, 27 insertions(+), 4 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index ff5861b5f3..5c7a5a45a5 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -836,6 +836,8 @@ eal_parse_service_corelist(const char *corelist)
return 0;
}
+#define MAX_LCORES_STRING 512
+
static int
eal_parse_corelist(const char *corelist, int *cores)
{
@@ -843,6 +845,9 @@ eal_parse_corelist(const char *corelist, int *cores)
char *end = NULL;
int min, max;
int idx;
+ bool overflow = false;
+ char lcores[MAX_LCORES_STRING] = "";
+ int len = 0;
for (idx = 0; idx < RTE_MAX_LCORE; idx++)
cores[idx] = -1;
@@ -862,8 +867,10 @@ eal_parse_corelist(const char *corelist, int *cores)
idx = strtol(corelist, &end, 10);
if (errno || end == NULL)
return -1;
- if (idx < 0 || idx >= RTE_MAX_LCORE)
+ if (idx < 0)
return -1;
+ if (idx >= RTE_MAX_LCORE)
+ overflow = true;
while (isblank(*end))
end++;
if (*end == '-') {
@@ -873,10 +880,19 @@ eal_parse_corelist(const char *corelist, int *cores)
if (min == RTE_MAX_LCORE)
min = idx;
for (idx = min; idx <= max; idx++) {
- if (cores[idx] == -1) {
- cores[idx] = count;
- count++;
+ if (idx < RTE_MAX_LCORE) {
+ if (cores[idx] == -1)
+ cores[idx] = count;
}
+ count++;
+ if (count == 1)
+ len = len + snprintf(&lcores[len],
+ MAX_LCORES_STRING - len,
+ "%d@%d", count-1, idx);
+ else
+ len = len + snprintf(&lcores[len],
+ MAX_LCORES_STRING - len,
+ ",%d@%d", count-1, idx);
}
min = RTE_MAX_LCORE;
} else
@@ -886,6 +902,13 @@ eal_parse_corelist(const char *corelist, int *cores)
if (count == 0)
return -1;
+ if (overflow) {
+ RTE_LOG(ERR, EAL, "Error = One of the %d cores provided exceeds RTE_MAX_LCORE (%d)\n",
+ count, RTE_MAX_LCORE);
+ RTE_LOG(ERR, EAL, "Please use --lcores instead, e.g. --lcores %s\n",
+ lcores);
+ return -1;
+ }
return 0;
}
--
2.17.1
More information about the dev
mailing list