From 7b1c0e8a610321a6373c1ebe3044d4eea122d782 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 23 Dec 2020 10:17:06 +0800 Subject: [PATCH] crimson/onode-staged-tree: print more info with TreeBuilder Signed-off-by: Yingxin Cheng --- .../staged-fltree/node_extent_manager.h | 4 +++ .../staged-fltree/node_extent_manager/dummy.h | 4 +++ .../node_extent_manager/seastore.h | 5 ++++ .../onode_manager/staged-fltree/tree.cc | 4 +++ .../onode_manager/staged-fltree/tree.h | 4 +++ .../onode_manager/staged-fltree/tree_utils.h | 25 ++++++++++++------- src/tools/crimson/perf_staged_fltree.cc | 8 ++++++ 7 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h index a633633b04af2..e8240384d718e 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h @@ -73,10 +73,14 @@ class NodeExtentManager { Transaction&, laddr_t, extent_len_t) = 0; virtual tm_future alloc_extent(Transaction&, extent_len_t) = 0; virtual tm_future get_super(Transaction&, RootNodeTracker&) = 0; + virtual std::ostream& print(std::ostream& os) const = 0; static NodeExtentManagerURef create_dummy(bool is_sync); static NodeExtentManagerURef create_seastore( TransactionManager& tm, laddr_t min_laddr = L_ADDR_MIN); }; +inline std::ostream& operator<<(std::ostream& os, const NodeExtentManager& nm) { + return nm.print(os); +} } diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h index 9a9975bf31530..604af37efcd5c 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h @@ -105,6 +105,10 @@ class DummyNodeExtentManager final: public NodeExtentManager { } } + std::ostream& print(std::ostream& os) const override { + return os << "DummyNodeExtentManager(sync=" << SYNC << ")"; + } + private: tm_future read_extent_sync( Transaction& t, laddr_t addr, extent_len_t len) { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h index 99e75791260ca..f80b99fabe008 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h @@ -110,6 +110,11 @@ class SeastoreNodeExtentManager final: public NodeExtentManager { return Super::URef(new SeastoreSuper(t, tracker, root_addr, tm)); }); } + + std::ostream& print(std::ostream& os) const override { + return os << "SeastoreNodeExtentManager"; + } + private: static seastar::logger& logger() { return crimson::get_logger(ceph_subsys_filestore); diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.cc index a4e7ef451f49c..680bfa9cb683e 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.cc @@ -204,6 +204,10 @@ std::ostream& Btree::dump(Transaction& t, std::ostream& os) { return os; } +std::ostream& Btree::print(std::ostream& os) const { + return os << "BTree-" << *nm; +} + btree_future> Btree::get_root(Transaction& t) { auto root = root_tracker->get_root(t); if (root) { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h index 7276303fba486..170ae2532827f 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h @@ -67,6 +67,7 @@ class Btree { btree_future height(Transaction&); btree_future get_stats_slow(Transaction&); std::ostream& dump(Transaction&, std::ostream&); + std::ostream& print(std::ostream& os) const; // test_only bool test_is_clean() const; @@ -81,6 +82,9 @@ class Btree { friend class DummyChildPool; }; +inline std::ostream& operator<<(std::ostream& os, const Btree& tree) { + return tree.print(os); +} class tree_cursor_t; class Btree::Cursor { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h index f970955106da3..fb61abef3543f 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h @@ -200,24 +200,31 @@ class TreeBuilder { : kvs{kvs}, tree{std::move(nm)} {} future<> bootstrap(Transaction& t) { - return tree.mkfs(t); - } - - future<> insert(Transaction& t) { std::ostringstream oss; #ifndef NDEBUG - oss << "debug on, "; + oss << "debug=on, "; +#else + oss << "debug=off, "; +#endif +#ifdef UNIT_TESTS_BUILT + oss << "UNIT_TEST_BUILT=on, "; #else - oss << "debug off, "; + oss << "UNIT_TEST_BUILT=off, "; #endif if constexpr (TRACK) { - oss << "track on"; + oss << "track=on, "; } else { - oss << "track off"; + oss << "track=off, "; } + oss << tree; + logger().warn("TreeBuilder: {}, bootstrapping ...", oss.str()); + return tree.mkfs(t); + } + + future<> insert(Transaction& t) { kv_iter = kvs.random_begin(); auto cursors = seastar::make_lw_shared>(); - logger().warn("start inserting {} kvs ({}) ...", kvs.size(), oss.str()); + logger().warn("start inserting {} kvs ...", kvs.size()); auto start_time = mono_clock::now(); return crimson::do_until([&t, this, cursors]() -> future { if (kv_iter.is_end()) { diff --git a/src/tools/crimson/perf_staged_fltree.cc b/src/tools/crimson/perf_staged_fltree.cc index 33ecea3602f0d..2e9315e9d385e 100644 --- a/src/tools/crimson/perf_staged_fltree.cc +++ b/src/tools/crimson/perf_staged_fltree.cc @@ -6,6 +6,7 @@ #include #include +#include "crimson/common/log.h" #include "crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h" #include "crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h" #include "test/crimson/seastore/transaction_manager_test_state.h" @@ -13,6 +14,10 @@ using namespace crimson::os::seastore::onode; namespace bpo = boost::program_options; +seastar::logger& logger() { + return crimson::get_logger(ceph_subsys_test); +} + template class PerfTree : public TMTestState { public: @@ -32,7 +37,10 @@ class PerfTree : public TMTestState { { auto t = tm->create_transaction(); tree->insert(*t).unsafe_get(); + auto start_time = mono_clock::now(); tm->submit_transaction(std::move(t)).unsafe_get(); + std::chrono::duration duration = mono_clock::now() - start_time; + logger().warn("submit_transaction() done! {}s", duration.count()); } { auto t = tm->create_transaction(); -- 2.39.5