Refactor permuted backtrace test allocation.
Refactor permuted backtrace test allocation that was originally used only by the prof_accum test, so that it can be used by other heap profiling test binaries.
This commit is contained in:
parent
f8034540a1
commit
cc9e626ea9
20
Makefile.in
20
Makefile.in
@ -107,9 +107,11 @@ DOCS_XML := $(objroot)doc/jemalloc$(install_suffix).xml
|
|||||||
DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.html)
|
DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.html)
|
||||||
DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.3)
|
DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.3)
|
||||||
DOCS := $(DOCS_HTML) $(DOCS_MAN3)
|
DOCS := $(DOCS_HTML) $(DOCS_MAN3)
|
||||||
C_TESTLIB_SRCS := $(srcroot)test/src/math.c $(srcroot)test/src/mtx.c \
|
C_TESTLIB_SRCS := $(srcroot)test/src/btalloc.c $(srcroot)test/src/btalloc_0.c \
|
||||||
$(srcroot)test/src/SFMT.c $(srcroot)test/src/test.c \
|
$(srcroot)test/src/btalloc_1.c $(srcroot)test/src/math.c \
|
||||||
$(srcroot)test/src/thd.c $(srcroot)test/src/timer.c
|
$(srcroot)test/src/mtx.c $(srcroot)test/src/SFMT.c \
|
||||||
|
$(srcroot)test/src/test.c $(srcroot)test/src/thd.c \
|
||||||
|
$(srcroot)test/src/timer.c
|
||||||
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/util.c
|
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/util.c
|
||||||
TESTS_UNIT := $(srcroot)test/unit/atomic.c \
|
TESTS_UNIT := $(srcroot)test/unit/atomic.c \
|
||||||
$(srcroot)test/unit/bitmap.c \
|
$(srcroot)test/unit/bitmap.c \
|
||||||
@ -123,6 +125,7 @@ TESTS_UNIT := $(srcroot)test/unit/atomic.c \
|
|||||||
$(srcroot)test/unit/prof_accum.c \
|
$(srcroot)test/unit/prof_accum.c \
|
||||||
$(srcroot)test/unit/prof_gdump.c \
|
$(srcroot)test/unit/prof_gdump.c \
|
||||||
$(srcroot)test/unit/prof_idump.c \
|
$(srcroot)test/unit/prof_idump.c \
|
||||||
|
$(srcroot)test/unit/prof_reset.c \
|
||||||
$(srcroot)test/unit/ql.c \
|
$(srcroot)test/unit/ql.c \
|
||||||
$(srcroot)test/unit/qr.c \
|
$(srcroot)test/unit/qr.c \
|
||||||
$(srcroot)test/unit/quarantine.c \
|
$(srcroot)test/unit/quarantine.c \
|
||||||
@ -133,8 +136,6 @@ TESTS_UNIT := $(srcroot)test/unit/atomic.c \
|
|||||||
$(srcroot)test/unit/tsd.c \
|
$(srcroot)test/unit/tsd.c \
|
||||||
$(srcroot)test/unit/util.c \
|
$(srcroot)test/unit/util.c \
|
||||||
$(srcroot)test/unit/zero.c
|
$(srcroot)test/unit/zero.c
|
||||||
TESTS_UNIT_AUX := $(srcroot)test/unit/prof_accum_a.c \
|
|
||||||
$(srcroot)test/unit/prof_accum_b.c
|
|
||||||
TESTS_INTEGRATION := $(srcroot)test/integration/aligned_alloc.c \
|
TESTS_INTEGRATION := $(srcroot)test/integration/aligned_alloc.c \
|
||||||
$(srcroot)test/integration/allocated.c \
|
$(srcroot)test/integration/allocated.c \
|
||||||
$(srcroot)test/integration/sdallocx.c \
|
$(srcroot)test/integration/sdallocx.c \
|
||||||
@ -159,10 +160,9 @@ C_TESTLIB_STRESS_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.stress.$(O))
|
|||||||
C_TESTLIB_OBJS := $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(C_TESTLIB_STRESS_OBJS)
|
C_TESTLIB_OBJS := $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(C_TESTLIB_STRESS_OBJS)
|
||||||
|
|
||||||
TESTS_UNIT_OBJS := $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%.$(O))
|
TESTS_UNIT_OBJS := $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
TESTS_UNIT_AUX_OBJS := $(TESTS_UNIT_AUX:$(srcroot)%.c=$(objroot)%.$(O))
|
|
||||||
TESTS_INTEGRATION_OBJS := $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%.$(O))
|
TESTS_INTEGRATION_OBJS := $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
TESTS_STRESS_OBJS := $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%.$(O))
|
TESTS_STRESS_OBJS := $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
TESTS_OBJS := $(TESTS_UNIT_OBJS) $(TESTS_UNIT_AUX_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_STRESS_OBJS)
|
TESTS_OBJS := $(TESTS_UNIT_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_STRESS_OBJS)
|
||||||
|
|
||||||
.PHONY: all dist build_doc_html build_doc_man build_doc
|
.PHONY: all dist build_doc_html build_doc_man build_doc
|
||||||
.PHONY: install_bin install_include install_lib
|
.PHONY: install_bin install_include install_lib
|
||||||
@ -211,12 +211,6 @@ $(C_TESTLIB_STRESS_OBJS): $(objroot)test/src/%.stress.$(O): $(srcroot)test/src/%
|
|||||||
$(C_TESTLIB_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST -DJEMALLOC_STRESS_TESTLIB
|
$(C_TESTLIB_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST -DJEMALLOC_STRESS_TESTLIB
|
||||||
$(C_TESTLIB_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include
|
$(C_TESTLIB_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include
|
||||||
$(TESTS_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
$(TESTS_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
||||||
$(TESTS_UNIT_AUX_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
|
||||||
define make-unit-link-dep
|
|
||||||
$(1): TESTS_UNIT_LINK_OBJS += $(2)
|
|
||||||
$(1): $(2)
|
|
||||||
endef
|
|
||||||
$(foreach test, $(TESTS_UNIT:$(srcroot)test/unit/%.c=$(objroot)test/unit/%$(EXE)), $(eval $(call make-unit-link-dep,$(test),$(filter $(test:%$(EXE)=%_a.$(O)) $(test:%$(EXE)=%_b.$(O)),$(TESTS_UNIT_AUX_OBJS)))))
|
|
||||||
$(TESTS_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
$(TESTS_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
||||||
$(TESTS_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST
|
$(TESTS_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST
|
||||||
$(TESTS_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c
|
$(TESTS_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c
|
||||||
|
31
test/include/test/btalloc.h
Normal file
31
test/include/test/btalloc.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* btalloc() provides a mechanism for allocating via permuted backtraces. */
|
||||||
|
void *btalloc(size_t size, unsigned bits);
|
||||||
|
|
||||||
|
#define btalloc_n_proto(n) \
|
||||||
|
void *btalloc_##n(size_t size, unsigned bits);
|
||||||
|
btalloc_n_proto(0)
|
||||||
|
btalloc_n_proto(1)
|
||||||
|
|
||||||
|
#define btalloc_n_gen(n) \
|
||||||
|
void * \
|
||||||
|
btalloc_##n(size_t size, unsigned bits) \
|
||||||
|
{ \
|
||||||
|
void *p; \
|
||||||
|
\
|
||||||
|
if (bits == 0) \
|
||||||
|
p = mallocx(size, 0); \
|
||||||
|
else { \
|
||||||
|
switch (bits & 0x1U) { \
|
||||||
|
case 0: \
|
||||||
|
p = (btalloc_0(size, bits >> 1)); \
|
||||||
|
break; \
|
||||||
|
case 1: \
|
||||||
|
p = (btalloc_1(size, bits >> 1)); \
|
||||||
|
break; \
|
||||||
|
default: not_reached(); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
/* Intentionally sabotage tail call optimization. */ \
|
||||||
|
assert_ptr_not_null(p, "Unexpected mallocx() failure"); \
|
||||||
|
return (p); \
|
||||||
|
}
|
@ -133,6 +133,7 @@
|
|||||||
/*
|
/*
|
||||||
* Common test utilities.
|
* Common test utilities.
|
||||||
*/
|
*/
|
||||||
|
#include "test/btalloc.h"
|
||||||
#include "test/math.h"
|
#include "test/math.h"
|
||||||
#include "test/mtx.h"
|
#include "test/mtx.h"
|
||||||
#include "test/mq.h"
|
#include "test/mq.h"
|
||||||
|
8
test/src/btalloc.c
Normal file
8
test/src/btalloc.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
void *
|
||||||
|
btalloc(size_t size, unsigned bits)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (btalloc_0(size, bits));
|
||||||
|
}
|
3
test/src/btalloc_0.c
Normal file
3
test/src/btalloc_0.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
btalloc_n_gen(0)
|
3
test/src/btalloc_1.c
Normal file
3
test/src/btalloc_1.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
btalloc_n_gen(1)
|
@ -1,4 +1,9 @@
|
|||||||
#include "prof_accum.h"
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
#define NTHREADS 4
|
||||||
|
#define NALLOCS_PER_THREAD 50
|
||||||
|
#define DUMP_INTERVAL 1
|
||||||
|
#define BT_COUNT_CHECK_INTERVAL 5
|
||||||
|
|
||||||
#ifdef JEMALLOC_PROF
|
#ifdef JEMALLOC_PROF
|
||||||
const char *malloc_conf =
|
const char *malloc_conf =
|
||||||
@ -20,7 +25,7 @@ static void *
|
|||||||
alloc_from_permuted_backtrace(unsigned thd_ind, unsigned iteration)
|
alloc_from_permuted_backtrace(unsigned thd_ind, unsigned iteration)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (alloc_0(thd_ind*NALLOCS_PER_THREAD + iteration));
|
return (btalloc(1, thd_ind*NALLOCS_PER_THREAD + iteration));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
#include "test/jemalloc_test.h"
|
|
||||||
|
|
||||||
#define NTHREADS 4
|
|
||||||
#define NALLOCS_PER_THREAD 50
|
|
||||||
#define DUMP_INTERVAL 1
|
|
||||||
#define BT_COUNT_CHECK_INTERVAL 5
|
|
||||||
|
|
||||||
#define alloc_n_proto(n) \
|
|
||||||
void *alloc_##n(unsigned bits);
|
|
||||||
alloc_n_proto(0)
|
|
||||||
alloc_n_proto(1)
|
|
||||||
|
|
||||||
#define alloc_n_gen(n) \
|
|
||||||
void * \
|
|
||||||
alloc_##n(unsigned bits) \
|
|
||||||
{ \
|
|
||||||
void *p; \
|
|
||||||
\
|
|
||||||
if (bits == 0) \
|
|
||||||
p = mallocx(1, 0); \
|
|
||||||
else { \
|
|
||||||
switch (bits & 0x1U) { \
|
|
||||||
case 0: \
|
|
||||||
p = (alloc_0(bits >> 1)); \
|
|
||||||
break; \
|
|
||||||
case 1: \
|
|
||||||
p = (alloc_1(bits >> 1)); \
|
|
||||||
break; \
|
|
||||||
default: not_reached(); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
/* Intentionally sabotage tail call optimization. */ \
|
|
||||||
assert_ptr_not_null(p, "Unexpected mallocx() failure"); \
|
|
||||||
return (p); \
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
#include "prof_accum.h"
|
|
||||||
|
|
||||||
alloc_n_gen(0)
|
|
@ -1,3 +0,0 @@
|
|||||||
#include "prof_accum.h"
|
|
||||||
|
|
||||||
alloc_n_gen(1)
|
|
Loading…
Reference in New Issue
Block a user