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 0FBE9A00C2 for ; Fri, 24 Apr 2020 13:47:00 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C651A1C1E2; Fri, 24 Apr 2020 13:46:59 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id A3AEF1C1CB; Fri, 24 Apr 2020 13:46:56 +0200 (CEST) IronPort-SDR: XS317yJQpAINKjVEbSjdM/1qd246TovgTNnBrNzC5P5pXu0Hr5W+uurdOvouYZmUfkuOuGH3Sa GvEnOnxcQ3hw== 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 04:46:55 -0700 IronPort-SDR: QOOfgc5Ax1qaiwXJH32RSgyJLvHtPwg54aTq2ChBRDe+s8YtzxGDaJ8W+apta42vTOHYlryi6+ sqBPRohls5hw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,311,1583222400"; d="scan'208";a="430740922" 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:46:53 -0700 To: Bruce Richardson Cc: Li Feng , dev@dpdk.org, stable@dpdk.org, kyle@smartx.com, lifeng1519@gmail.com, fanyang@smartx.com, david.marchand@redhat.com References: <20200424105016.28974-1-fengli@smartx.com> <06c98fdc-9fc9-27b3-ebb9-e9a93f3a7561@intel.com> <20200424113654.GA1446@bricha3-MOBL.ger.corp.intel.com> From: "Burakov, Anatoly" Message-ID: Date: Fri, 24 Apr 2020 12:46:52 +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: <20200424113654.GA1446@bricha3-MOBL.ger.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-stable] [PATCH v2] eal: use madvise to exclude unmapped memory from being dumped X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "stable" On 24-Apr-20 12:36 PM, Bruce Richardson wrote: > 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. > +1 -- Thanks, Anatoly