From patchwork Tue Dec 14 15:18:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gaoxiang Liu X-Patchwork-Id: 105143 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 46822A034C; Tue, 14 Dec 2021 16:19:15 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B164E40041; Tue, 14 Dec 2021 16:19:14 +0100 (CET) Received: from m12-17.163.com (m12-17.163.com [220.181.12.17]) by mails.dpdk.org (Postfix) with ESMTP id DA0914003C; Tue, 14 Dec 2021 16:19:08 +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=gpCaB /0n4sS513tAi7rrejqOh4M6BeCQ6a9jm+LggN0=; b=O3Lt7khwYf8d0VoJSSllV vwTIGTFhCK6nJer4wQvEVvyjTTHnrXhsTd6yUo2W4OOGSUcfHOyE+oT7Xk8icvJ8 vzvnqcxlEus5LlyKgz6TMrEgCeTl/FD/AhujB63lcmpPJPJZ86RXsThIhgdNqdDF YPg/mdwtCQiKXKRmdRQGDQ= Received: from DESKTOP-ONA2IA7.localdomain (unknown [125.119.22.207]) by smtp13 (Coremail) with SMTP id EcCowAAnzkLetbhhc0kdCQ--.6737S4; Tue, 14 Dec 2021 23:19:01 +0800 (CST) From: Gaoxiang Liu To: dev@dpdk.org, Anatoly Burakov Cc: liugaoxiang@huawei.com, Gaoxiang Liu , stable@dpdk.org Subject: [PATCH v3] eal: allow to exclude memseg from core dump Date: Tue, 14 Dec 2021 23:18:49 +0800 Message-Id: <20211214151850.1183-1-gaoxiangliu0@163.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211214120817.1476-1-gaoxiangliu0@163.com> References: <20211214120817.1476-1-gaoxiangliu0@163.com> MIME-Version: 1.0 X-CM-TRANSID: EcCowAAnzkLetbhhc0kdCQ--.6737S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxZF1fArW3KF13Wry3uw13CFg_yoWrAw4xpr WDuFyUWry7twsa9r9rJw40vF4rKF93CF17Ga47Xw1kZrZrt3y3XF98K34akasxZryUAF4D Zr4UWFWY9a47J3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07Uc_-PUUUUU= X-Originating-IP: [125.119.22.207] X-CM-SenderInfo: xjdr5xxdqjzxjxq6il2tof0z/xtbBQgZpOl++OUYLMAAAsy X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Some DPDK application is allocated 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 memseg memory is allowed to exclude from 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 Reviewed-by: Jerin Jacob --- v2: * Fixed compile issues. v3: * Fixed review issues. madvise is replaced by eal_mem_set_dump(), * and The type of huge_dont_dump_flag has been changed to bool. --- doc/guides/linux_gsg/linux_eal_parameters.rst | 4 ++++ 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 | 3 +++ lib/eal/unix/eal_unix_memory.c | 7 +++++-- 6 files changed, 19 insertions(+), 3 deletions(-) diff --git a/doc/guides/linux_gsg/linux_eal_parameters.rst b/doc/guides/linux_gsg/linux_eal_parameters.rst index 74df2611b5..b6805bc6df 100644 --- a/doc/guides/linux_gsg/linux_eal_parameters.rst +++ b/doc/guides/linux_gsg/linux_eal_parameters.rst @@ -93,6 +93,10 @@ Memory-related options Free hugepages back to system exactly as they were originally allocated. +* ``--memseg-dont-dump`` + + Allow to exclude memseg from core dump. + Other options ~~~~~~~~~~~~~ diff --git a/lib/eal/common/eal_internal_cfg.h b/lib/eal/common/eal_internal_cfg.h index d6c0470eb8..a7c34b88db 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]; + bool memseg_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..013aad4cfc 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_MEMSEG_DONT_DUMP "memseg-dont-dump" + OPT_MEMSEG_DONT_DUMP_NUM, OPT_LONG_MAX_NUM }; diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c index 60b4924838..8a47bf758a 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -817,6 +817,10 @@ eal_parse_args(int argc, char **argv) internal_conf->match_allocations = 1; break; + case OPT_MEMSEG_DONT_DUMP_NUM: + internal_conf->memseg_dont_dump_flag = 1; + break; + default: if (opt < OPT_LONG_MIN_NUM && isprint(opt)) { RTE_LOG(ERR, EAL, "Option %c is not supported " diff --git a/lib/eal/linux/eal_memalloc.c b/lib/eal/linux/eal_memalloc.c index 337f2bc739..8e41537355 100644 --- a/lib/eal/linux/eal_memalloc.c +++ b/lib/eal/linux/eal_memalloc.c @@ -663,6 +663,9 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, ms->iova = iova; ms->socket_id = socket_id; + if (internal_conf->memseg_dont_dump_flag) + eal_mem_set_dump(addr, alloc_sz, false); + return 0; mapped: diff --git a/lib/eal/unix/eal_unix_memory.c b/lib/eal/unix/eal_unix_memory.c index 68ae93bd6e..44227aee95 100644 --- a/lib/eal/unix/eal_unix_memory.c +++ b/lib/eal/unix/eal_unix_memory.c @@ -83,10 +83,13 @@ eal_mem_set_dump(void *virt, size_t size, bool dump) int flags = dump ? EAL_DODUMP : EAL_DONTDUMP; int ret = madvise(virt, size, flags); if (ret) { - RTE_LOG(DEBUG, EAL, "madvise(%p, %#zx, %d) failed: %s\n", + RTE_LOG(INFO, EAL, "madvise(%p, %#zx, %d) failed: %s\n", virt, size, flags, strerror(rte_errno)); rte_errno = errno; - } + } else + RTE_LOG(INFO, EAL, "madvise(%p, %#zx, %d) success: %s\n", + virt, size, flags, __func__); + return ret; }