From bbe7a1beac009240cfd245a9f6ad0284f2f9c6ea Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 16 May 2022 17:29:14 +0800 Subject: [PATCH] crimson/os/seastore: add metrics for extent rewrite version Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 38 +++++++++++++++++++ src/crimson/os/seastore/cache.h | 3 ++ src/crimson/os/seastore/transaction.h | 24 ++++++++++++ .../os/seastore/transaction_manager.cc | 3 ++ 4 files changed, 68 insertions(+) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 8634e923f82..3f738fe9580 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -645,6 +645,35 @@ void Cache::register_metrics() } ); } + + /** + * rewrite version + */ + metrics.add_group( + "cache", + { + sm::make_counter( + "version_count_dirty", + stats.committed_dirty_version.num, + sm::description("total number of rewrite-dirty extents") + ), + sm::make_counter( + "version_sum_dirty", + stats.committed_dirty_version.version, + sm::description("sum of the version from rewrite-dirty extents") + ), + sm::make_counter( + "version_count_reclaim", + stats.committed_reclaim_version.num, + sm::description("total number of rewrite-reclaim extents") + ), + sm::make_counter( + "version_sum_reclaim", + stats.committed_reclaim_version.version, + sm::description("sum of the version from rewrite-reclaim extents") + ), + } + ); } void Cache::add_extent(CachedExtentRef ref) @@ -1247,6 +1276,15 @@ record_t Cache::prepare_record( efforts.inline_record_metadata_bytes += (record.size.get_raw_mdlength() - record.get_delta_size()); + auto &rewrite_version_stats = t.get_rewrite_version_stats(); + if (trans_src == Transaction::src_t::CLEANER_TRIM) { + stats.committed_dirty_version.increment_stat(rewrite_version_stats); + } else if (trans_src == Transaction::src_t::CLEANER_RECLAIM) { + stats.committed_reclaim_version.increment_stat(rewrite_version_stats); + } else { + assert(rewrite_version_stats.is_clear()); + } + return record; } diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 1f92ba25570..e2a174e0120 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -1165,6 +1165,9 @@ private: std::array trans_conflicts_by_srcs; counter_by_src_t trans_conflicts_by_unknown; + + version_stat_t committed_dirty_version; + version_stat_t committed_reclaim_version; } stats; template diff --git a/src/crimson/os/seastore/transaction.h b/src/crimson/os/seastore/transaction.h index 5c4e261e396..d6926047ebe 100644 --- a/src/crimson/os/seastore/transaction.h +++ b/src/crimson/os/seastore/transaction.h @@ -41,6 +41,25 @@ inline std::ostream& operator<<(std::ostream& out, const io_stat_t& stat) { return out << stat.num << "(" << stat.bytes << "B)"; } +struct version_stat_t { + uint64_t num = 0; + uint64_t version = 0; + + bool is_clear() const { + return (num == 0 && version == 0); + } + + void increment(extent_version_t v) { + ++num; + version += v; + } + + void increment_stat(const version_stat_t& stat) { + num += stat.num; + version += stat.version; + } +}; + /** * Transaction * @@ -323,6 +342,7 @@ public: lba_tree_stats = {}; backref_tree_stats = {}; ool_write_stats = {}; + rewrite_version_stats = {}; to_release = NULL_SEG_ID; conflicted = false; if (!has_reset) { @@ -378,6 +398,9 @@ public: ool_write_stats_t& get_ool_write_stats() { return ool_write_stats; } + version_stat_t& get_rewrite_version_stats() { + return rewrite_version_stats; + } private: friend class Cache; @@ -445,6 +468,7 @@ private: tree_stats_t lba_tree_stats; tree_stats_t backref_tree_stats; ool_write_stats_t ool_write_stats; + version_stat_t rewrite_version_stats; ///< if != NULL_SEG_ID, release this segment after completion segment_id_t to_release = NULL_SEG_ID; diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 9c6ebce08b6..005d0ba2fb4 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -500,6 +500,7 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent( LOG_PREFIX(TransactionManager::rewrite_extent); if (is_backref_node(extent->get_type())) { + t.get_rewrite_version_stats().increment(extent->get_version()); return backref_manager->rewrite_extent(t, extent); } @@ -512,6 +513,8 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent( extent = updated; } + t.get_rewrite_version_stats().increment(extent->get_version()); + if (extent->get_type() == extent_types_t::ROOT) { DEBUGT("marking root for rewrite -- {}", t, *extent); cache->duplicate_for_write(t, extent); -- 2.39.5