From: Yingxin Cheng Date: Mon, 16 May 2022 09:29:14 +0000 (+0800) Subject: crimson/os/seastore: add metrics for extent rewrite version X-Git-Tag: v18.0.0~879^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bbe7a1beac009240cfd245a9f6ad0284f2f9c6ea;p=ceph.git crimson/os/seastore: add metrics for extent rewrite version Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 8634e923f822b..3f738fe95801c 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 1f92ba25570c8..e2a174e012030 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 5c4e261e3969e..d6926047ebe7f 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 9c6ebce08b686..005d0ba2fb4a8 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);