From fa39684dcb413a8cb019f0e719011b0e577cae60 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Mon, 13 Jun 2022 10:52:34 +0800 Subject: [PATCH] crimson/os/seastore/omap_manager: count omap/onode tree extents Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/btree/fixed_kv_btree.h | 1 + src/crimson/os/seastore/cache.cc | 7 +++++++ .../seastore/omap_manager/btree/btree_omap_manager.cc | 10 ++++++++-- .../omap_manager/btree/omap_btree_node_impl.cc | 5 ++++- .../os/seastore/onode_manager/staged-fltree/node.cc | 6 ++++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 9658b9e4c8898..db185bcbe29db 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -319,6 +319,7 @@ public: root_leaf->set_meta(meta); root_leaf->pin.set_range(meta); get_tree_stats(c.trans).depth = 1u; + get_tree_stats(c.trans).extents_num_delta++; return phy_tree_root_t{root_leaf->get_paddr(), 1u}; } diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 70051672dea83..ee128db1d8561 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1261,8 +1261,15 @@ record_t Cache::prepare_record( if (t.onode_tree_stats.depth) { stats.onode_tree_depth = t.onode_tree_stats.depth; } + if (t.omap_tree_stats.depth) { + stats.omap_tree_depth = t.omap_tree_stats.depth; + } + stats.onode_tree_extents_num += t.onode_tree_stats.extents_num_delta; + ceph_assert(stats.onode_tree_extents_num >= 0); get_by_src(stats.committed_onode_tree_efforts, trans_src ).increment(t.onode_tree_stats); + stats.omap_tree_extents_num += t.omap_tree_stats.extents_num_delta; + ceph_assert(stats.omap_tree_extents_num >= 0); get_by_src(stats.committed_omap_tree_efforts, trans_src ).increment(t.omap_tree_stats); } diff --git a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc index fcf069b67abf9..df2ed29d6abf4 100644 --- a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc +++ b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc @@ -27,12 +27,14 @@ BtreeOMapManager::initialize_omap(Transaction &t, laddr_t hint) logger().debug("{}", __func__); return tm.alloc_extent(t, hint, OMAP_LEAF_BLOCK_SIZE) - .si_then([hint](auto&& root_extent) { + .si_then([hint, &t](auto&& root_extent) { root_extent->set_size(0); omap_node_meta_t meta{1}; root_extent->set_meta(meta); omap_root_t omap_root; omap_root.update(root_extent->get_laddr(), 1, hint); + t.get_omap_tree_stats().depth = 1u; + t.get_omap_tree_stats().extents_num_delta++; return initialize_omap_iertr::make_ready_future(omap_root); }); } @@ -53,7 +55,7 @@ BtreeOMapManager::handle_root_split( { return oc.tm.alloc_extent(oc.t, omap_root.hint, OMAP_INNER_BLOCK_SIZE) - .si_then([&omap_root, mresult](auto&& nroot) -> handle_root_split_ret { + .si_then([&omap_root, mresult, oc](auto&& nroot) -> handle_root_split_ret { auto [left, right, pivot] = *(mresult.split_tuple); omap_node_meta_t meta{omap_root.depth + 1}; nroot->set_meta(meta); @@ -62,6 +64,8 @@ BtreeOMapManager::handle_root_split( nroot->journal_inner_insert(nroot->iter_begin() + 1, right->get_laddr(), pivot, nroot->maybe_get_delta_buffer()); omap_root.update(nroot->get_laddr(), omap_root.get_depth() + 1, omap_root.hint); + oc.t.get_omap_tree_stats().depth = omap_root.depth; + ++(oc.t.get_omap_tree_stats().extents_num_delta); return seastar::now(); }); } @@ -78,6 +82,8 @@ BtreeOMapManager::handle_root_merge( iter->get_val(), omap_root.depth -= 1, omap_root.hint); + oc.t.get_omap_tree_stats().depth = omap_root.depth; + oc.t.get_omap_tree_stats().extents_num_delta--; return oc.tm.dec_ref(oc.t, root->get_laddr() ).si_then([](auto &&ret) -> handle_root_merge_ret { return seastar::now(); diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc index e94c8287aafa4..5091935477b89 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc @@ -72,6 +72,7 @@ OMapInnerNode::make_split_insert( right->journal_inner_insert(riter, laddr, key, right->maybe_get_delta_buffer()); } + ++(oc.t.get_omap_tree_stats().extents_num_delta); return make_split_insert_ret( interruptible::ready_future_marker{}, mutation_result_t(mutation_status_t::WAS_SPLIT, tuple, std::nullopt)); @@ -342,7 +343,8 @@ OMapInnerNode::merge_entry( journal_inner_remove(riter, maybe_get_delta_buffer()); //retire extent std::vector dec_laddrs {l->get_laddr(), r->get_laddr()}; - return dec_ref(oc, dec_laddrs).si_then([this] { + return dec_ref(oc, dec_laddrs).si_then([this, oc] { + --(oc.t.get_omap_tree_stats().extents_num_delta); if (extent_is_below_min()) { return merge_entry_ret( interruptible::ready_future_marker{}, @@ -483,6 +485,7 @@ OMapLeafNode::insert( right->journal_leaf_insert(mut_iter, key, value, right->maybe_get_delta_buffer()); } } + ++(oc.t.get_omap_tree_stats().extents_num_delta); return dec_ref(oc, get_laddr()) .si_then([tuple = std::move(tuple)] { return insert_ret( diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc index 6ff6cad786a7f..b35d003d360a3 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc @@ -410,6 +410,7 @@ eagain_ifuture<> Node::mkfs(context_t c, RootNodeTracker& root_tracker) LOG_PREFIX(OTree::Node::mkfs); return LeafNode::allocate_root(c, root_tracker ).si_then([c, FNAME](auto ret) { + c.t.get_onode_tree_stats().extents_num_delta++; INFOT("allocated root {}", c.t, ret->get_name()); }); } @@ -627,6 +628,7 @@ Node::try_merge_adjacent( search_position_t left_last_pos = left_for_merge->impl->merge( left_mut, *right_for_merge->impl, merge_stage, merge_size); left_for_merge->track_merge(right_for_merge, merge_stage, left_last_pos); + --(c.t.get_onode_tree_stats().extents_num_delta); return left_for_merge->parent_info().ptr->apply_children_merge( c, std::move(left_for_merge), left_addr, std::move(right_for_merge), update_index_after_merge); @@ -1237,6 +1239,7 @@ eagain_ifuture> InternalNode::allocate_root( fresh_node.mut.copy_in_absolute( const_cast(p_value), old_root_addr); root->make_root_from(c, std::move(super), old_root_addr); + ++(c.t.get_onode_tree_stats().extents_num_delta); return root; }); } @@ -1446,6 +1449,7 @@ eagain_ifuture<> InternalNode::try_downgrade_root( child->deref_parent(); auto super_to_move = deref_super(); child->make_root_from(c, std::move(super_to_move), impl->laddr()); + --(c.t.get_onode_tree_stats().extents_num_delta); return retire(c, std::move(this_ref)); }); } @@ -1551,6 +1555,7 @@ eagain_ifuture> InternalNode::insert_or_split( validate_tracked_children(); right_node->validate_tracked_children(); } + ++(c.t.get_onode_tree_stats().extents_num_delta); return right_node; }); } @@ -2114,6 +2119,7 @@ eagain_ifuture> LeafNode::insert_value( validate_tracked_cursors(); right_node->validate_tracked_cursors(); + ++(c.t.get_onode_tree_stats().extents_num_delta); return apply_split_to_parent( c, std::move(this_ref), std::move(right_node), false ).si_then([ret] { -- 2.39.5