From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0370EA034C for ; Tue, 14 Dec 2021 12:42:22 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E5A2C410E4; Tue, 14 Dec 2021 12:42:21 +0100 (CET) Received: from m12-13.163.com (m12-13.163.com [220.181.12.13]) by mails.dpdk.org (Postfix) with ESMTP id BDCB84003C; Tue, 14 Dec 2021 12:42:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=efW5k LnrIekO7S26rkr3EjHiBMkyZBsW3h4/HxRu/E8=; b=aNfgfqpR1XXbDbvBBPgTn sILxVQrJY3EJrPvQFJc5hP6yXezsNOm+WLr3p7X2jp3v66Aw+FEVszv5OoP2Zk5S QS4UMju2foD7qe+fM04x/PSNAsIT2iDDSA7L+CYgtJd41UgoJrjTvQ/tiGTsnYTH 7gmRdLJs4UYmsPn/a3YwgY= Received: from DESKTOP-ONA2IA7.localdomain (unknown [223.104.244.167]) by smtp9 (Coremail) with SMTP id DcCowABn8RsBg7hhUgBVBA--.40437S4; Tue, 14 Dec 2021 19:42:03 +0800 (CST) From: Gaoxiang Liu To: dev@dpdk.org, Anatoly Burakov Cc: liugaoxiang@huawei.com, Gaoxiang Liu , stable@dpdk.org Subject: [PATCH] mem: exclude used memory from core dump by config Date: Tue, 14 Dec 2021 19:41:50 +0800 Message-Id: <20211214114151.1298-1-gaoxiangliu0@163.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: DcCowABn8RsBg7hhUgBVBA--.40437S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxZF1DWr43XFWxAF48ZrWfuFg_yoW5AFWUpF W7CFy5XF1xtr1S93srWw4vva1rKas3GF1UGay7Xw1qvrZxtayfW34DK343Ka43ZFWUJF4D ur10gFZ09a4UAw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zR7kucUUUUU= X-Originating-IP: [223.104.244.167] X-CM-SenderInfo: xjdr5xxdqjzxjxq6il2tof0z/xtbBQgtpOl++OUN7zAAAs2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org 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 --- 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 ++++++++++ 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; 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); + } + } + return 0; mapped: -- 2.32.0