From: Chris Lamb Date: Sat, 25 Aug 2018 17:52:13 +0200 Subject: Add support for USE_SYSTEM_JEMALLOC flag. Forwarded: https://github.com/antirez/redis/pull/5279 --- deps/Makefile | 2 ++ src/Makefile | 5 +++++ src/debug.c | 4 ++++ src/object.c | 5 +++++ src/sds.c | 4 ++++ src/zmalloc.c | 10 ++++++++++ src/zmalloc.h | 4 ++++ 7 files changed, 34 insertions(+) diff --git a/deps/Makefile b/deps/Makefile index 3bf0363..9b25947 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -39,7 +39,9 @@ distclean: -(cd hiredis && $(MAKE) clean) > /dev/null || true -(cd linenoise && $(MAKE) clean) > /dev/null || true -(cd lua && $(MAKE) clean) > /dev/null || true +ifneq ($(USE_SYSTEM_JEMALLOC),yes) -(cd jemalloc && [ -f Makefile ] && $(MAKE) distclean) > /dev/null || true +endif -(cd hdr_histogram && $(MAKE) clean) > /dev/null || true -(cd fpconv && $(MAKE) clean) > /dev/null || true -(rm -f .make-*) diff --git a/src/Makefile b/src/Makefile index f81f892..527eef9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -266,10 +266,15 @@ ifeq ($(MALLOC),tcmalloc_minimal) endif ifeq ($(MALLOC),jemalloc) +ifeq ($(USE_SYSTEM_JEMALLOC),yes) + FINAL_CFLAGS+= -DUSE_JEMALLOC -I/usr/include/jemalloc/include + FINAL_LIBS := -ljemalloc $(FINAL_LIBS) +else DEPENDENCY_TARGETS+= jemalloc FINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include FINAL_LIBS := ../deps/jemalloc/lib/libjemalloc.a $(FINAL_LIBS) endif +endif # LIBSSL & LIBCRYPTO LIBSSL_LIBS= diff --git a/src/debug.c b/src/debug.c index 684f692..5dcc0ac 100644 --- a/src/debug.c +++ b/src/debug.c @@ -73,6 +73,10 @@ void printCrashReport(void); void bugReportEnd(int killViaSignal, int sig); void logStackTrace(void *eip, int uplevel); +#if defined(USE_JEMALLOC) && (USE_SYSTEM_JEMALLOC == yes) +#define je_mallctl mallctl +#endif + /* ================================= Debugging ============================== */ /* Compute the sha1 of string at 's' with 'len' bytes long. diff --git a/src/object.c b/src/object.c index 4b3526a..be80376 100644 --- a/src/object.c +++ b/src/object.c @@ -38,6 +38,11 @@ #define strtold(a,b) ((long double)strtod((a),(b))) #endif +#if defined(USE_JEMALLOC) && (USE_SYSTEM_JEMALLOC == yes) +#define je_mallctl mallctl +#define je_malloc_stats_print malloc_stats_print +#endif + /* ===================== Creation and parsing of objects ==================== */ robj *createObject(int type, void *ptr) { diff --git a/src/sds.c b/src/sds.c index 2cc5b23..f70a29e 100644 --- a/src/sds.c +++ b/src/sds.c @@ -40,6 +40,10 @@ #include "sdsalloc.h" #include "util.h" +#if USE_SYSTEM_JEMALLOC == yes +#define je_nallocx(size, flags) nallocx(size, flags) +#endif + const char *SDS_NOINIT = "SDS_NOINIT"; static inline int sdsHdrSize(char type) { diff --git a/src/zmalloc.c b/src/zmalloc.c index bbfa386..244748e 100644 --- a/src/zmalloc.c +++ b/src/zmalloc.c @@ -80,6 +80,15 @@ void zlibc_free(void *ptr) { #define realloc(ptr,size) tc_realloc(ptr,size) #define free(ptr) tc_free(ptr) #elif defined(USE_JEMALLOC) +#if USE_SYSTEM_JEMALLOC == yes +#define malloc(size) malloc(size) +#define calloc(count,size) calloc(count,size) +#define realloc(ptr,size) realloc(ptr,size) +#define free(ptr) free(ptr) +#define mallocx(size,flags) mallocx(size,flags) +#define dallocx(ptr,flags) dallocx(ptr,flags) +#define je_mallctl mallctl +#else #define malloc(size) je_malloc(size) #define calloc(count,size) je_calloc(count,size) #define realloc(ptr,size) je_realloc(ptr,size) @@ -87,6 +96,7 @@ void zlibc_free(void *ptr) { #define mallocx(size,flags) je_mallocx(size,flags) #define dallocx(ptr,flags) je_dallocx(ptr,flags) #endif +#endif #define update_zmalloc_stat_alloc(__n) atomicIncr(used_memory,(__n)) #define update_zmalloc_stat_free(__n) atomicDecr(used_memory,(__n)) diff --git a/src/zmalloc.h b/src/zmalloc.h index 491013a..cfc3905 100644 --- a/src/zmalloc.h +++ b/src/zmalloc.h @@ -50,7 +50,11 @@ #include #if (JEMALLOC_VERSION_MAJOR == 2 && JEMALLOC_VERSION_MINOR >= 1) || (JEMALLOC_VERSION_MAJOR > 2) #define HAVE_MALLOC_SIZE 1 +#if USE_SYSTEM_JEMALLOC == yes +#define zmalloc_size(p) malloc_usable_size(p) +#else #define zmalloc_size(p) je_malloc_usable_size(p) +#endif #else #error "Newer version of jemalloc required" #endif