From 47cda0cb36bfee8b99061eec59d17152608bf3cc Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Mon, 3 Feb 2020 12:39:59 -0800 Subject: [PATCH] scudo: Use more size classes in the malloc_free_loop benchmarks. As a result of recent changes to the Android size classes, the malloc_free_loop benchmark started exhausting the 8192 size class at 32768 iterations. To avoid this problem (and to make the test more realistic), change the benchmark to use a variety of size classes. Differential Revision: https://reviews.llvm.org/D73918 --- .../lib/scudo/standalone/benchmarks/malloc_benchmark.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler-rt/lib/scudo/standalone/benchmarks/malloc_benchmark.cpp b/compiler-rt/lib/scudo/standalone/benchmarks/malloc_benchmark.cpp index 713820437b0f..ce48dc02f7ab 100644 --- a/compiler-rt/lib/scudo/standalone/benchmarks/malloc_benchmark.cpp +++ b/compiler-rt/lib/scudo/standalone/benchmarks/malloc_benchmark.cpp @@ -69,12 +69,14 @@ static void BM_malloc_free_loop(benchmark::State &State) { void *Ptrs[NumIters]; for (auto _ : State) { + size_t SizeLog2 = 0; for (void *&Ptr : Ptrs) { - Ptr = Allocator->allocate(8192, scudo::Chunk::Origin::Malloc); + Ptr = Allocator->allocate(1 << SizeLog2, scudo::Chunk::Origin::Malloc); auto *Data = reinterpret_cast(Ptr); - for (size_t I = 0; I < 8192; I += PageSize) + for (size_t I = 0; I < 1 << SizeLog2; I += PageSize) Data[I] = 1; benchmark::DoNotOptimize(Ptr); + SizeLog2 = (SizeLog2 + 1) % 16; } for (void *&Ptr : Ptrs) Allocator->deallocate(Ptr, scudo::Chunk::Origin::Malloc);