about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2019-02-14 16:37:11 +0000
committerWilco Dijkstra <wdijkstr@arm.com>2019-02-14 16:37:11 +0000
commit3904fd85d3fdf0573e9a1e12e32bcd8cb246f549 (patch)
treedd634a8a3a5c2fc316f203fafe64001f52e98172
parent24ca04febef611ad942ad5ebe3a3c7011b10c550 (diff)
downloadglibc-3904fd85d3fdf0573e9a1e12e32bcd8cb246f549.tar.gz
glibc-3904fd85d3fdf0573e9a1e12e32bcd8cb246f549.tar.xz
glibc-3904fd85d3fdf0573e9a1e12e32bcd8cb246f549.zip
Add malloc micro benchmark
Add a malloc micro benchmark to enable accurate testing of the
various paths in malloc and free.  The benchmark does a varying
number of allocations of a given block size, then frees them again.

It tests 3 different scenarios: single-threaded using main arena,
multi-threaded using thread-arena, main arena with SINGLE_THREAD_P
false.

	* benchtests/Makefile: Add malloc-simple benchmark.
	* benchtests/bench-malloc-simple.c: New benchmark.
-rw-r--r--ChangeLog5
-rw-r--r--benchtests/Makefile18
2 files changed, 18 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4a3ec3d559..ab9f593a55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-02-14  Wilco Dijkstra  <wdijkstr@arm.com>
+
+	* benchtests/Makefile: Add malloc-simple benchmark.
+	* benchtests/bench-malloc-simple.c: New benchmark.
+
 2019-02-14  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
 	* benchtests/bench-memmove.c (do_one_test): Remove unused
diff --git a/benchtests/Makefile b/benchtests/Makefile
index 3339f2c770..d00993eca4 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -90,7 +90,7 @@ CFLAGS-bench-trunc.c += -fno-builtin
 CFLAGS-bench-truncf.c += -fno-builtin
 
 ifeq (${BENCHSET},)
-bench-malloc := malloc-thread
+bench-malloc := malloc-thread malloc-simple
 else
 bench-malloc := $(filter malloc-%,${BENCHSET})
 endif
@@ -98,7 +98,7 @@ endif
 $(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
 $(addprefix $(objpfx)bench-,$(math-benchset)): $(libm)
 $(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
-$(objpfx)bench-malloc-thread: $(shared-thread-library)
+$(addprefix $(objpfx)bench-,$(bench-malloc)): $(shared-thread-library)
 
 
 
@@ -171,7 +171,7 @@ bench-clean:
 ifneq ($(strip ${BENCHSET}),)
 VALIDBENCHSETNAMES := bench-pthread bench-math bench-string string-benchset \
    wcsmbs-benchset stdlib-benchset stdio-common-benchset math-benchset \
-   malloc-thread
+   malloc-thread malloc-simple
 INVALIDBENCHSETNAMES := $(filter-out ${VALIDBENCHSETNAMES},${BENCHSET})
 ifneq (${INVALIDBENCHSETNAMES},)
 $(info The following values in BENCHSET are invalid: ${INVALIDBENCHSETNAMES})
@@ -200,10 +200,18 @@ bench-set: $(binaries-benchset)
 
 bench-malloc: $(binaries-bench-malloc)
 	for run in $^; do \
+	  echo "$${run}"; \
+	  if [ `basename $${run}` = "bench-malloc-thread" ]; then \
 		for thr in 1 8 16 32; do \
 			echo "Running $${run} $${thr}"; \
-	  $(run-bench) $${thr} > $${run}-$${thr}.out; \
-	  done;\
+			$(run-bench) $${thr} > $${run}-$${thr}.out; \
+		done;\
+	  else \
+		for thr in 8 16 32 64 128 256 512 1024 2048 4096; do \
+		  echo "Running $${run} $${thr}"; \
+		  $(run-bench) $${thr} > $${run}-$${thr}.out; \
+		done;\
+	  fi;\
 	done
 
 # Build and execute the benchmark functions.  This target generates JSON