From 990051fa1d4f243e65a6bdd3389b2832eb98f33e Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 10 Apr 2024 16:24:29 -0700 Subject: [PATCH] osd,crimson/osd: add perf counters for replica reads Signed-off-by: Samuel Just --- src/crimson/osd/osd_operations/client_request.cc | 9 ++++++++- src/osd/PrimaryLogPG.cc | 7 +++++++ src/osd/osd_perf_counters.cc | 16 ++++++++++++++++ src/osd/osd_perf_counters.h | 5 +++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index fceb98f37c98..47bc98e343c0 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -14,6 +14,7 @@ #include "crimson/osd/osd_operations/client_request.h" #include "crimson/osd/osd_connection_priv.h" #include "osd/object_state_fmt.h" +#include "osd/osd_perf_counters.h" SET_SUBSYS(osd); @@ -190,19 +191,25 @@ ClientRequest::interruptible_future<> ClientRequest::with_pg_process_interruptib DEBUGDPP("{}.{}: dropping misdirected op", pg, *this, this_instance_id); co_return; - } else if (pg.is_unreadable_object(m->get_hobj())) { + } + + pg.get_perf_logger().inc(l_osd_replica_read); + if (pg.is_unreadable_object(m->get_hobj())) { DEBUGDPP("{}.{}: {} missing on replica, bouncing to primary", pg, *this, this_instance_id, m->get_hobj()); + pg.get_perf_logger().inc(l_osd_replica_read_redirect_missing); co_await reply_op_error(pgref, -EAGAIN); co_return; } else if (!pg.get_peering_state().can_serve_replica_read(m->get_hobj())) { DEBUGDPP("{}.{}: unstable write on replica, bouncing to primary", pg, *this, this_instance_id); + pg.get_perf_logger().inc(l_osd_replica_read_redirect_conflict); co_await reply_op_error(pgref, -EAGAIN); co_return; } else { DEBUGDPP("{}.{}: serving replica read on oid {}", pg, *this, this_instance_id, m->get_hobj()); + pg.get_perf_logger().inc(l_osd_replica_read_served); } } diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 17805fa6683d..b58089904269 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -2053,6 +2053,10 @@ void PrimaryLogPG::do_op(OpRequestRef& op) } } + if (!is_primary()) { + osd->logger->inc(l_osd_replica_read); + } + if (!check_laggy(op)) { return; } @@ -2183,6 +2187,7 @@ void PrimaryLogPG::do_op(OpRequestRef& op) // missing object? if (is_unreadable_object(head)) { if (!is_primary()) { + osd->logger->inc(l_osd_replica_read_redirect_missing); osd->reply_op_error(op, -EAGAIN); return; } @@ -2314,11 +2319,13 @@ void PrimaryLogPG::do_op(OpRequestRef& op) dout(20) << __func__ << ": unstable write on replica, bouncing to primary " << *m << dendl; + osd->logger->inc(l_osd_replica_read_redirect_conflict); osd->reply_op_error(op, -EAGAIN); return; } dout(20) << __func__ << ": serving replica read on oid " << oid << dendl; + osd->logger->inc(l_osd_replica_read_served); } int r = find_object_context( diff --git a/src/osd/osd_perf_counters.cc b/src/osd/osd_perf_counters.cc index d585159649fd..def85209c4ec 100644 --- a/src/osd/osd_perf_counters.cc +++ b/src/osd/osd_perf_counters.cc @@ -133,6 +133,22 @@ PerfCounters *build_osd_logger(CephContext *cct) { osd_plb.add_time_avg(l_osd_op_before_dequeue_op_lat, "op_before_dequeue_op_lat", "Latency of IO before calling dequeue_op(already dequeued and get PG lock)"); // client io before dequeue_op latency + + osd_plb.add_u64_counter( + l_osd_replica_read, "replica_read", "Count of replica reads received"); + osd_plb.add_u64_counter( + l_osd_replica_read_redirect_missing, + "replica_read_redirect_missing", + "Count of replica reads redirected to primary due to missing object"); + osd_plb.add_u64_counter( + l_osd_replica_read_redirect_conflict, + "replica_read_redirect_conflict", + "Count of replica reads redirected to primary due to unstable write"); + osd_plb.add_u64_counter( + l_osd_replica_read_served, + "replica_read_served", + "Count of replica reads served"); + osd_plb.add_u64_counter( l_osd_sop, "subop", "Suboperations"); osd_plb.add_u64_counter( diff --git a/src/osd/osd_perf_counters.h b/src/osd/osd_perf_counters.h index 367da1712fbf..cccdb87a5381 100644 --- a/src/osd/osd_perf_counters.h +++ b/src/osd/osd_perf_counters.h @@ -43,6 +43,11 @@ enum { l_osd_op_before_queue_op_lat, l_osd_op_before_dequeue_op_lat, + l_osd_replica_read, + l_osd_replica_read_redirect_missing, + l_osd_replica_read_redirect_conflict, + l_osd_replica_read_served, + l_osd_sop, l_osd_sop_inb, l_osd_sop_lat, -- 2.47.3