crimson/os/seastore: add metrics for extent rewrite version

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
This commit is contained in:
Yingxin Cheng 2022-05-16 17:29:14 +08:00
parent a12808e40c
commit bbe7a1beac
4 changed files with 68 additions and 0 deletions

View File

@ -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;
}

View File

@ -1165,6 +1165,9 @@ private:
std::array<uint64_t, NUM_SRC_COMB> trans_conflicts_by_srcs;
counter_by_src_t<uint64_t> trans_conflicts_by_unknown;
version_stat_t committed_dirty_version;
version_stat_t committed_reclaim_version;
} stats;
template <typename CounterT>

View File

@ -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;

View File

@ -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);