Skip to content

Commit e48fc34

Browse files
committed
crimson/os/seastore/segment_cleaner: add space reclaim related metrics
Signed-off-by: Xuehan Xu <[email protected]>
1 parent cd3589c commit e48fc34

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/crimson/os/seastore/segment_cleaner.cc

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,12 @@ void SegmentCleaner::register_metrics()
203203
sm::description("total number of extents released by SegmentCleaner")),
204204
sm::make_counter("accumulated_blocked_ios", stats.accumulated_blocked_ios,
205205
sm::description("accumulated total number of ios that were blocked by gc")),
206+
sm::make_counter("reclaimed_segments", stats.reclaimed_segments,
207+
sm::description("reclaimed segments")),
208+
sm::make_counter("reclaim_rewrite_bytes", stats.reclaim_rewrite_bytes,
209+
sm::description("rewritten bytes due to reclaim")),
210+
sm::make_counter("reclaiming_bytes", stats.reclaiming_bytes,
211+
sm::description("bytes being reclaimed")),
206212
sm::make_derive("empty_segments", stats.empty_segments,
207213
sm::description("current empty segments")),
208214
sm::make_derive("ios_blocking", stats.ios_blocking,
@@ -397,19 +403,21 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
397403
).safe_then([this](auto &&_extents) {
398404
return seastar::do_with(
399405
std::move(_extents),
400-
[this](auto &extents) {
401-
return repeat_eagain([this, &extents]() mutable {
406+
(size_t)0,
407+
[this](auto &extents, auto &reclaimed) {
408+
return repeat_eagain([this, &extents, &reclaimed]() mutable {
409+
reclaimed = 0;
402410
logger().debug(
403411
"SegmentCleaner::gc_reclaim_space: processing {} extents",
404412
extents.size());
405413
return ecb->with_transaction_intr(
406414
Transaction::src_t::CLEANER_RECLAIM,
407415
"reclaim_space",
408-
[this, &extents](auto& t)
416+
[this, &extents, &reclaimed](auto& t)
409417
{
410418
return trans_intr::do_for_each(
411419
extents,
412-
[this, &t](auto &extent) {
420+
[this, &t, &reclaimed](auto &extent) {
413421
auto &addr = extent.first;
414422
auto commit_time = extent.second.first.commit_time;
415423
auto commit_type = extent.second.first.commit_type;
@@ -423,7 +431,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
423431
addr,
424432
info.addr,
425433
info.len
426-
).si_then([&info, commit_type, commit_time, addr=addr, &t, this]
434+
).si_then([&info, commit_type, commit_time, addr=addr, &t, this, &reclaimed]
427435
(CachedExtentRef ext) {
428436
if (!ext) {
429437
logger().debug(
@@ -463,6 +471,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
463471
&& commit_time ==
464472
ext->get_last_rewritten().time_since_epoch().count()));
465473

474+
reclaimed += ext->get_length();
466475
return ecb->rewrite_extent(
467476
t,
468477
ext);
@@ -475,10 +484,16 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
475484
return ecb->submit_transaction_direct(t);
476485
});
477486
});
487+
}).safe_then([&reclaimed] {
488+
return seastar::make_ready_future<size_t>(reclaimed);
478489
});
479490
});
480-
}).safe_then([this] {
491+
}).safe_then([this](size_t reclaimed) {
492+
stats.reclaiming_bytes += reclaimed;
481493
if (scan_cursor->is_complete()) {
494+
stats.reclaim_rewrite_bytes += stats.reclaiming_bytes;
495+
stats.reclaiming_bytes = 0;
496+
stats.reclaimed_segments++;
482497
scan_cursor.reset();
483498
}
484499
});

src/crimson/os/seastore/segment_cleaner.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,9 @@ class SegmentCleaner : public SegmentProvider {
692692
uint64_t accumulated_blocked_ios = 0;
693693
uint64_t empty_segments = 0;
694694
int64_t ios_blocking = 0;
695+
uint64_t reclaimed_segments = 0;
696+
uint64_t reclaim_rewrite_bytes = 0;
697+
uint64_t reclaiming_bytes = 0;
695698
seastar::metrics::histogram segment_util;
696699
} stats;
697700
seastar::metrics::metric_group metrics;

0 commit comments

Comments
 (0)