From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B0B60A00C2; Fri, 24 Apr 2020 17:20:58 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 655CE1D177; Fri, 24 Apr 2020 17:20:57 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id EC4AB2C6D; Fri, 24 Apr 2020 17:20:54 +0200 (CEST) IronPort-SDR: ccUfANj8Qlt040/XuJUM7tq/uM0mVCmWYhxw0hIl1SwMWtYTmEq18+kxhA20TrSx3sUtm3PkR6 7njPebo/hJNw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2020 08:20:53 -0700 IronPort-SDR: GGrDALFh+C7IETWZa7W89MjJqWMczR2H5DcpXipfl4lrjlBOv0zn1kngG2+2isqRnyCwQo9Bf7 92zat/0nxLsw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,311,1583222400"; d="scan'208";a="430797441" Received: from aburakov-mobl.ger.corp.intel.com (HELO [10.212.61.196]) ([10.212.61.196]) by orsmga005.jf.intel.com with ESMTP; 24 Apr 2020 08:20:51 -0700 To: Li Feng Cc: dev@dpdk.org, stable@dpdk.org, kyle@smartx.com, lifeng1519@gmail.com, fanyang@smartx.com, david.marchand@redhat.com, bruce.richardson@intel.com References: <20200424105016.28974-1-fengli@smartx.com> <20200424131905.18315-1-fengli@smartx.com> From: "Burakov, Anatoly" Message-ID: <47a6417f-97de-4dde-50b4-5bdeb00565d5@intel.com> Date: Fri, 24 Apr 2020 16:20:50 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200424131905.18315-1-fengli@smartx.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v6] eal: use madvise to exclude unmapped memory from being dumped X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 24-Apr-20 2:19 PM, Li Feng wrote: > Currently, even though memory is mapped with PROT_NONE, this does not > cause it to be excluded from core dumps. This is counter-productive, > because in a lot of cases, this memory will go unused (e.g. when the > memory subsystem preallocates VA space but hasn't yet mapped physical > pages into it). > > Use `madvise()` call with MADV_DONTDUMP parameter to exclude the > unmapped memory from being dumped. > > Signed-off-by: Li Feng > --- > v6: > - use RTE_DONTDUMP in right place. > > v5: > - fix a code style. > > V4: > - simplify the code; > - remove the undo code in V3; > > V3: > - add support for freebsd. > - when free_seg is called, mark the memory MADV_DONTDUMP. > - when alloc_seg is called, mark the memory MADV_DODUMP. > > lib/librte_eal/common/eal_common_memory.c | 17 +++++++++++++++++ > lib/librte_eal/linux/eal_memalloc.c | 3 +++ > 2 files changed, 20 insertions(+) > > diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c > index cc7d54e0c..cd20672ce 100644 > --- a/lib/librte_eal/common/eal_common_memory.c > +++ b/lib/librte_eal/common/eal_common_memory.c > @@ -40,6 +40,14 @@ > static void *next_baseaddr; > static uint64_t system_page_sz; > > +#ifdef RTE_EXEC_ENV_LINUX > +#define RTE_DONTDUMP MADV_DONTDUMP > +#elif RTE_EXEC_ENV_FREEBSD > +#define RTE_DONTDUMP MADV_NOCORE > +#else > +#error "madvise doesn't support this OS" > +#endif > + > #define MAX_MMAP_WITH_DEFINED_ADDR_TRIES 5 > void * > eal_get_virtual_area(void *requested_addr, size_t *size, > @@ -179,6 +187,15 @@ eal_get_virtual_area(void *requested_addr, size_t *size, > munmap(aligned_end, after_len); > } > > + if (!unmap) { > + /* > + * Exclude this pages from a core dump. > + */ > + if (madvise(aligned_addr, *size, RTE_DONTDUMP) != 0) > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", > + strerror(errno)); > + } > + > return aligned_addr; > } > > diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/librte_eal/linux/eal_memalloc.c > index af6d0d023..f628e0991 100644 > --- a/lib/librte_eal/linux/eal_memalloc.c > +++ b/lib/librte_eal/linux/eal_memalloc.c > @@ -687,6 +687,9 @@ free_seg(struct rte_memseg *ms, struct hugepage_info *hi, > return -1; > } > > + if (madvise(ms->addr, ms->len, MADV_DONTDUMP) != 0) > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", strerror(errno)); > + > exit_early = false; > > /* if we're using anonymous hugepages, nothing to be done */ > Acked-by: Anatoly Burakov -- Thanks, Anatoly