]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/segment_cleaner: add space reclaim related metrics
authorXuehan Xu <xxhdx1985126@gmail.com>
Wed, 1 Dec 2021 10:32:34 +0000 (18:32 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Mon, 7 Mar 2022 02:25:37 +0000 (10:25 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/segment_cleaner.cc
src/crimson/os/seastore/segment_cleaner.h

index dc22701fd9ef98853a9fa8416d84bdfeaedfa919..fb795ceef84a7fb6c45cf2e3f3051a047191557b 100644 (file)
@@ -203,6 +203,12 @@ void SegmentCleaner::register_metrics()
                     sm::description("total number of extents released by SegmentCleaner")),
     sm::make_counter("accumulated_blocked_ios", stats.accumulated_blocked_ios,
                     sm::description("accumulated total number of ios that were blocked by gc")),
+    sm::make_counter("reclaimed_segments", stats.reclaimed_segments,
+                    sm::description("reclaimed segments")),
+    sm::make_counter("reclaim_rewrite_bytes", stats.reclaim_rewrite_bytes,
+                    sm::description("rewritten bytes due to reclaim")),
+    sm::make_counter("reclaiming_bytes", stats.reclaiming_bytes,
+                    sm::description("bytes being reclaimed")),
     sm::make_derive("empty_segments", stats.empty_segments,
                    sm::description("current empty segments")),
     sm::make_derive("ios_blocking", stats.ios_blocking,
@@ -397,19 +403,21 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
   ).safe_then([this](auto &&_extents) {
     return seastar::do_with(
         std::move(_extents),
-        [this](auto &extents) {
-      return repeat_eagain([this, &extents]() mutable {
+       (size_t)0,
+        [this](auto &extents, auto &reclaimed) {
+      return repeat_eagain([this, &extents, &reclaimed]() mutable {
+       reclaimed = 0;
         logger().debug(
           "SegmentCleaner::gc_reclaim_space: processing {} extents",
           extents.size());
         return ecb->with_transaction_intr(
           Transaction::src_t::CLEANER_RECLAIM,
           "reclaim_space",
-          [this, &extents](auto& t)
+          [this, &extents, &reclaimed](auto& t)
         {
           return trans_intr::do_for_each(
               extents,
-              [this, &t](auto &extent) {
+              [this, &t, &reclaimed](auto &extent) {
            auto &addr = extent.first;
            auto commit_time = extent.second.first.commit_time;
            auto commit_type = extent.second.first.commit_type;
@@ -423,7 +431,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
               addr,
               info.addr,
               info.len
-            ).si_then([&info, commit_type, commit_time, addr=addr, &t, this]
+            ).si_then([&info, commit_type, commit_time, addr=addr, &t, this, &reclaimed]
              (CachedExtentRef ext) {
               if (!ext) {
                 logger().debug(
@@ -463,6 +471,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
                      && commit_time ==
                        ext->get_last_rewritten().time_since_epoch().count()));
 
+               reclaimed += ext->get_length();
                 return ecb->rewrite_extent(
                   t,
                   ext);
@@ -475,10 +484,16 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
             return ecb->submit_transaction_direct(t);
           });
         });
+      }).safe_then([&reclaimed] {
+       return seastar::make_ready_future<size_t>(reclaimed);
       });
     });
-  }).safe_then([this] {
+  }).safe_then([this](size_t reclaimed) {
+    stats.reclaiming_bytes += reclaimed;
     if (scan_cursor->is_complete()) {
+      stats.reclaim_rewrite_bytes += stats.reclaiming_bytes;
+      stats.reclaiming_bytes = 0;
+      stats.reclaimed_segments++;
       scan_cursor.reset();
     }
   });
index 62bfb9ab94840808da7797675ee8a5c610e14a68..6b10c63d9ca7bc20ab5c69f6fe41185c35bcd213 100644 (file)
@@ -692,6 +692,9 @@ private:
     uint64_t accumulated_blocked_ios = 0;
     uint64_t empty_segments = 0;
     int64_t ios_blocking = 0;
+    uint64_t reclaimed_segments = 0;
+    uint64_t reclaim_rewrite_bytes = 0;
+    uint64_t reclaiming_bytes = 0;
     seastar::metrics::histogram segment_util;
   } stats;
   seastar::metrics::metric_group metrics;