Hi Jerin, I will fix the issues. Thanks. Gaoxiang. ---- 回复的原邮件 ---- | 发件人 | Jerin Jacob | | 日期 | 2021年12月14日 20:08 | | 收件人 | Gaoxiang Liu | | 抄送至 | dpdk-dev、Anatoly Burakov、liugaoxiang@huawei.com、dpdk stable | | 主题 | Re: [PATCH] mem: exclude used memory from core dump by config | On Tue, Dec 14, 2021 at 5:12 PM Gaoxiang Liu wrote: > > Some DPDK application is allolcateed storage partition of 8G(or smaller) allocated > If coredump happens, the application doesn't work because of > insufficient storage space. > The patch provides a config that means whether the huge used memory > needs to be not dumped in core dump. > The DPDK application can choose to open it according to the actual > situation. > > Fixes: d72e4042c5eb ("mem: exclude unused memory from core dump") > Cc: stable@dpdk.org Probably subject can be changed to: eal: allow to exclude memseg from core dump > > Signed-off-by: Gaoxiang Liu > --- > lib/eal/common/eal_internal_cfg.h | 1 + > lib/eal/common/eal_options.h | 3 ++- > lib/eal/linux/eal.c | 3 +++ > lib/eal/linux/eal_memalloc.c | 10 ++++++++++ freebsd support can be updated, Please update doc/guides/linux_gsg/linux_eal_parameters.rst and doc/guides/freebsd_gsg/freebsd_eal_parameters.rst. > 4 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/lib/eal/common/eal_internal_cfg.h b/lib/eal/common/eal_internal_cfg.h > index d6c0470eb8..f9cd300f86 100644 > --- a/lib/eal/common/eal_internal_cfg.h > +++ b/lib/eal/common/eal_internal_cfg.h > @@ -87,6 +87,7 @@ struct internal_config { > /**< user defined mbuf pool ops name */ > unsigned num_hugepage_sizes; /**< how many sizes on this system */ > struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES]; > + volatile unsigned huge_dont_dump_flag; Volatile may not be needed. it can be changed to bool as well. > enum rte_iova_mode iova_mode ; /**< Set IOVA mode on this system */ > rte_cpuset_t ctrl_cpuset; /**< cpuset for ctrl threads */ > volatile unsigned int init_complete; > diff --git a/lib/eal/common/eal_options.h b/lib/eal/common/eal_options.h > index 8e4f7202a2..6b9a24f0f9 100644 > --- a/lib/eal/common/eal_options.h > +++ b/lib/eal/common/eal_options.h > @@ -87,7 +87,8 @@ enum { > OPT_NO_TELEMETRY_NUM, > #define OPT_FORCE_MAX_SIMD_BITWIDTH "force-max-simd-bitwidth" > OPT_FORCE_MAX_SIMD_BITWIDTH_NUM, > - > +#define OPT_HUGE_DONT_DUMP "huge-dont-dump" > + OPT_HUGE_DONT_DUMP_NUM, > OPT_LONG_MAX_NUM > }; > > diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c > index 60b4924838..eeab5e4f3d 100644 > --- a/lib/eal/linux/eal.c > +++ b/lib/eal/linux/eal.c > @@ -816,6 +816,9 @@ eal_parse_args(int argc, char **argv) > case OPT_MATCH_ALLOCATIONS_NUM: > internal_conf->match_allocations = 1; > break; > + case OPT_HUGE_DONT_DUMP_NUM: > + internal_config->huge_dont_dump_flag = 1; > + break; > > default: > if (opt < OPT_LONG_MIN_NUM && isprint(opt)) { > diff --git a/lib/eal/linux/eal_memalloc.c b/lib/eal/linux/eal_memalloc.c > index 337f2bc739..13ca1cf58c 100644 > --- a/lib/eal/linux/eal_memalloc.c > +++ b/lib/eal/linux/eal_memalloc.c > @@ -663,6 +663,16 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, > ms->iova = iova; > ms->socket_id = socket_id; > > + if (internal_config->huge_dont_dump_flag) { > + if (madvise(addr, alloc_sz, EAL_DONTDUMP)) { > + RTE_LOG(INFO, EAL, "madvise(%p, %#zx, %d) failed: %s\n", > + virt, size, flags, strerror(rte_errno)); > + } else { > + RTE_LOG(INFO, EAL, "%s(): madvise(MADV_DONTDUMP) memory success.(len=%zu)\n", > + __func__, alloc_sz); > + } I think, you can use eal_mem_set_dump() > + } > + > return 0; > > mapped: > -- > 2.32.0 > >