From 715cb60777b99c41255037f808ccefd17dfaf186 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 26 May 2026 17:55:00 +0800 Subject: [PATCH] crimson/os/seastore/onode_manager: avoid debug related info from occupying too much cpu time According to the perf tests, constructing the info occupies about 5% of the total system cpu overhead Signed-off-by: Xuehan Xu --- .../onode_manager/staged-fltree/node.cc | 17 +++++++++++------ .../onode_manager/staged-fltree/node_layout.h | 2 ++ 2 files changed, 13 insertions(+), 6 deletions(-) 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 b83831f5a3fa..809d91cc5ff3 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc @@ -690,20 +690,25 @@ eagain_ifuture> Node::load( return c.nm.read_extent(c.t, addr ).handle_error_interruptible( eagain_iertr::pass_further{}, - crimson::ct_error::assert_all(fmt::format( - "{} -- addr={}, is_level_tail={}", FNAME, addr, expect_is_level_tail).c_str()) + crimson::ct_error::all_same_way( + [FNAME, c, addr, expect_is_level_tail](const auto &e) { + ERRORT("{} -- addr={}, is_level_tail={}", + c.t, addr, expect_is_level_tail); + ceph_abort(); + return eagain_iertr::make_ready_future(); + }) ).si_then([FNAME, c, addr, expect_is_level_tail](auto extent) -> eagain_ifuture> { assert(extent); auto header = extent->get_header(); auto field_type = header.get_field_type(); - if (!field_type) { + if (unlikely(!field_type)) { ERRORT("load addr={}, is_level_tail={} error, " "got invalid header -- {}", c.t, addr, expect_is_level_tail, fmt::ptr(extent)); ceph_abort_msg("fatal error"); } - if (header.get_is_level_tail() != expect_is_level_tail) { + if (unlikely(header.get_is_level_tail() != expect_is_level_tail)) { ERRORT("load addr={}, is_level_tail={} error, " "is_level_tail mismatch -- {}", c.t, addr, expect_is_level_tail, fmt::ptr(extent)); @@ -712,7 +717,7 @@ eagain_ifuture> Node::load( auto node_type = header.get_node_type(); if (node_type == node_type_t::LEAF) { - if (extent->get_length() != c.vb.get_leaf_node_size()) { + if (unlikely(extent->get_length() != c.vb.get_leaf_node_size())) { ERRORT("load addr={}, is_level_tail={} error, " "leaf length mismatch -- {}", c.t, addr, expect_is_level_tail, fmt::ptr(extent)); @@ -723,7 +728,7 @@ eagain_ifuture> Node::load( return eagain_iertr::make_ready_future>( new LeafNode(derived_ptr, std::move(impl))); } else if (node_type == node_type_t::INTERNAL) { - if (extent->get_length() != c.vb.get_internal_node_size()) { + if (unlikely(extent->get_length() != c.vb.get_internal_node_size())) { ERRORT("load addr={}, is_level_tail={} error, " "internal length mismatch -- {}", c.t, addr, expect_is_level_tail, fmt::ptr(extent)); diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h index 8190cc40e2b5..ac638f435b9f 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h @@ -906,7 +906,9 @@ class NodeLayoutT final : public InternalNodeImpl, public LeafNodeImpl { private: NodeLayoutT(NodeExtentRef extent) : extent{extent} { +#ifndef NDEBUG build_name(); +#endif } extent_len_t filled_size() const { -- 2.47.3