Commit Diff


commit - 4f85d27efdf443cccf18ba29a3221f524904cce2
commit + 3a3890ed9389c83a0fcf7e061b23ae947da9d4a2
blob - a346514deeb4337ff7bac134f371359000a9f7a0
blob + afa7346b4575bea7b9910dc026b5086ac207ac1c
--- perf/memtx.cc
+++ perf/memtx.cc
@@ -355,6 +355,32 @@ BENCHMARK_F(MemtxFixture, TreeSelectAll)
 		state.PauseTiming();
 		::port_destroy(&port);
 		state.ResumeTiming();
+	}
+	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);
 }