]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: add metrics for extent rewrite version
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 16 May 2022 09:29:14 +0000 (17:29 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Tue, 17 May 2022 08:37:45 +0000 (16:37 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/transaction.h
src/crimson/os/seastore/transaction_manager.cc

index 8634e923f822b88847d9f6ea91c12f50782dde46..3f738fe95801c7277803751331abc72acd1a9227 100644 (file)
@@ -645,6 +645,35 @@ void Cache::register_metrics()
       }
     );
   }
+
+  /**
+   * rewrite version
+   */
+  metrics.add_group(
+    "cache",
+    {
+      sm::make_counter(
+        "version_count_dirty",
+        stats.committed_dirty_version.num,
+        sm::description("total number of rewrite-dirty extents")
+      ),
+      sm::make_counter(
+        "version_sum_dirty",
+        stats.committed_dirty_version.version,
+        sm::description("sum of the version from rewrite-dirty extents")
+      ),
+      sm::make_counter(
+        "version_count_reclaim",
+        stats.committed_reclaim_version.num,
+        sm::description("total number of rewrite-reclaim extents")
+      ),
+      sm::make_counter(
+        "version_sum_reclaim",
+        stats.committed_reclaim_version.version,
+        sm::description("sum of the version from rewrite-reclaim extents")
+      ),
+    }
+  );
 }
 
 void Cache::add_extent(CachedExtentRef ref)
@@ -1247,6 +1276,15 @@ record_t Cache::prepare_record(
   efforts.inline_record_metadata_bytes +=
     (record.size.get_raw_mdlength() - record.get_delta_size());
 
+  auto &rewrite_version_stats = t.get_rewrite_version_stats();
+  if (trans_src == Transaction::src_t::CLEANER_TRIM) {
+    stats.committed_dirty_version.increment_stat(rewrite_version_stats);
+  } else if (trans_src == Transaction::src_t::CLEANER_RECLAIM) {
+    stats.committed_reclaim_version.increment_stat(rewrite_version_stats);
+  } else {
+    assert(rewrite_version_stats.is_clear());
+  }
+
   return record;
 }
 
index 1f92ba25570c861d59675decde52a26e30735e36..e2a174e012030b19038b827adf162e31b4723fc1 100644 (file)
@@ -1165,6 +1165,9 @@ private:
 
     std::array<uint64_t, NUM_SRC_COMB> trans_conflicts_by_srcs;
     counter_by_src_t<uint64_t> trans_conflicts_by_unknown;
+
+    version_stat_t committed_dirty_version;
+    version_stat_t committed_reclaim_version;
   } stats;
 
   template <typename CounterT>
index 5c4e261e3969e6d7e2c7bae79def9c1d7a43276e..d6926047ebe7f5a20fb82903198de87b2a72a6ae 100644 (file)
@@ -41,6 +41,25 @@ inline std::ostream& operator<<(std::ostream& out, const io_stat_t& stat) {
   return out << stat.num << "(" << stat.bytes << "B)";
 }
 
+struct version_stat_t {
+  uint64_t num = 0;
+  uint64_t version = 0;
+
+  bool is_clear() const {
+    return (num == 0 && version == 0);
+  }
+
+  void increment(extent_version_t v) {
+    ++num;
+    version += v;
+  }
+
+  void increment_stat(const version_stat_t& stat) {
+    num += stat.num;
+    version += stat.version;
+  }
+};
+
 /**
  * Transaction
  *
@@ -323,6 +342,7 @@ public:
     lba_tree_stats = {};
     backref_tree_stats = {};
     ool_write_stats = {};
+    rewrite_version_stats = {};
     to_release = NULL_SEG_ID;
     conflicted = false;
     if (!has_reset) {
@@ -378,6 +398,9 @@ public:
   ool_write_stats_t& get_ool_write_stats() {
     return ool_write_stats;
   }
+  version_stat_t& get_rewrite_version_stats() {
+    return rewrite_version_stats;
+  }
 
 private:
   friend class Cache;
@@ -445,6 +468,7 @@ private:
   tree_stats_t lba_tree_stats;
   tree_stats_t backref_tree_stats;
   ool_write_stats_t ool_write_stats;
+  version_stat_t rewrite_version_stats;
 
   ///< if != NULL_SEG_ID, release this segment after completion
   segment_id_t to_release = NULL_SEG_ID;
index 9c6ebce08b686b320ba092f7fa5dadb26fe82cb9..005d0ba2fb4a81356be3a85a3febbe89e8ec61f0 100644 (file)
@@ -500,6 +500,7 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent(
   LOG_PREFIX(TransactionManager::rewrite_extent);
 
   if (is_backref_node(extent->get_type())) {
+    t.get_rewrite_version_stats().increment(extent->get_version());
     return backref_manager->rewrite_extent(t, extent);
   }
 
@@ -512,6 +513,8 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent(
     extent = updated;
   }
 
+  t.get_rewrite_version_stats().increment(extent->get_version());
+
   if (extent->get_type() == extent_types_t::ROOT) {
     DEBUGT("marking root for rewrite -- {}", t, *extent);
     cache->duplicate_for_write(t, extent);