From cf9f1c80e64948d8ecb578a505a84e1532fda2fd Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 23 Apr 2021 10:24:01 +0800 Subject: [PATCH] crimson/onode-staged-tree: implement erase for perf-staged-tree Signed-off-by: Yingxin Cheng --- src/tools/crimson/perf_staged_fltree.cc | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/tools/crimson/perf_staged_fltree.cc b/src/tools/crimson/perf_staged_fltree.cc index 09f8ddc815da2..8a5fdebcad498 100644 --- a/src/tools/crimson/perf_staged_fltree.cc +++ b/src/tools/crimson/perf_staged_fltree.cc @@ -25,9 +25,9 @@ class PerfTree : public TMTestState { public: PerfTree(bool is_dummy) : is_dummy{is_dummy} {} - seastar::future<> run(KVPool& kvs) { - return tm_setup().then([this, &kvs] { - return seastar::async([this, &kvs] { + seastar::future<> run(KVPool& kvs, double erase_ratio) { + return tm_setup().then([this, &kvs, erase_ratio] { + return seastar::async([this, &kvs, erase_ratio] { auto tree = std::make_unique>(kvs, (is_dummy ? NodeExtentManager::create_dummy(true) : NodeExtentManager::create_seastore(*tm))); @@ -47,14 +47,20 @@ class PerfTree : public TMTestState { logger().warn("submit_transaction() done! {}s", duration.count()); } { + // Note: tm->create_weak_transaction() can also work, but too slow. auto t = tm->create_transaction(); tree->get_stats(*t).unsafe_get(); + tree->validate(*t).unsafe_get(); + } + { + auto t = tm->create_transaction(); + tree->erase(*t, kvs.size() * erase_ratio).unsafe_get(); tm->submit_transaction(std::move(t)).unsafe_get(); segment_cleaner->run_until_halt().get0(); } { - // Note: tm->create_weak_transaction() can also work, but too slow. auto t = tm->create_transaction(); + tree->get_stats(*t).unsafe_get(); tree->validate(*t).unsafe_get(); } tree.reset(); @@ -88,6 +94,9 @@ seastar::future<> run(const bpo::variables_map& config) { ceph_assert(range1.size() == 2); auto range0 = config["range0"].as>(); ceph_assert(range0.size() == 2); + auto erase_ratio = config["erase-ratio"].as(); + ceph_assert(erase_ratio >= 0); + ceph_assert(erase_ratio <= 1); auto kvs = KVPool::create_raw_range( str_sizes, onode_sizes, @@ -95,7 +104,7 @@ seastar::future<> run(const bpo::variables_map& config) { {range1[0], range1[1]}, {range0[0], range0[1]}); PerfTree perf{is_dummy}; - perf.run(kvs).get0(); + perf.run(kvs, erase_ratio).get0(); }); } @@ -122,7 +131,10 @@ int main(int argc, char** argv) "range of ns-oid strings [a, b)") ("range0", bpo::value>()->default_value( {0, 4}), - "range of snap-gen [a, b)"); + "range of snap-gen [a, b)") + ("erase-ratio", bpo::value()->default_value( + 0.8), + "erase-ratio of all the inserted onodes"); return app.run(argc, argv, [&app] { auto&& config = app.configuration(); auto tracked = config["tracked"].as(); -- 2.39.5