diff options
author | Christopher Ferris <cferris@google.com> | 2020-01-29 15:21:09 -0800 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2020-01-29 16:36:14 -0800 |
commit | 89379355c4b532977ee77fa80d8763a8c784637c (patch) | |
tree | f73cfecdda524ef77c0ef411a60c4b2cbe174bfb /benchmarks/stdlib_benchmark.cpp | |
parent | 0e0b473a4c01ec6b739ac7aa9eccb63005fa3da2 (diff) |
Add a couple of new benchmarks.
Add a calloc benchmark to make sure that a native allocator isn't
doing anything incorrectly when zero'ing memory.
Also add a fork call benchmark to verify that the time to make a
fork call isn't increasing.
Test: Ran benchmarks on walleye and verified that the numbers are not
Test: too variable between runs.
Change-Id: I61d289d277f85ac432a315e539cf6391ea036866
Diffstat (limited to 'benchmarks/stdlib_benchmark.cpp')
-rw-r--r-- | benchmarks/stdlib_benchmark.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/benchmarks/stdlib_benchmark.cpp b/benchmarks/stdlib_benchmark.cpp index 61b51fa54..45b953f61 100644 --- a/benchmarks/stdlib_benchmark.cpp +++ b/benchmarks/stdlib_benchmark.cpp @@ -59,6 +59,41 @@ static void BM_stdlib_malloc_free_decay1(benchmark::State& state) { BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_malloc_free_decay1, "AT_COMMON_SIZES"); #endif +static void CallocFree(benchmark::State& state) { + const size_t nbytes = state.range(0); + int pagesize = getpagesize(); + + for (auto _ : state) { + void* ptr; + benchmark::DoNotOptimize(ptr = calloc(1, nbytes)); + MakeAllocationResident(ptr, nbytes, pagesize); + free(ptr); + } + + state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes)); +} + +static void BM_stdlib_calloc_free_default(benchmark::State& state) { +#if defined(__BIONIC__) + // The default is expected to be a zero decay time. + mallopt(M_DECAY_TIME, 0); +#endif + + CallocFree(state); +} +BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_calloc_free_default, "AT_COMMON_SIZES"); + +#if defined(__BIONIC__) +static void BM_stdlib_calloc_free_decay1(benchmark::State& state) { + mallopt(M_DECAY_TIME, 1); + + CallocFree(state); + + mallopt(M_DECAY_TIME, 0); +} +BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_calloc_free_decay1, "AT_COMMON_SIZES"); +#endif + static void MallocMultiple(benchmark::State& state, size_t nbytes, size_t numAllocs) { int pagesize = getpagesize(); void* ptrs[numAllocs]; |