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 5C91BA00C2; Fri, 24 Apr 2020 13:37:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2FC541C1C6; Fri, 24 Apr 2020 13:37:03 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 8578E1C1BF; Fri, 24 Apr 2020 13:37:01 +0200 (CEST) IronPort-SDR: VmtlsV7VupaWPJvMk5f+ydaeBs6H1UjQJz4kMD+1G6tv9BWpy/wjTFc4WDlxMmiqZGYEXvvWR7 +yOPy5DX//lg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2020 04:37:00 -0700 IronPort-SDR: Fj+SZrb//FWNY7nci0dDhR9npnQ5uRcmKM+Kq1X0/xxxONu68ZZQMnkr8fYyqi3tYnGyHLW2Ou CIXqM/ETQjwA== X-IronPort-AV: E=Sophos;i="5.73,311,1583222400"; d="scan'208";a="430738240" Received: from bricha3-mobl.ger.corp.intel.com ([10.252.36.26]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 24 Apr 2020 04:36:57 -0700 Date: Fri, 24 Apr 2020 12:36:54 +0100 From: Bruce Richardson To: "Burakov, Anatoly" Cc: Li Feng , dev@dpdk.org, stable@dpdk.org, kyle@smartx.com, lifeng1519@gmail.com, fanyang@smartx.com, david.marchand@redhat.com Message-ID: <20200424113654.GA1446@bricha3-MOBL.ger.corp.intel.com> References: <20200424105016.28974-1-fengli@smartx.com> <06c98fdc-9fc9-27b3-ebb9-e9a93f3a7561@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <06c98fdc-9fc9-27b3-ebb9-e9a93f3a7561@intel.com> Subject: Re: [dpdk-dev] [PATCH v2] 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 Fri, Apr 24, 2020 at 12:23:44PM +0100, Burakov, Anatoly wrote: > On 24-Apr-20 11:50 AM, 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 > > --- > > V2: > > - add support for freebsd. > > - when free_seg is called, mark the memory MADV_DONTDUMP. > > - when alloc_seg is called, mark the memory MADV_DODUMP. > > Isn't this v3 now? > > > > > lib/librte_eal/common/eal_common_memory.c | 26 ++++++++++++++++++++++++++ > > lib/librte_eal/linux/eal_memalloc.c | 6 ++++++ > > 2 files changed, 32 insertions(+) > > > > diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c > > index cc7d54e0c..83be94a20 100644 > > --- a/lib/librte_eal/common/eal_common_memory.c > > +++ b/lib/librte_eal/common/eal_common_memory.c > > @@ -177,6 +177,32 @@ eal_get_virtual_area(void *requested_addr, size_t *size, > > after_len = RTE_PTR_DIFF(map_end, aligned_end); > > if (after_len > 0) > > munmap(aligned_end, after_len); > > + > > + /* > > + * Exclude this pages from a core dump. > > + */ > > +#ifdef RTE_EXEC_ENV_LINUX > > + if (madvise(aligned_addr, *size, MADV_DONTDUMP) != 0) > > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", > > + strerror(errno)); > > +#elif RTE_EXEC_ENV_FREEBSD > > + if (madvise(aligned_addr, *size, MADV_NOCORE) != 0) > > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", > > + strerror(errno)); > > +#endif > > + } else { > > + /* > > + * Exclude this pages from a core dump. > > + */ > > +#ifdef RTE_EXEC_ENV_LINUX > > + if (madvise(mapped_addr, map_sz, MADV_DONTDUMP) != 0) > > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", > > + strerror(errno)); > > +#elif RTE_EXEC_ENV_FREEBSD > > + if (madvise(mapped_addr, map_sz, MADV_NOCORE) != 0) > > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", > > + strerror(errno)); > > +#endif > > } > > DRY (Don't Repeat Yourself) :) Probably easier to do "if (!unmap) ..." than > putting this into two places. > Can I also suggest putting this at the top of the file: #ifdef RTE_EXEC_ENV_LINUX #define RTE_DONTDUMP MADV_DONTDUMP #elif RTE_EXEC_ENV_FREEBSD #define RTE_DONTDUMP MADV_NOCORE #else #error .... #endif and thereafter using RTE_DONTDUMP flag and avoiding any #ifdefs inline in the code.