From 361d1c1ec0cad0233a14aeb41379b027a7d75170 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 24 Jun 2022 13:22:07 +0800 Subject: [PATCH] crimson/os/seastore/segment_cleaner: improve log information Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/async_cleaner.cc | 54 +++++++++++++++--------- src/crimson/os/seastore/async_cleaner.h | 11 +++++ 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 893383310ce..7d35c3eab70 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -65,8 +65,8 @@ void segment_info_t::init_closed( std::ostream& operator<<(std::ostream &out, const segment_info_t &info) { - out << "seg_info_t(" - << "state=" << info.state; + out << "seg_info_t(" << info.id + << ", state=" << info.state; if (info.is_empty()) { // pass } else { // open or closed @@ -569,11 +569,13 @@ segment_id_t AsyncCleaner::allocate_segment( segments.mark_open(seg_id, seq, type, category, generation); auto new_usage = calc_utilization(seg_id); adjust_segment_util(old_usage, new_usage); - INFO("opened, should_block_on_gc {}, projected_avail_ratio {}, " - "reclaim_ratio {}", - should_block_on_gc(), + INFO("opened, should_block_on_trim {}, should_block_on_reclaim {}, " + "projected_avail_ratio {}, reclaim_ratio {}, alive_ratio {}", + should_block_on_trim(), + should_block_on_reclaim(), get_projected_available_ratio(), - get_reclaim_ratio()); + get_reclaim_ratio(), + get_alive_ratio()); return seg_id; } } @@ -670,11 +672,14 @@ void AsyncCleaner::close_segment(segment_id_t segment) } auto new_usage = calc_utilization(segment); adjust_segment_util(old_usage, new_usage); - INFO("closed, should_block_on_gc {}, projected_avail_ratio {}, " - "reclaim_ratio {}", - should_block_on_gc(), + INFO("closed, should_block_on_trim {}, should_block_on_reclaim {}, " + "projected_avail_ratio {}, reclaim_ratio {}, alive_ratio {} -- {}", + should_block_on_trim(), + should_block_on_reclaim(), get_projected_available_ratio(), - get_reclaim_ratio()); + get_reclaim_ratio(), + get_alive_ratio(), + seg_info); } AsyncCleaner::trim_backrefs_ret AsyncCleaner::trim_backrefs( @@ -888,7 +893,8 @@ AsyncCleaner::gc_reclaim_space_ret AsyncCleaner::gc_reclaim_space() if (!reclaim_state) { segment_id_t seg_id = get_next_reclaim_segment(); auto &segment_info = segments[seg_id]; - INFO("reclaim {} {} start", seg_id, segment_info); + INFO("reclaim {} {} start, usage={}", + seg_id, segment_info, space_tracker->calc_utilization(seg_id)); ceph_assert(segment_info.is_closed()); reclaim_state = reclaim_state_t::create( seg_id, segment_info.generation, segments.get_segment_size()); @@ -1023,9 +1029,10 @@ AsyncCleaner::gc_reclaim_space_ret AsyncCleaner::gc_reclaim_space() auto d = seastar::lowres_system_clock::now() - start; DEBUG("duration: {}, pavail_ratio before: {}, repeats: {}", d, pavail_ratio, runs); if (reclaim_state->is_complete()) { - INFO("reclaim {} finish, alive/total={}", + INFO("reclaim {} finish, reclaimed alive/total={}, usage={}", reclaim_state->get_segment_id(), - stats.reclaiming_bytes/(double)segments.get_segment_size()); + stats.reclaiming_bytes/(double)segments.get_segment_size(), + space_tracker->calc_utilization(reclaim_state->get_segment_id())); stats.reclaimed_bytes += stats.reclaiming_bytes; stats.reclaimed_segment_bytes += segments.get_segment_size(); stats.reclaiming_bytes = 0; @@ -1058,6 +1065,7 @@ AsyncCleaner::mount_ret AsyncCleaner::mount() for (auto sm : sms) { segments.add_segment_manager(*sm); } + segments.assign_ids(); metrics.clear(); register_metrics(); @@ -1221,12 +1229,14 @@ AsyncCleaner::maybe_release_segment(Transaction &t) segments.mark_empty(to_release); auto new_usage = calc_utilization(to_release); adjust_segment_util(old_usage, new_usage); - INFOT("released, should_block_on_gc {}, projected_avail_ratio {}, " - "reclaim_ratio {}", - t, - should_block_on_gc(), - get_projected_available_ratio(), - get_reclaim_ratio()); + INFOT("released, should_block_on_trim {}, should_block_on_reclaim {}, " + "projected_avail_ratio {}, reclaim_ratio {}, alive_ratio {}", + t, + should_block_on_trim(), + should_block_on_reclaim(), + get_projected_available_ratio(), + get_reclaim_ratio(), + get_alive_ratio()); if (space_tracker->get_usage(to_release) != 0) { space_tracker->dump_usage(to_release); ceph_abort(); @@ -1372,7 +1382,8 @@ void AsyncCleaner::log_gc_state(const char *caller) const "unavailable_unused {}B; " "reclaim_ratio {}, " "available_ratio {}, " - "should_block_on_gc {}, " + "should_block_on_trim {}, " + "should_block_on_reclaim {}, " "gc_should_reclaim_space {}, " "journal_head {}, " "journal_tail_target {}, " @@ -1392,7 +1403,8 @@ void AsyncCleaner::log_gc_state(const char *caller) const get_unavailable_unused_bytes(), get_reclaim_ratio(), segments.get_available_ratio(), - should_block_on_gc(), + should_block_on_trim(), + should_block_on_reclaim(), gc_should_reclaim_space(), segments.get_journal_head(), journal_tail_target, diff --git a/src/crimson/os/seastore/async_cleaner.h b/src/crimson/os/seastore/async_cleaner.h index 5847f001f04..19189b55cdf 100644 --- a/src/crimson/os/seastore/async_cleaner.h +++ b/src/crimson/os/seastore/async_cleaner.h @@ -29,6 +29,8 @@ namespace crimson::os::seastore { struct segment_info_t { using time_point = seastar::lowres_system_clock::time_point; + segment_id_t id = NULL_SEG_ID; + // segment_info_t is initiated as set_empty() Segment::segment_state_t state = Segment::segment_state_t::EMPTY; @@ -196,6 +198,12 @@ public: void add_segment_manager(SegmentManager &segment_manager); + void assign_ids() { + for (auto &item : segments) { + item.second.id = item.first; + } + } + // initiate non-empty segments, the others are by default empty void init_closed(segment_id_t, segment_seq_t, segment_type_t, data_category_t, reclaim_gen_t); @@ -1157,6 +1165,9 @@ private: if (segments.get_unavailable_bytes() == 0) return 0; return (double)get_unavailable_unused_bytes() / (double)segments.get_unavailable_bytes(); } + double get_alive_ratio() const { + return stats.used_bytes / (double)segments.get_total_bytes(); + } /* * Space calculations (projected) -- 2.39.5