From: Yingxin Cheng Date: Tue, 27 Jul 2021 08:36:44 +0000 (+0800) Subject: crimson/os/seastore/cache: cleanup, replace unordered_map by array X-Git-Tag: v17.1.0~1254^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=38b01895eeffa173a17bce1b33a7a622118daa8b;p=ceph.git crimson/os/seastore/cache: cleanup, replace unordered_map by array Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 2f10c91d216b2..1fc7cdb146b1a 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -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& { + -> counter_by_extent_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()); diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 32880621eb1a4..1c141cc4eb57b 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -4,8 +4,6 @@ #pragma once #include -#include -#include #include "seastar/core/shared_future.hh" @@ -646,12 +644,15 @@ private: } }; + template + using counter_by_extent_t = std::array; + struct trans_byextent_efforts_t { - std::array read_by_ext; - std::array mutate_by_ext; - std::array delta_bytes_by_ext; - std::array retire_by_ext; - std::array fresh_by_ext; + counter_by_extent_t read_by_ext; + counter_by_extent_t mutate_by_ext; + counter_by_extent_t delta_bytes_by_ext; + counter_by_extent_t retire_by_ext; + counter_by_extent_t fresh_by_ext; }; struct { @@ -659,8 +660,7 @@ private: std::array trans_committed_by_src; std::array committed_efforts_by_src; - std::unordered_map> trans_invalidated; + std::array, Transaction::SRC_MAX> trans_invalidated; std::array invalidated_efforts_by_src; std::array cache_query_by_src; uint64_t read_transactions_successful; @@ -678,7 +678,7 @@ private: template CounterT& get_by_ext( - std::array& counters_by_ext, + counter_by_extent_t& counters_by_ext, extent_types_t ext) { return counters_by_ext[extent_type_to_index(ext)]; } diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 372461a70e469..1ef052409b9c6 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -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)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) diff --git a/src/crimson/os/seastore/transaction.h b/src/crimson/os/seastore/transaction.h index 11f99f8cc8131..e01f01a883038 100644 --- a/src/crimson/os/seastore/transaction.h +++ b/src/crimson/os/seastore/transaction.h @@ -340,15 +340,3 @@ template using with_trans_ertr = typename T::base_ertr::template extend; } - -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)src); - } -}; - -}