From: Kefu Chai Date: Sat, 15 May 2021 05:44:49 +0000 (+0800) Subject: crimson/os/seastore: use seastar::metrics for metrics reporting X-Git-Tag: v17.1.0~1936^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2356da856784e78750ba7f3b381b31b1c8ad5672;p=ceph-ci.git crimson/os/seastore: use seastar::metrics for metrics reporting to be better prepeare for the m:n mapping and to attach more labels to a metric for better off-line data analysis using ETL tools in future. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index b7de87528f1..8ed529b29f5 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1105,8 +1105,7 @@ std::unique_ptr make_seastore( std::move(segment_cleaner), std::move(journal), std::move(cache), - std::move(lba_manager), - perf_service->get_counters()); + std::move(lba_manager)); auto cm = std::make_unique(*tm); return std::make_unique( diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 2977850f046..2b7e3291588 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -16,14 +16,12 @@ TransactionManager::TransactionManager( SegmentCleanerRef _segment_cleaner, JournalRef _journal, CacheRef _cache, - LBAManagerRef _lba_manager, - PerfCounters &perf) + LBAManagerRef _lba_manager) : segment_manager(_segment_manager), segment_cleaner(std::move(_segment_cleaner)), cache(std::move(_cache)), lba_manager(std::move(_lba_manager)), - journal(std::move(_journal)), - tm_perf(perf) + journal(std::move(_journal)) { segment_cleaner->set_extent_callback(this); journal->set_write_pipeline(&write_pipeline); @@ -158,8 +156,8 @@ TransactionManager::ref_ret TransactionManager::dec_ref( t, *ref); cache->retire_extent(t, ref); - tm_perf.inc(ss_tm_extents_retired_total); - tm_perf.inc(ss_tm_extents_retired_bytes, ref->get_length()); + stats.extents_retired_total++; + stats.extents_retired_bytes += ref->get_length(); } return ret.refcount; }); @@ -177,8 +175,8 @@ TransactionManager::ref_ret TransactionManager::dec_ref( return cache->retire_extent( t, result.addr, result.length ).safe_then([result, this] { - tm_perf.inc(ss_tm_extents_retired_total); - tm_perf.inc(ss_tm_extents_retired_bytes, result.length); + stats.extents_retired_total++; + stats.extents_retired_bytes += result.length; return ref_ret( ref_ertr::ready_future_marker{}, 0); @@ -380,4 +378,23 @@ TransactionManager::get_extent_if_live_ret TransactionManager::get_extent_if_liv TransactionManager::~TransactionManager() {} +void TransactionManager::register_metrics() +{ + namespace sm = seastar::metrics; + metrics.add_group("tm", { + sm::make_counter("extents_retired_total", stats.extents_retired_total, + sm::description("total number of retired extents in TransactionManager")), + sm::make_counter("extents_retired_bytes", stats.extents_retired_bytes, + sm::description("total size of retired extents in TransactionManager")), + sm::make_counter("extents_mutated_total", stats.extents_mutated_total, + sm::description("total number of mutated extents in TransactionManager")), + sm::make_counter("extents_mutated_bytes", stats.extents_mutated_bytes, + sm::description("total size of mutated extents in TransactionManager")), + sm::make_counter("extents_allocated_total", stats.extents_allocated_total, + sm::description("total number of allocated extents in TransactionManager")), + sm::make_counter("extents_allocated_bytes", stats.extents_allocated_bytes, + sm::description("total size of allocated extents in TransactionManager")), + }); +} + } diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 56407c13fbc..55119476bac 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -69,8 +69,7 @@ public: SegmentCleanerRef segment_cleaner, JournalRef journal, CacheRef cache, - LBAManagerRef lba_manager, - PerfCounters &perf); + LBAManagerRef lba_manager); /// Writes initial metadata to disk using mkfs_ertr = crimson::errorator< @@ -190,8 +189,8 @@ public: auto ret = cache->duplicate_for_write( t, ref)->cast(); - tm_perf.inc(ss_tm_extents_mutated_total); - tm_perf.inc(ss_tm_extents_mutated_bytes, ret->get_length()); + stats.extents_mutated_total++; + stats.extents_mutated_bytes += ret->get_length(); if (!ret->has_pin()) { DEBUGT( "duplicating {} for write: {}", @@ -264,8 +263,8 @@ public: ext->get_paddr() ).safe_then([ext=std::move(ext), len, this](auto &&ref) mutable { ext->set_pin(std::move(ref)); - tm_perf.inc(ss_tm_extents_allocated_total); - tm_perf.inc(ss_tm_extents_allocated_bytes, len); + stats.extents_allocated_total++; + stats.extents_allocated_bytes += len; return alloc_extent_ertr::make_ready_future>( std::move(ext)); }); @@ -495,10 +494,20 @@ private: CacheRef cache; LBAManagerRef lba_manager; JournalRef journal; - PerfCounters &tm_perf; WritePipeline write_pipeline; + struct { + uint64_t extents_retired_total = 0; + uint64_t extents_retired_bytes = 0; + uint64_t extents_mutated_total = 0; + uint64_t extents_mutated_bytes = 0; + uint64_t extents_allocated_total = 0; + uint64_t extents_allocated_bytes = 0; + } stats; + seastar::metrics::metric_group metrics; + void register_metrics(); + public: // Testing interfaces auto get_segment_cleaner() { diff --git a/src/test/crimson/seastore/transaction_manager_test_state.h b/src/test/crimson/seastore/transaction_manager_test_state.h index 07d8061f306..32b57478e0f 100644 --- a/src/test/crimson/seastore/transaction_manager_test_state.h +++ b/src/test/crimson/seastore/transaction_manager_test_state.h @@ -86,8 +86,7 @@ auto get_transaction_manager( std::move(segment_cleaner), std::move(journal), std::move(cache), - std::move(lba_manager), - perf); + std::move(lba_manager)); return ret; }