mem: exclude unused memory from core dump
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/MADV_NOCORE to exclude the unused memory from being dumped. Signed-off-by: Li Feng <fengli@smartx.com> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
This commit is contained in:
parent
76e91e3f14
commit
d72e4042c5
@ -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,13 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
|
||||
munmap(aligned_end, after_len);
|
||||
}
|
||||
|
||||
if (!unmap) {
|
||||
/* Exclude these 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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user