[v2] mem: exclude used memory from core dump by config
Checks
Commit Message
Some DPDK application is allolcateed storage partition of 8G(or smaller)
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
Signed-off-by: Gaoxiang Liu <liugaoxiang@huawei.com>
---
v2:
* Fixed compile issues.
---
lib/eal/common/eal_internal_cfg.h | 1 +
lib/eal/common/eal_options.h | 3 ++-
lib/eal/linux/eal.c | 4 ++++
lib/eal/linux/eal_memalloc.c | 10 ++++++++++
4 files changed, 17 insertions(+), 1 deletion(-)
@@ -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;
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;
@@ -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
};
@@ -817,6 +817,10 @@ eal_parse_args(int argc, char **argv)
internal_conf->match_allocations = 1;
break;
+ case OPT_HUGE_DONT_DUMP_NUM:
+ internal_conf->huge_dont_dump_flag = 1;
+ break;
+
default:
if (opt < OPT_LONG_MIN_NUM && isprint(opt)) {
RTE_LOG(ERR, EAL, "Option %c is not supported "
@@ -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_conf->huge_dont_dump_flag) {
+ if (madvise(addr, alloc_sz, MADV_DONTDUMP)) {
+ RTE_LOG(INFO, EAL, "madvise(%p, %#zx, %d) failed: %s\n",
+ addr, alloc_sz, flags, strerror(rte_errno));
+ } else {
+ RTE_LOG(INFO, EAL, "%s(): madvise(MADV_DONTDUMP) memory success.(len=%#zx)\n",
+ __func__, alloc_sz);
+ }
+ }
+
return 0;
mapped: