]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/: add counters for queue latency for PGRecovery[Context]
authorSamuel Just <sjust@redhat.com>
Thu, 6 Apr 2023 21:15:02 +0000 (14:15 -0700)
committerSridhar Seshasayee <sseshasa@redhat.com>
Thu, 27 Apr 2023 13:15:26 +0000 (18:45 +0530)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/osd/OSD.h
src/osd/osd_perf_counters.cc
src/osd/osd_perf_counters.h
src/osd/scheduler/OpSchedulerItem.cc
src/osd/scheduler/OpSchedulerItem.h

index 96393b0863d591597db2a3e9511a87c479ffbfc5..9f8ac6ea7f6afb558f96479237751c8d98367153 100644 (file)
@@ -1567,6 +1567,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;
 
index b1c1413bf61d9dea1cfdf9e4421fafb729b6fa9e..1767cbec1ed9c7a474107187d2c76805a0f0f193 100644 (file)
@@ -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");
index f8af01e0e4f564e3d28f32a6d02346a05788b6a3..93fef68feb51f9087ff25ff62cafddfb045bde2c 100644 (file)
@@ -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,
index d1df432005735d49b3435330ad7972cf9145ecf2..755bf2d31757b1f8f5c978c537d7661386ff4eea 100644 (file)
@@ -224,6 +224,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();
 }
@@ -234,6 +237,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();
 }
index df0c2e1320cc054f05b8d84bf4ee09d1ce6fde97..3ae176e2b551bbde9f4fcc5166a798425a1ad13a 100644 (file)
@@ -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<GenContext<ThreadPool::TPHandle&>> c;
   epoch_t epoch;
   int priority;
@@ -538,6 +541,7 @@ public:
                    GenContext<ThreadPool::TPHandle&> *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()