From: Pritha Srivastava Date: Thu, 30 May 2024 04:27:49 +0000 (+0530) Subject: rgw/d4n: adding perfcounters for d4n cache hits, misses and evictions (LFUDA). X-Git-Tag: v20.3.0~8^2~29 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d66c8526de7385c5599c7df9c005787a11a7abca;p=ceph.git rgw/d4n: adding perfcounters for d4n cache hits, misses and evictions (LFUDA). Signed-off-by: Pritha Srivastava --- diff --git a/src/rgw/driver/d4n/d4n_policy.cc b/src/rgw/driver/d4n/d4n_policy.cc index cf8095b207ab..f73e7d3e66c6 100644 --- a/src/rgw/driver/d4n/d4n_policy.cc +++ b/src/rgw/driver/d4n/d4n_policy.cc @@ -2,7 +2,8 @@ #include "../../../common/async/yield_context.h" #include "common/async/blocked_completion.h" -#include "common/dout.h" +#include "common/dout.h" +#include "rgw_perf_counters.h" namespace rgw { namespace d4n { @@ -324,6 +325,10 @@ int LFUDAPolicy::eviction(const DoutPrefixProvider* dpp, uint64_t size, optional age = std::max(it->second->localWeight, age); erase(dpp, key, y); + + if (perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_evictions); + } freeSpace = cacheDriver->get_free_space(dpp); } diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.cc b/src/rgw/driver/d4n/rgw_sal_d4n.cc index df8b3f5513a7..ad6933a01b20 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.cc +++ b/src/rgw/driver/d4n/rgw_sal_d4n.cc @@ -13,6 +13,7 @@ * */ +#include "rgw_perf_counters.h" #include "rgw_sal_d4n.h" namespace rgw { namespace sal { @@ -514,6 +515,9 @@ int D4NFilterObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* d is_latest_version = false; } if (!get_obj_attrs_from_cache(dpp, y)) { + if(perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_misses); + } std::string head_oid_in_cache; rgw::sal::Attrs attrs; std::string version; @@ -563,6 +567,10 @@ int D4NFilterObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* d } else { ldpp_dout(dpp, 0) << "D4NFilterObject::" << __func__ << "(): failed to cache head object in cache backend, ret=" << ret << dendl; } + } else { + if(perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_hits); + } } return 0; @@ -676,6 +684,9 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix is_latest_version = false; } if (!source->get_obj_attrs_from_cache(dpp, y)) { + if(perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_misses); + } std::string head_oid_in_cache; rgw::sal::Attrs attrs; std::string version; @@ -733,6 +744,10 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix } else { ldpp_dout(dpp, 0) << "D4NFilterObject::" << __func__ << "(): failed to cache head object during eviction, ret=" << ret << dendl; } + } else { + if(perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_hits); + } } return 0; @@ -840,6 +855,9 @@ int D4NFilterObject::D4NFilterReadOp::flush(const DoutPrefixProvider* dpp, rgw:: offset += bl.length(); completed.pop_front_and_dispose(std::default_delete{}); + if(perfcounter) { + perfcounter->inc(l_rgw_d4n_cache_hits); + } } ldpp_dout(dpp, 20) << "D4NFilterObject::returning from flush:: " << dendl; @@ -1127,6 +1145,13 @@ int D4NFilterObject::D4NFilterReadOp::iterate(const DoutPrefixProvider* dpp, int this->cb->set_ofs(ofs); auto r = next->iterate(dpp, ofs, end, this->cb.get(), y); + + //calculate the number of blocks read from backend store, and increment the perfcounter using that + if(perfcounter) { + uint64_t len_to_read_from_store = ((end - ofs) + 1); + uint64_t num_blocks = (len_to_read_from_store%obj_max_req_size) == 0 ? len_to_read_from_store/obj_max_req_size : (len_to_read_from_store/obj_max_req_size) + 1; + perfcounter->inc(l_rgw_d4n_cache_misses, num_blocks); + } if (r < 0) { ldpp_dout(dpp, 0) << "D4NFilterObject::iterate:: " << __func__ << "(): Error: failed to fetch object from backend store, ret=" << r << dendl; diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.h b/src/rgw/driver/d4n/rgw_sal_d4n.h index a38012fb8137..bdd5bef90a91 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.h +++ b/src/rgw/driver/d4n/rgw_sal_d4n.h @@ -109,6 +109,7 @@ class D4NFilterObject : public FilterObject { rgw::sal::Object* dest_object{nullptr}; //for copy-object rgw::sal::Bucket* dest_bucket{nullptr}; //for copy-object std::string dest_version; + public: struct D4NFilterReadOp : FilterReadOp { public: diff --git a/src/rgw/rgw_perf_counters.cc b/src/rgw/rgw_perf_counters.cc index d316476a27b7..8616293c3518 100644 --- a/src/rgw/rgw_perf_counters.cc +++ b/src/rgw/rgw_perf_counters.cc @@ -59,6 +59,10 @@ void add_rgw_frontend_counters(PerfCountersBuilder *pcb) { pcb->add_u64_counter(l_rgw_lua_script_ok, "lua_script_ok", "Successful executions of Lua scripts"); pcb->add_u64_counter(l_rgw_lua_script_fail, "lua_script_fail", "Failed executions of Lua scripts"); pcb->add_u64(l_rgw_lua_current_vms, "lua_current_vms", "Number of Lua VMs currently being executed"); + + pcb->add_u64_counter(l_rgw_d4n_cache_hits, "d4n_cache_hits", "D4N cache hits"); + pcb->add_u64_counter(l_rgw_d4n_cache_misses, "d4n_cache_misses", "D4N cache misses"); + pcb->add_u64_counter(l_rgw_d4n_cache_evictions, "d4n_cache_evictions", "D4N cache evictions"); } void add_rgw_op_counters(PerfCountersBuilder *lpcb) { diff --git a/src/rgw/rgw_perf_counters.h b/src/rgw/rgw_perf_counters.h index 7eb11c926c17..5125d1149897 100644 --- a/src/rgw/rgw_perf_counters.h +++ b/src/rgw/rgw_perf_counters.h @@ -49,6 +49,10 @@ enum { l_rgw_lua_script_ok, l_rgw_lua_script_fail, + l_rgw_d4n_cache_hits, + l_rgw_d4n_cache_misses, + l_rgw_d4n_cache_evictions, + l_rgw_last, };