]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: cleanup, replace unordered_map by array
authorYingxin Cheng <yingxin.cheng@intel.com>
Tue, 27 Jul 2021 08:36:44 +0000 (16:36 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 30 Jul 2021 01:42:05 +0000 (09:42 +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/seastore_types.h
src/crimson/os/seastore/transaction.h

index 2f10c91d216b29e694901ac7ebcbd75587d3d6de..1fc7cdb146b1a010839e419874ad7cc54eae0f73 100644 (file)
@@ -211,51 +211,25 @@ void Cache::register_metrics()
   /*
    * trans_invalidated
    */
-  auto register_trans_invalidated =
-    [this, &labels_by_src, &labels_by_ext](src_t src, extent_types_t ext) {
-      auto m_key = std::make_pair(src, ext);
-      stats.trans_invalidated[m_key] = 0;
-      std::ostringstream oss_desc;
-      oss_desc << "total number of transaction invalidated (src="
-               << src << ", ext="
-               << ext << ")";
+  for (auto& [src, src_label] : labels_by_src) {
+    for (auto& [ext, ext_label] : labels_by_ext) {
+      auto& counter_by_extent = get_by_src(stats.trans_invalidated, src);
+      auto& counter = get_by_ext(counter_by_extent, ext);
+      counter = 0;
       metrics.add_group(
         "cache",
         {
           sm::make_counter(
             "trans_invalidated",
-            stats.trans_invalidated.find(m_key)->second,
-            sm::description(oss_desc.str()),
-            {labels_by_src.find(src)->second,
-             labels_by_ext.find(ext)->second}
+            counter,
+            sm::description("total number of transaction invalidated"),
+            {src_label, ext_label}
           ),
         }
       );
-    };
-  for (auto& [src, label] : labels_by_src) {
-    for (auto& [ext, _label] : labels_by_ext) {
-      register_trans_invalidated(src, ext);
     }
   }
 
-  metrics.add_group(
-    "cache",
-    {
-      sm::make_counter(
-        "trans_invalidated",
-        [this] {
-          uint64_t total = 0;
-          for (auto& [k, v] : stats.trans_invalidated) {
-            total += v;
-          }
-          return total;
-        },
-        sm::description("total number of transaction invalidated"),
-        {src_label("ALL")}
-      ),
-    }
-  );
-
   /**
    * read_transactions_successful
    */
@@ -383,7 +357,7 @@ void Cache::register_metrics()
       auto& efforts = get_by_src(stats.committed_efforts_by_src, src);
       for (auto& [effort_name, effort_label] : labels_by_effort) {
         auto& effort_by_ext = [&efforts, &effort_name]()
-            -> std::array<effort_t, EXTENT_TYPES_MAX>& {
+            -> counter_by_extent_t<effort_t>& {
           if (effort_name == "READ") {
             return efforts.read_by_ext;
           } else if (effort_name == "MUTATE") {
@@ -629,10 +603,9 @@ void Cache::invalidate(Transaction& t, CachedExtent& conflicting_extent)
   DEBUGT("set conflict", t);
   t.conflicted = true;
 
-  auto m_key = std::make_pair(
-      t.get_src(), conflicting_extent.get_type());
-  assert(stats.trans_invalidated.count(m_key));
-  ++(stats.trans_invalidated[m_key]);
+  auto& counter_by_extent = get_by_src(stats.trans_invalidated, t.get_src());
+  auto& counter = get_by_ext(counter_by_extent, conflicting_extent.get_type());
+  ++counter;
 
   auto& efforts = get_by_src(stats.invalidated_efforts_by_src,
                              t.get_src());
index 32880621eb1a419345583c6b8e2bb32e2c1725f1..1c141cc4eb57b94c1d1c69131202d5c8e3c71d8c 100644 (file)
@@ -4,8 +4,6 @@
 #pragma once
 
 #include <iostream>
-#include <unordered_map>
-#include <boost/functional/hash.hpp>
 
 #include "seastar/core/shared_future.hh"
 
@@ -646,12 +644,15 @@ private:
     }
   };
 
+  template <typename CounterT>
+  using counter_by_extent_t = std::array<CounterT, EXTENT_TYPES_MAX>;
+
   struct trans_byextent_efforts_t {
-    std::array<effort_t, EXTENT_TYPES_MAX> read_by_ext;
-    std::array<effort_t, EXTENT_TYPES_MAX> mutate_by_ext;
-    std::array<uint64_t, EXTENT_TYPES_MAX> delta_bytes_by_ext;
-    std::array<effort_t, EXTENT_TYPES_MAX> retire_by_ext;
-    std::array<effort_t, EXTENT_TYPES_MAX> fresh_by_ext;
+    counter_by_extent_t<effort_t> read_by_ext;
+    counter_by_extent_t<effort_t> mutate_by_ext;
+    counter_by_extent_t<uint64_t> delta_bytes_by_ext;
+    counter_by_extent_t<effort_t> retire_by_ext;
+    counter_by_extent_t<effort_t > fresh_by_ext;
   };
 
   struct {
@@ -659,8 +660,7 @@ private:
     std::array<uint64_t, Transaction::SRC_MAX> trans_committed_by_src;
     std::array<trans_byextent_efforts_t,
                Transaction::SRC_MAX> committed_efforts_by_src;
-    std::unordered_map<src_ext_t, uint64_t,
-                       boost::hash<src_ext_t>> trans_invalidated;
+    std::array<counter_by_extent_t<uint64_t>, Transaction::SRC_MAX> trans_invalidated;
     std::array<trans_efforts_t, Transaction::SRC_MAX> invalidated_efforts_by_src;
     std::array<query_counters_t, Transaction::SRC_MAX> cache_query_by_src;
     uint64_t read_transactions_successful;
@@ -678,7 +678,7 @@ private:
 
   template <typename CounterT>
   CounterT& get_by_ext(
-      std::array<CounterT, EXTENT_TYPES_MAX>& counters_by_ext,
+      counter_by_extent_t<CounterT>& counters_by_ext,
       extent_types_t ext) {
     return counters_by_ext[extent_type_to_index(ext)];
   }
index 372461a70e469a845812a032b3ab710fabc0dc62..1ef052409b9c67916739eb3d81c3498cb90a9097 100644 (file)
@@ -732,18 +732,6 @@ struct rbm_alloc_delta_t {
 
 }
 
-namespace std {
-
-template<>
-struct hash<::crimson::os::seastore::extent_types_t> {
-  std::size_t operator()(
-      const ::crimson::os::seastore::extent_types_t& type) const noexcept {
-    return std::hash<uint8_t>{}((uint8_t)type);
-  }
-};
-
-}
-
 WRITE_CLASS_DENC_BOUNDED(crimson::os::seastore::seastore_meta_t)
 WRITE_CLASS_DENC_BOUNDED(crimson::os::seastore::paddr_t)
 WRITE_CLASS_DENC_BOUNDED(crimson::os::seastore::journal_seq_t)
index 11f99f8cc81315378f7c671a9b619d12a3687702..e01f01a8830389754c9b6bd29e2da189b8a2825a 100644 (file)
@@ -340,15 +340,3 @@ template <typename T>
 using with_trans_ertr = typename T::base_ertr::template extend<crimson::ct_error::eagain>;
 
 }
-
-namespace std {
-
-template<>
-struct hash<::crimson::os::seastore::Transaction::src_t> {
-  std::size_t operator()(
-      const ::crimson::os::seastore::Transaction::src_t& src) const noexcept {
-    return std::hash<uint8_t>{}((uint8_t)src);
-  }
-};
-
-}