From 29558b3dcd7f379b660609955d9d39d5fea720c0 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 13 May 2022 17:13:17 +0800 Subject: [PATCH] crimson/os/seastore/segment_cleaner: add metrics about journal sizes Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/segment_cleaner.cc | 7 ++++++ src/crimson/os/seastore/segment_cleaner.h | 29 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/crimson/os/seastore/segment_cleaner.cc b/src/crimson/os/seastore/segment_cleaner.cc index ead4f7ec72c9f..4463de68dca90 100644 --- a/src/crimson/os/seastore/segment_cleaner.cc +++ b/src/crimson/os/seastore/segment_cleaner.cc @@ -501,6 +501,13 @@ void SegmentCleaner::register_metrics() [this] { return get_unavailable_unused_bytes(); }, sm::description("the size of the space is unavailable and not alive")), + sm::make_counter("dirty_journal_bytes", + [this] { return get_dirty_journal_size(); }, + sm::description("the size of the journal for dirty extents")), + sm::make_counter("alloc_journal_bytes", + [this] { return get_alloc_journal_size(); }, + sm::description("the size of the journal for alloc info")), + sm::make_counter("projected_count", stats.projected_count, sm::description("the number of projected usage reservations")), sm::make_counter("projected_used_bytes_sum", stats.projected_used_bytes_sum, diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index e828bb586e442..7843d68727ea0 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -1183,6 +1183,35 @@ private: (double)segments.get_total_bytes(); } + /* + * Journal sizes + */ + std::size_t get_dirty_journal_size() const { + auto journal_head = segments.get_journal_head(); + if (journal_head == JOURNAL_SEQ_NULL || + dirty_extents_replay_from == JOURNAL_SEQ_NULL) { + return 0; + } + return (journal_head.segment_seq - dirty_extents_replay_from.segment_seq) * + segments.get_segment_size() + + journal_head.offset.as_seg_paddr().get_segment_off() - + segments.get_segment_size() - + dirty_extents_replay_from.offset.as_seg_paddr().get_segment_off(); + } + + std::size_t get_alloc_journal_size() const { + auto journal_head = segments.get_journal_head(); + if (journal_head == JOURNAL_SEQ_NULL || + alloc_info_replay_from == JOURNAL_SEQ_NULL) { + return 0; + } + return (journal_head.segment_seq - alloc_info_replay_from.segment_seq) * + segments.get_segment_size() + + journal_head.offset.as_seg_paddr().get_segment_off() - + segments.get_segment_size() - + alloc_info_replay_from.offset.as_seg_paddr().get_segment_off(); + } + /** * should_block_on_gc * -- 2.39.5