From 7c300425aa006f7da06707aa88e0c47990b8aef3 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 26 Dec 2024 16:08:23 +0800 Subject: [PATCH] crimson/osd/pg: record client requests' metrics in DynamicPerfStats Signed-off-by: Xuehan Xu --- src/crimson/osd/ops_executer.h | 4 ++++ src/crimson/osd/osd_operations/client_request.cc | 9 +++++++++ src/crimson/osd/osd_operations/client_request.h | 13 +++++++++++++ src/crimson/osd/pg.h | 9 +++++++++ 4 files changed, 35 insertions(+) diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index f5554bd6919..6be1f09eab4 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -169,6 +169,10 @@ public: IOInterruptCondition, osd_op_errorator>; object_stat_sum_t delta_stats; + + size_t get_bytes_written() { + return txn.get_num_bytes(); + } private: // with_effect can be used to schedule operations to be performed // at commit time. effects will be discarded if the operation does diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index 4f4283ea6f6..24d602a0cde 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -63,6 +63,7 @@ ClientRequest::ClientRequest( : shard_services(&_shard_services), l_conn(std::move(conn)), m(std::move(m)), + begin_time(std::chrono::steady_clock::now()), instance_handle(new instance_handle_t) {} @@ -525,6 +526,7 @@ ClientRequest::do_process( co_return; } + size_t inb = 0, outb = 0; { auto all_completed = interruptor::now(); if (ret) { @@ -540,6 +542,7 @@ ClientRequest::do_process( // simply return the error below, leaving all_completed alone } else { auto submitted = interruptor::now(); + inb = ox.get_bytes_written(); std::tie(submitted, all_completed) = co_await pg->submit_executer( std::move(ox), m->ops); co_await std::move(submitted); @@ -573,9 +576,15 @@ ClientRequest::do_process( reply->set_result(osdop.rval); break; } + outb += osdop.outdata.length(); } } + pg->add_client_request_lat( + *this, + inb, + outb, + utime_t{std::chrono::steady_clock::now() - begin_time}); reply->set_enoent_reply_versions( pg->peering_state.get_info().last_update, pg->peering_state.get_info().last_user_version); diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index 10b71fc696b..d624f8c1685 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -41,12 +41,25 @@ class ClientRequest final : public PhasedOperationT, OpInfo op_info; seastar::promise<> on_complete; unsigned instance_id = 0; + std::chrono::time_point begin_time; public: epoch_t get_epoch_sent_at() const { return m->get_map_epoch(); } + bool may_write() const { return op_info.may_write(); } + bool may_cache() const { return op_info.may_cache(); } + bool may_read() const { return op_info.may_read(); } + template + T* get_req() const { + static_assert(std::is_same_v); + return m.get(); + } + const crimson::net::ConnectionRef &get_connection() const { + return l_conn; + } + /** * instance_handle_t * diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index df19ee92b3a..ca84b24583e 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -21,6 +21,7 @@ #include "crimson/osd/object_context.h" #include "osd/PeeringState.h" #include "osd/SnapMapper.h" +#include "osd/DynamicPerfStats.h" #include "crimson/common/interruptible_future.h" #include "crimson/common/log.h" @@ -765,8 +766,16 @@ public: private: std::optional pg_stats; + DynamicPerfStats dp_stats; public: + void add_client_request_lat( + const ClientRequest& req, + size_t inb, + size_t outb, + const utime_t &lat) { + dp_stats.add(pg_whoami.osd, get_info(), req, inb, outb, lat); + } OSDriver &get_osdriver() final { return osdriver; } -- 2.39.5