]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/omap_manager: count omap/onode tree extents
authorXuehan Xu <xxhdx1985126@gmail.com>
Mon, 13 Jun 2022 02:52:34 +0000 (10:52 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Sun, 19 Jun 2022 12:21:03 +0000 (20:21 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/btree/fixed_kv_btree.h
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc
src/crimson/os/seastore/onode_manager/staged-fltree/node.cc

index 9658b9e4c889853dedd08a8f0ae0ff037827f948..db185bcbe29db84e8355b9e6c73947ef5240bebf 100644 (file)
@@ -319,6 +319,7 @@ public:
     root_leaf->set_meta(meta);
     root_leaf->pin.set_range(meta);
     get_tree_stats<self_type>(c.trans).depth = 1u;
+    get_tree_stats<self_type>(c.trans).extents_num_delta++;
     return phy_tree_root_t{root_leaf->get_paddr(), 1u};
   }
 
index 70051672dea83c75dd53f70970fe84d0af7325e7..ee128db1d856127a1b93b3fc5ebbe2e30b974544 100644 (file)
@@ -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);
   }
index fcf069b67abf9c8c2564aa6e9ed4169e36cfb07f..df2ed29d6abf49d0ec31a246e41995293ff7b96e 100644 (file)
@@ -27,12 +27,14 @@ BtreeOMapManager::initialize_omap(Transaction &t, laddr_t hint)
 
   logger().debug("{}", __func__);
   return tm.alloc_extent<OMapLeafNode>(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_t>(omap_root);
   });
 }
@@ -53,7 +55,7 @@ BtreeOMapManager::handle_root_split(
 {
   return oc.tm.alloc_extent<OMapInnerNode>(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();
index e94c8287aafa4e066b31d2130bad5b3c43af07b9..5091935477b890f91b534b2079b4379256ef44f1 100644 (file)
@@ -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<laddr_t> 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(
index 6ff6cad786a7f0b663ce95ff9bd1ea818a3e62de..b35d003d360a324cb44a8aac0f2a11974474f73b 100644 (file)
@@ -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<Ref<InternalNode>> InternalNode::allocate_root(
     fresh_node.mut.copy_in_absolute(
         const_cast<laddr_packed_t*>(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<Ref<InternalNode>> 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<Ref<tree_cursor_t>> 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] {