From ad4569f2d6145b5fe6296f2349126bda8a667713 Mon Sep 17 00:00:00 2001 From: Aishwarya Mathuria Date: Thu, 10 Mar 2022 15:55:37 +0530 Subject: [PATCH] osd/scrub: add scrub duration to pg stats 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 (cherry picked from commit be9f8a15cd490cad9b01556273abe56c2ed7162d) --- src/osd/osd_types.cc | 7 ++++++- src/osd/osd_types.h | 2 ++ src/osd/scrubber/pg_scrubber.cc | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 9a0927d16a78d..9de661e619bc8 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -2863,6 +2863,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) @@ -3014,6 +3015,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); } @@ -3103,6 +3105,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); @@ -3137,6 +3140,7 @@ void pg_stat_t::generate_test_instances(list& 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 l; @@ -3214,7 +3218,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 -- diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 6fbc56f02f313..b710f659e0d29 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -2247,6 +2247,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 up, acting; std::vector avail_no_missing; @@ -2288,6 +2289,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), diff --git a/src/osd/scrubber/pg_scrubber.cc b/src/osd/scrubber/pg_scrubber.cc index 7966b0d1cc7de..712a3c328f838 100644 --- a/src/osd/scrubber/pg_scrubber.cc +++ b/src/osd/scrubber/pg_scrubber.cc @@ -2137,6 +2137,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; }); } -- 2.39.5