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 18477A00C2; Fri, 24 Apr 2020 13:23:51 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7A7AC1C1C0; Fri, 24 Apr 2020 13:23:49 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 034DF1BF7A; Fri, 24 Apr 2020 13:23:47 +0200 (CEST) IronPort-SDR: oKXqfzO2npva7cPg8FCsBkbLHPEVjt38z6JO9dFI0+vKJpkrGq/n3RMeKxBpDsa/L9abs9f33u Itgl6Q8vUVcw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Apr 2020 04:23:47 -0700 IronPort-SDR: YVW3IOt6bH/Wbngk1gN1uuGv5uYq8gA7ki3QgCBpL3EbtJ5GG8gNUsSOONS8Yu16IM5C9l4uur Sx9goPMPXThg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,311,1583222400"; d="scan'208";a="430735764" 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 04:23:45 -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> From: "Burakov, Anatoly" Message-ID: <06c98fdc-9fc9-27b3-ebb9-e9a93f3a7561@intel.com> Date: Fri, 24 Apr 2020 12:23:44 +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: <20200424105016.28974-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 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 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. > > return aligned_addr; > diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/librte_eal/linux/eal_memalloc.c > index af6d0d023..9d2a6fc6f 100644 > --- a/lib/librte_eal/linux/eal_memalloc.c > +++ b/lib/librte_eal/linux/eal_memalloc.c > @@ -571,6 +571,9 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, > goto resized; > } > > + if (madvise(addr, alloc_sz, MADV_DODUMP) != 0) > + RTE_LOG(DEBUG, EAL, "madvise failed: %s\n", strerror(errno)); > + See discussion for v2, i believe this is unnecessary. > /* In linux, hugetlb limitations, like cgroup, are > * enforced at fault time instead of mmap(), even > * with the option of MAP_POPULATE. Kernel will send > @@ -687,6 +690,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 */ > -- Thanks, Anatoly