From 3a3890ed9389c83a0fcf7e061b23ae947da9d4a2 Mon Sep 17 00:00:00 2001 From: Ilya Verbin <iverbin@tarantool.org> Date: Tue, 3 Oct 2023 15:42:21 +0300 Subject: [PATCH] perf: add TreeReplaceRandomExistingKeys to memtx benchmark It is similar to TreeGetRandomExistingKeys, but performs box_replace() instead of box_index_get(). Needed for #6762 NO_DOC=benchmark NO_TEST=benchmark NO_CHANGELOG=benchmark --- perf/memtx.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/perf/memtx.cc b/perf/memtx.cc index a346514dee..afa7346b45 100644 --- a/perf/memtx.cc +++ b/perf/memtx.cc @@ -359,6 +359,32 @@ BENCHMARK_F(MemtxFixture, TreeSelectAll) state.SetItemsProcessed(counter); } +/** + * Benchmark random `replace`s of existing keys in the tree index. + * The key subset is regenerated through every iteration. + */ +BENCHMARK_F(MemtxFixture, TreeReplaceRandomExistingKeys) +(benchmark::State & state) +{ + auto itr = key_subset.begin(); + int64_t counter = 0; + for (MAYBE_UNUSED auto _ : state) { + if (itr == key_subset.end()) { + state.PauseTiming(); + generate_key_subset(); + state.ResumeTiming(); + itr = key_subset.begin(); + } + struct tuple *result; + if (::box_replace(sid, itr->first, itr->second, &result) != 0) + panic("failed to replace the tuple"); + benchmark::DoNotOptimize(result); + ++counter; + ++itr; + } + state.SetItemsProcessed(counter); +} + BENCHMARK_MAIN(); #include "debug_warning.h" -- GitLab