From 95833311f10ec7c23d9c550213909aa2e35bd1b6 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Wed, 27 Jan 2010 13:45:21 -0800 Subject: [PATCH] madvise(..., MADV_{RANODOM,NOSYNC}) swap files. Initialize malloc before calling into the ctl_*() functions. --- jemalloc/src/jemalloc.c | 9 +++++++++ jemalloc/src/jemalloc_chunk_swap.c | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/jemalloc/src/jemalloc.c b/jemalloc/src/jemalloc.c index b807a22d..9f71c016 100644 --- a/jemalloc/src/jemalloc.c +++ b/jemalloc/src/jemalloc.c @@ -1246,6 +1246,9 @@ JEMALLOC_P(mallctl)(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen) { + if (malloc_init()) + return (EAGAIN); + return (ctl_byname(name, oldp, oldlenp, newp, newlen)); } @@ -1254,6 +1257,9 @@ int JEMALLOC_P(mallctlnametomib)(const char *name, size_t *mibp, size_t *miblenp) { + if (malloc_init()) + return (EAGAIN); + return (ctl_nametomib(name, mibp, miblenp)); } @@ -1263,6 +1269,9 @@ JEMALLOC_P(mallctlbymib)(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp, void *newp, size_t newlen) { + if (malloc_init()) + return (EAGAIN); + return (ctl_bymib(mib, miblen, oldp, oldlenp, newp, newlen)); } diff --git a/jemalloc/src/jemalloc_chunk_swap.c b/jemalloc/src/jemalloc_chunk_swap.c index fa5a5b14..c185d431 100644 --- a/jemalloc/src/jemalloc_chunk_swap.c +++ b/jemalloc/src/jemalloc_chunk_swap.c @@ -311,6 +311,19 @@ chunk_swap_enable(const int *fds, unsigned nfds, bool prezeroed) goto RETURN; } assert(addr == (void *)((uintptr_t)vaddr + voff)); + + /* + * Tell the kernel that the mapping will be accessed randomly, + * and that it should not gratuitously sync pages to the + * filesystem. + */ +#ifdef MADV_RANDOM + madvise(addr, sizes[i], MADV_RANDOM); +#endif +#ifdef MADV_NOSYNC + madvise(addr, sizes[i], MADV_NOSYNC); +#endif + voff += sizes[i]; }