> -----Original Message----- > From: Don Wallwork <d...@xsightlabs.com> > Sent: Monday, May 2, 2022 22:11 > To: dev@dpdk.org > Cc: d...@xsightlabs.com; step...@networkplumber.org; > m...@smartsharesystems.com; Burakov, Anatoly > <anatoly.bura...@intel.com>; dmitry.kozl...@gmail.com; Richardson, Bruce > <bruce.richard...@intel.com>; > honnappa.nagaraha...@arm.com; n...@arm.com > Subject: [PATCH] eal: allow worker lcore stacks to be allocated from hugepage > memory > > Add support for using hugepages for worker lcore stack memory. The > intent is to improve performance by reducing stack memory related TLB > misses and also by using memory local to the NUMA node of each lcore. > > EAL option '--huge-worker-stack [stack-size-kbytes]' is added to allow > the feature to be enabled at runtime. If the size is not specified, > the system pthread stack size will be used. > > Signed-off-by: Don Wallwork <d...@xsightlabs.com> > --- > lib/eal/common/eal_common_options.c | 31 ++++++++++++++ > lib/eal/common/eal_internal_cfg.h | 4 ++ > lib/eal/common/eal_options.h | 2 + > lib/eal/linux/eal.c | 65 ++++++++++++++++++++++++++++- > 4 files changed, 100 insertions(+), 2 deletions(-) > > diff --git a/lib/eal/common/eal_common_options.c > b/lib/eal/common/eal_common_options.c > index f247a42455..be9db9ee37 100644 > --- a/lib/eal/common/eal_common_options.c > +++ b/lib/eal/common/eal_common_options.c > @@ -103,6 +103,7 @@ eal_long_options[] = { > {OPT_TELEMETRY, 0, NULL, OPT_TELEMETRY_NUM }, > {OPT_NO_TELEMETRY, 0, NULL, OPT_NO_TELEMETRY_NUM }, > {OPT_FORCE_MAX_SIMD_BITWIDTH, 1, NULL, OPT_FORCE_MAX_SIMD_BITWIDTH_NUM}, > + {OPT_HUGE_WORKER_STACK, 2, NULL, OPT_HUGE_WORKER_STACK_NUM }, > > {0, 0, NULL, 0 } > }; > @@ -1618,6 +1619,22 @@ eal_parse_huge_unlink(const char *arg, struct > hugepage_file_discipline *out) > return -1; > } > > +static int > +eal_parse_huge_worker_stack(const char *arg, size_t *huge_worker_stack_size) > +{ > + size_t worker_stack_size; > + if (arg == NULL) { > + *huge_worker_stack_size = USE_OS_STACK_SIZE; > + return 0; > + } > + worker_stack_size = atoi(arg); > + if (worker_stack_size == 0) > + return -1;
Should we also to check "worker_stack_size *1024 < PTHREAD_STACK_MIN" ? > + > + *huge_worker_stack_size = worker_stack_size * 1024; > + return 0; > +} > + > -- > 2.17.1