From: Samuel Just Date: Thu, 6 Apr 2023 21:15:02 +0000 (-0700) Subject: osd/: add counters for queue latency for PGRecovery[Context] X-Git-Tag: v17.2.7~418^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=24225de1cb821e9364d43c1f0ec964219def1d2d;p=ceph.git osd/: add counters for queue latency for PGRecovery[Context] Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.h b/src/osd/OSD.h index a1bb82f07b70..4326c4b5b018 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1606,6 +1606,7 @@ protected: friend class ceph::osd::scheduler::PGOpItem; friend class ceph::osd::scheduler::PGPeeringItem; friend class ceph::osd::scheduler::PGRecovery; + friend class ceph::osd::scheduler::PGRecoveryContext; friend class ceph::osd::scheduler::PGRecoveryMsg; friend class ceph::osd::scheduler::PGDelete; diff --git a/src/osd/osd_perf_counters.cc b/src/osd/osd_perf_counters.cc index b1c1413bf61d..1767cbec1ed9 100644 --- a/src/osd/osd_perf_counters.cc +++ b/src/osd/osd_perf_counters.cc @@ -187,6 +187,15 @@ PerfCounters *build_osd_logger(CephContext *cct) { "l_osd_recovery_scan_queue_latency", "MOSDPGScan queue latency"); + osd_plb.add_time_avg( + l_osd_recovery_queue_lat, + "l_osd_recovery_queue_latency", + "PGRecovery queue latency"); + osd_plb.add_time_avg( + l_osd_recovery_context_queue_lat, + "l_osd_recovery_context_queue_latency", + "PGRecoveryContext queue latency"); + osd_plb.add_u64(l_osd_loadavg, "loadavg", "CPU load"); osd_plb.add_u64( l_osd_cached_crc, "cached_crc", "Total number getting crc from crc_cache"); diff --git a/src/osd/osd_perf_counters.h b/src/osd/osd_perf_counters.h index f8af01e0e4f5..93fef68feb51 100644 --- a/src/osd/osd_perf_counters.h +++ b/src/osd/osd_perf_counters.h @@ -65,6 +65,9 @@ enum { l_osd_recovery_backfill_remove_queue_lat, l_osd_recovery_scan_queue_lat, + l_osd_recovery_queue_lat, + l_osd_recovery_context_queue_lat, + l_osd_loadavg, l_osd_cached_crc, l_osd_cached_crc_adjusted, diff --git a/src/osd/scheduler/OpSchedulerItem.cc b/src/osd/scheduler/OpSchedulerItem.cc index f2cc3e3fd021..943c6c88ec1c 100644 --- a/src/osd/scheduler/OpSchedulerItem.cc +++ b/src/osd/scheduler/OpSchedulerItem.cc @@ -225,6 +225,9 @@ void PGRecovery::run( PGRef& pg, ThreadPool::TPHandle &handle) { + osd->logger->tinc( + l_osd_recovery_queue_lat, + time_queued - ceph_clock_now()); osd->do_recovery(pg.get(), epoch_queued, reserved_pushes, priority, handle); pg->unlock(); } @@ -235,6 +238,9 @@ void PGRecoveryContext::run( PGRef& pg, ThreadPool::TPHandle &handle) { + osd->logger->tinc( + l_osd_recovery_context_queue_lat, + time_queued - ceph_clock_now()); c.release()->complete(handle); pg->unlock(); } diff --git a/src/osd/scheduler/OpSchedulerItem.h b/src/osd/scheduler/OpSchedulerItem.h index e3f3a1a67af0..62d258b34ab7 100644 --- a/src/osd/scheduler/OpSchedulerItem.h +++ b/src/osd/scheduler/OpSchedulerItem.h @@ -500,6 +500,7 @@ class PGScrubChunkIsFree : public PGScrubItem { }; class PGRecovery : public PGOpQueueable { + utime_t time_queued; epoch_t epoch_queued; uint64_t reserved_pushes; int priority; @@ -510,6 +511,7 @@ public: uint64_t reserved_pushes, int priority) : PGOpQueueable(pg), + time_queued(ceph_clock_now()), epoch_queued(epoch_queued), reserved_pushes(reserved_pushes), priority(priority) {} @@ -530,6 +532,7 @@ public: }; class PGRecoveryContext : public PGOpQueueable { + utime_t time_queued; std::unique_ptr> c; epoch_t epoch; int priority; @@ -538,6 +541,7 @@ public: GenContext *c, epoch_t epoch, int priority) : PGOpQueueable(pgid), + time_queued(ceph_clock_now()), c(c), epoch(epoch), priority(priority) {} std::ostream &print(std::ostream &rhs) const final { return rhs << "PGRecoveryContext(pgid=" << get_pgid()