]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/scrub: add scrub duration to pg stats 45337/head
authorAishwarya Mathuria <amathuri@redhat.com>
Thu, 10 Mar 2022 10:25:37 +0000 (15:55 +0530)
committerAishwarya Mathuria <amathuri@redhat.com>
Fri, 11 Mar 2022 06:55:27 +0000 (12:25 +0530)
Addition of a SCRUB_DURATION field that shows how long the scrub/deep-scrub of a pg took.
This field will be displayed in the output of the "ceph pg dump --format=json" and "ceph pg ls-by-pool --format=json" commands.

Signed-off-by: Aishwarya Mathuria <amathuri@redhat.com>
src/osd/osd_types.cc
src/osd/osd_types.h
src/osd/scrubber/pg_scrubber.cc

index 6349c945d6ac32c7ead0a7503ff7fe7276a2eeb7..7692fe6e466103fe6b14e751ff27a56b81e03904 100644 (file)
@@ -2870,6 +2870,7 @@ void pg_stat_t::dump(Formatter *f) const
   f->dump_unsigned("snaptrimq_len", snaptrimq_len);
   f->dump_int("last_scrub_duration", last_scrub_duration);
   f->dump_string("scrub_schedule", dump_scrub_schedule());
+  f->dump_float("scrub_duration", scrub_duration);
   stats.dump(f);
   f->open_array_section("up");
   for (auto p = up.cbegin(); p != up.cend(); ++p)
@@ -3021,6 +3022,7 @@ void pg_stat_t::encode(ceph::buffer::list &bl) const
   encode((scrub_sched_status.m_is_deep==scrub_level_t::deep), bl);
   encode(scrub_sched_status.m_is_periodic, bl);
   encode(objects_scrubbed, bl);
+  encode(scrub_duration, bl);
 
   ENCODE_FINISH(bl);
 }
@@ -3110,6 +3112,7 @@ void pg_stat_t::decode(ceph::buffer::list::const_iterator &bl)
       decode(tmp, bl);
       scrub_sched_status.m_is_periodic = tmp;
       decode(objects_scrubbed, bl);
+      decode(scrub_duration, bl);
     }
   }
   DECODE_FINISH(bl);
@@ -3144,6 +3147,7 @@ void pg_stat_t::generate_test_instances(list<pg_stat_t*>& o)
   a.last_deep_scrub_stamp = utime_t(15, 16);
   a.last_clean_scrub_stamp = utime_t(17, 18);
   a.last_scrub_duration = 3617;
+  a.scrub_duration = 0.003;
   a.snaptrimq_len = 1048576;
   a.objects_scrubbed = 0;
   list<object_stat_collection_t*> l;
@@ -3221,7 +3225,8 @@ bool operator==(const pg_stat_t& l, const pg_stat_t& r)
     l.snaptrimq_len == r.snaptrimq_len &&
     l.last_scrub_duration == r.last_scrub_duration &&
     l.scrub_sched_status == r.scrub_sched_status &&
-    l.objects_scrubbed == r.objects_scrubbed;
+    l.objects_scrubbed == r.objects_scrubbed &&
+    l.scrub_duration == r.scrub_duration;
 }
 
 // -- store_statfs_t --
index 17cf324a0e01940b8029925eb85d26bd54320862..27f34fae5382476dbef447d8f117b96766ee40ff 100644 (file)
@@ -2249,6 +2249,7 @@ struct pg_stat_t {
   int64_t log_size;
   int64_t ondisk_log_size;    // >= active_log_size
   int64_t objects_scrubbed;
+  double scrub_duration;
 
   std::vector<int32_t> up, acting;
   std::vector<pg_shard_t> avail_no_missing;
@@ -2290,6 +2291,7 @@ struct pg_stat_t {
       parent_split_bits(0),
       log_size(0), ondisk_log_size(0),
       objects_scrubbed(0),
+      scrub_duration(0),
       mapping_epoch(0),
       up_primary(-1),
       acting_primary(-1),
index a9eb5d5eb9f13f4032d27c360fed471c4519814b..b7f007c7385369f9c6488c65bef9b6428250559d 100644 (file)
@@ -2033,6 +2033,7 @@ void PgScrubber::set_scrub_duration()
   utime_t duration = stamp - scrub_begin_stamp;
   m_pg->recovery_state.update_stats([=](auto& history, auto& stats) {
     stats.last_scrub_duration = ceill(duration.to_msec()/1000.0);
+    stats.scrub_duration = double(duration);
     return true;
   });
 }