mirror of
https://github.com/ceph/ceph
synced 2026-08-01 22:45:39 +00:00
crimson/os/seastore/cache: add hit ratio metric
Signed-off-by: Zhang Song <zhangsong02@qianxin.com> Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
This commit is contained in:
parent
2a5257a04c
commit
eb9e9b9d06
@ -231,6 +231,29 @@ void Cache::register_metrics(store_index_t store_index)
|
||||
}
|
||||
);
|
||||
|
||||
metrics.add_group("cache", {
|
||||
sm::make_counter(
|
||||
"write_hit_hot",
|
||||
stats.write_hit_hot,
|
||||
sm::description("the number of the lbc hits of data writes"),
|
||||
{sm::label_instance("shard_store_index", std::to_string(store_index))}),
|
||||
sm::make_counter(
|
||||
"write_hit_cold",
|
||||
stats.write_hit_cold,
|
||||
sm::description("the number of the lbc misses of data writes"),
|
||||
{sm::label_instance("shard_store_index", std::to_string(store_index))}),
|
||||
sm::make_counter(
|
||||
"read_hit_hot",
|
||||
stats.read_hit_hot,
|
||||
sm::description("the number of the lbc hits of data reads"),
|
||||
{sm::label_instance("shard_store_index", std::to_string(store_index))}),
|
||||
sm::make_counter(
|
||||
"read_hit_cold",
|
||||
stats.read_hit_cold,
|
||||
sm::description("the number of the lbc misses of data reads"),
|
||||
{sm::label_instance("shard_store_index", std::to_string(store_index))}),
|
||||
});
|
||||
|
||||
{
|
||||
/*
|
||||
* efforts discarded/committed
|
||||
@ -2181,6 +2204,9 @@ void Cache::complete_commit(
|
||||
i->set_invalid(t);
|
||||
}
|
||||
}
|
||||
|
||||
stats.write_hit_hot += t.write_hit_hot;
|
||||
stats.write_hit_cold += t.write_hit_cold;
|
||||
}
|
||||
|
||||
void Cache::init()
|
||||
|
||||
@ -761,6 +761,11 @@ public:
|
||||
return epm.is_pure_rbm();
|
||||
}
|
||||
|
||||
void update_read_ratio(Transaction &t) {
|
||||
stats.read_hit_hot += t.read_hit_hot;
|
||||
stats.read_hit_cold += t.read_hit_cold;
|
||||
}
|
||||
|
||||
private:
|
||||
using get_extent_ertr = base_ertr;
|
||||
template <typename T>
|
||||
@ -1868,6 +1873,11 @@ private:
|
||||
std::array<uint64_t, NUM_SRC_COMB> trans_conflicts_by_srcs;
|
||||
counter_by_src_t<uint64_t> trans_conflicts_by_unknown;
|
||||
|
||||
uint64_t write_hit_hot = 0;
|
||||
uint64_t write_hit_cold = 0;
|
||||
uint64_t read_hit_hot = 0;
|
||||
uint64_t read_hit_cold = 0;
|
||||
|
||||
rewrite_stats_t trim_rewrites;
|
||||
rewrite_stats_t reclaim_rewrites;
|
||||
} stats;
|
||||
|
||||
@ -1578,6 +1578,7 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
|
||||
read_len,
|
||||
pin_start,
|
||||
pin_len);
|
||||
|
||||
rpins.emplace_back(
|
||||
pin, read_start_aligned, read_len_aligned,
|
||||
unalign_start_offset, read_len);
|
||||
@ -1613,11 +1614,17 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
|
||||
DEBUGT("got extent: {}", ctx.t, *maybe_indirect_extent.extent);
|
||||
auto paddr = maybe_indirect_extent.extent->get_paddr();
|
||||
all_cold &= ctx.tm.is_cold_device(paddr.get_device_id());
|
||||
|
||||
if (paddr.is_absolute()) {
|
||||
ctx.tm.update_read_ratio(ctx.t, paddr.get_device_id());
|
||||
}
|
||||
|
||||
}
|
||||
if (!all_cold) {
|
||||
assert(ctx.tm.is_prefix_cached(prefix));
|
||||
ctx.tm.update_logical_bucket_for_read(prefix);
|
||||
}
|
||||
ctx.tm.submit_read_ratio(ctx.t);
|
||||
co_return std::move(ret);
|
||||
}
|
||||
|
||||
|
||||
@ -540,7 +540,16 @@ public:
|
||||
friend class crimson::os::seastore::SeaStore;
|
||||
friend class TransactionConflictCondition;
|
||||
|
||||
uint64_t write_hit_hot = 0;
|
||||
uint64_t write_hit_cold = 0;
|
||||
uint64_t read_hit_hot = 0;
|
||||
uint64_t read_hit_cold = 0;
|
||||
|
||||
void reset_preserve_handle() {
|
||||
write_hit_hot = 0;
|
||||
write_hit_cold = 0;
|
||||
read_hit_hot = 0;
|
||||
read_hit_cold = 0;
|
||||
root.reset();
|
||||
offset = 0;
|
||||
delayed_temp_offset = 0;
|
||||
|
||||
@ -245,6 +245,28 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
void update_hit_ratio(Transaction& t, device_id_t id) {
|
||||
if (epm->is_cold_device(id)) {
|
||||
t.write_hit_cold++;
|
||||
} else {
|
||||
t.write_hit_hot++;
|
||||
}
|
||||
}
|
||||
|
||||
void update_read_ratio(Transaction& t, device_id_t id) {
|
||||
if (epm->is_cold_device(id)) {
|
||||
t.read_hit_cold++;
|
||||
} else {
|
||||
t.read_hit_hot++;
|
||||
}
|
||||
}
|
||||
|
||||
void submit_read_ratio(Transaction& t) {
|
||||
if (cache) {
|
||||
cache->update_read_ratio(t);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
using lextent_init_func_t = std::function<void (T&)>;
|
||||
/**
|
||||
@ -1223,6 +1245,9 @@ public:
|
||||
return cut_mapping<T>(
|
||||
t, (laddr + aligned_len).checked_to_laddr(), std::move(mapping), false);
|
||||
} else {
|
||||
if (mapping.is_linked_direct() && mapping.get_val().is_absolute()) {
|
||||
update_hit_ratio(t, mapping.get_val().get_device_id());
|
||||
}
|
||||
return remove(t, std::move(mapping)
|
||||
).handle_error_interruptible(
|
||||
punch_mappings_iertr::pass_further{},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user