Skip to content

Commit bae81a5

Browse files
committed
osd/scrub: new/modified perf counters for scrub preemption
A new 'scrub_[replicated/ec]_io_intersects' counter is added, to count the times a client write op intersects the active scrub chunk range. A new 'scrub_[replicated/ec]_io_blocked' counter counts the times the write op did not preempt the scrub, and instead blocked for the scrub to release the chunk. The existing labeled counter <label>_write_blocked is still there, but will be removed in 'Umbrella'. Its meaning was modified, to mimic the new 'scrub_[replicated/ec]_io_blocked' counter. Signed-off-by: Ronen Friedman <[email protected]>
1 parent b2db494 commit bae81a5

File tree

5 files changed

+32
-1
lines changed

5 files changed

+32
-1
lines changed

src/osd/osd_perf_counters.cc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,14 @@ PerfCounters *build_osd_logger(CephContext *cct) {
407407
l_osd_scrub_rppool_failed_elapsed,
408408
"failed_scrubs_replicated_elapsed",
409409
"time to scrub failure replicated");
410+
osd_plb.add_u64_counter(
411+
l_osd_scrub_rppool_write_intersects,
412+
"scrub_replicated_io_intersects",
413+
"client write op intersects chunk range");
414+
osd_plb.add_u64_counter(
415+
l_osd_scrub_rppool_write_blocked,
416+
"scrub_replicated_io_blocked",
417+
"write op did not preempt the scrub");
410418

411419
// the replica reservation process - replicated pool
412420
osd_plb.add_u64_counter(
@@ -456,6 +464,14 @@ PerfCounters *build_osd_logger(CephContext *cct) {
456464
osd_plb.add_time_avg(
457465
l_osd_scrub_ec_failed_elapsed, "failed_scrubs_ec_elapsed",
458466
"time to scrub failure ec");
467+
osd_plb.add_u64_counter(
468+
l_osd_scrub_ec_write_intersects,
469+
"scrub_ec_io_intersects",
470+
"client write op intersects chunk range");
471+
osd_plb.add_u64_counter(
472+
l_osd_scrub_ec_write_blocked,
473+
"scrub_ec_io_blocked",
474+
"write op did not preempt the scrub");
459475

460476
// the secondaries reservation process - EC
461477
osd_plb.add_u64_counter(

src/osd/osd_perf_counters.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ enum osd_counter_idx_t {
170170
l_osd_scrub_rppool_successful_elapsed, ///< time to complete a successful scrub
171171
l_osd_scrub_rppool_failed, ///< failed scrubs count
172172
l_osd_scrub_rppool_failed_elapsed, ///< time from start to failure
173+
l_osd_scrub_rppool_write_intersects, ///< client write op intersects chunk range
174+
l_osd_scrub_rppool_write_blocked, ///< write op did not preempt the scrub
173175

174176
// ---- scrub reservation process - replicated pools
175177

@@ -196,6 +198,8 @@ enum osd_counter_idx_t {
196198
l_osd_scrub_ec_successful_elapsed, ///< time to complete a successful scrub
197199
l_osd_scrub_ec_failed, ///< failed scrubs count
198200
l_osd_scrub_ec_failed_elapsed, ///< time from start to failure
201+
l_osd_scrub_ec_write_intersects, ///< client write op intersects chunk range
202+
l_osd_scrub_ec_write_blocked, ///< write op did not preempt the scrub
199203

200204
// ---- scrub reservation process - EC
201205

src/osd/scrubber/pg_scrubber.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,8 @@ bool PgScrubber::write_blocked_by_scrub(const hobject_t& soid)
10201020
return false;
10211021
}
10221022

1023-
get_labeled_counters()->inc(scrbcnt_write_blocked);
1023+
const auto& unlabeled_cntrs_idx = get_unlabeled_counters();
1024+
get_osd_perf_counters()->inc(unlabeled_cntrs_idx.write_intersects);
10241025
dout(20) << __func__ << " " << soid << " can preempt? "
10251026
<< preemption_data.is_preemptable() << " already preempted? "
10261027
<< preemption_data.was_preempted() << dendl;
@@ -1042,6 +1043,10 @@ bool PgScrubber::write_blocked_by_scrub(const hobject_t& soid)
10421043

10431044
return false;
10441045
}
1046+
1047+
get_osd_perf_counters()->inc(unlabeled_cntrs_idx.write_blocked);
1048+
// to be removed in version 'Umbrella':
1049+
get_labeled_counters()->inc(scrbcnt_write_blocked);
10451050
return true;
10461051
}
10471052

src/osd/scrubber/pg_scrubber.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ static inline constexpr ScrubCounterSet io_counters_replicated{
150150
.successful_elapsed = l_osd_scrub_rppool_successful_elapsed,
151151
.failed_cnt = l_osd_scrub_rppool_failed,
152152
.failed_elapsed = l_osd_scrub_rppool_failed_elapsed,
153+
.write_intersects = l_osd_scrub_rppool_write_intersects,
154+
.write_blocked = l_osd_scrub_rppool_write_blocked,
153155
// replica-reservation-related:
154156
.rsv_successful_cnt = l_osd_scrub_rppool_reserv_success,
155157
.rsv_successful_elapsed = l_osd_scrub_rppool_reserv_successful_elapsed,
@@ -175,6 +177,8 @@ static inline constexpr ScrubCounterSet io_counters_ec{
175177
.successful_elapsed = l_osd_scrub_ec_successful_elapsed,
176178
.failed_cnt = l_osd_scrub_ec_failed,
177179
.failed_elapsed = l_osd_scrub_ec_failed_elapsed,
180+
.write_intersects = l_osd_scrub_ec_write_intersects,
181+
.write_blocked = l_osd_scrub_ec_write_blocked,
178182
// replica-reservation-related:
179183
.rsv_successful_cnt = l_osd_scrub_ec_reserv_success,
180184
.rsv_successful_elapsed = l_osd_scrub_ec_reserv_successful_elapsed,

src/osd/scrubber_common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ struct ScrubCounterSet {
322322
osd_counter_idx_t successful_elapsed; ///< time to complete a successful scrub
323323
osd_counter_idx_t failed_cnt; ///< failed scrubs count
324324
osd_counter_idx_t failed_elapsed; ///< time from start to failure
325+
osd_counter_idx_t write_intersects; ///< client write op intersects chunk range
326+
osd_counter_idx_t write_blocked; ///< write op did not preempt the scrub
325327
// reservation process related:
326328
osd_counter_idx_t rsv_successful_cnt; ///< completed reservation processes
327329
osd_counter_idx_t rsv_successful_elapsed; ///< time to all-reserved

0 commit comments

Comments
 (0)