From: Yingxin Cheng Date: Wed, 14 Aug 2024 05:20:30 +0000 (+0800) Subject: crimson/os/seastore: cleanup periodical reporting X-Git-Tag: v20.0.0~1251^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b9c2fb781497d785511dde1666dcdf154ee0fa92;p=ceph.git crimson/os/seastore: cleanup periodical reporting Consolidate time into a single place per SeaStore::Shard. Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index a958fbdfd028..0f440137b296 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -277,7 +277,8 @@ void ExtentPlacementManager::set_primary_device(Device *device) device_stats_t ExtentPlacementManager::get_device_stats( const writer_stats_t &journal_stats, - bool report_detail) const + bool report_detail, + double seconds) const { LOG_PREFIX(ExtentPlacementManager::get_device_stats); @@ -345,16 +346,7 @@ ExtentPlacementManager::get_device_stats( cold_stats.add(cold_writer_stats.back()); } - auto now = seastar::lowres_clock::now(); - if (last_tp == seastar::lowres_clock::time_point::min()) { - last_tp = now; - return {}; - } - std::chrono::duration duration_d = now - last_tp; - double seconds = duration_d.count(); - last_tp = now; - - if (report_detail) { + if (report_detail && seconds != 0) { std::ostringstream oss; auto report_writer_stats = [seconds, &oss]( const char* name, diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index 14047d865084..9440c462d255 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -303,7 +303,8 @@ public: device_stats_t get_device_stats( const writer_stats_t &journal_stats, - bool report_detail) const; + bool report_detail, + double seconds) const; using mount_ertr = crimson::errorator< crimson::ct_error::input_output_error>; @@ -1098,9 +1099,6 @@ private: SegmentSeqAllocatorRef ool_segment_seq_allocator; extent_len_t max_data_allocation_size = 0; - mutable seastar::lowres_clock::time_point last_tp = - seastar::lowres_clock::time_point::min(); - friend class ::transaction_manager_test_t; }; diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index f0243bdb853b..6df05eba02f5 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -592,14 +592,16 @@ seastar::future<> SeaStore::report_stats() shard_io_stats.resize(seastar::smp::count); return shard_stores.invoke_on_all([this](const Shard &local_store) { bool report_detail = false; + double seconds = 0; if (seastar::this_shard_id() == 0) { // avoid too verbose logs, only report detail in a particular shard report_detail = true; + seconds = local_store.reset_report_interval(); } shard_device_stats[seastar::this_shard_id()] = - local_store.get_device_stats(report_detail); + local_store.get_device_stats(report_detail, seconds); shard_io_stats[seastar::this_shard_id()] = - local_store.get_io_stats(report_detail); + local_store.get_io_stats(report_detail, seconds); }).then([this] { LOG_PREFIX(SeaStore); auto now = seastar::lowres_clock::now(); @@ -2530,27 +2532,33 @@ void SeaStore::Shard::init_managers() *transaction_manager); } -device_stats_t SeaStore::Shard::get_device_stats(bool report_detail) const -{ - return transaction_manager->get_device_stats(report_detail); -} - -shard_stats_t SeaStore::Shard::get_io_stats(bool report_detail) const +double SeaStore::Shard::reset_report_interval() const { + double seconds; auto now = seastar::lowres_clock::now(); if (last_tp == seastar::lowres_clock::time_point::min()) { - last_tp = now; - last_shard_stats = shard_stats; - return {}; + seconds = 0; + } else { + std::chrono::duration duration_d = now - last_tp; + seconds = duration_d.count(); } - std::chrono::duration duration_d = now - last_tp; - double seconds = duration_d.count(); last_tp = now; + return seconds; +} +device_stats_t SeaStore::Shard::get_device_stats( + bool report_detail, double seconds) const +{ + return transaction_manager->get_device_stats(report_detail, seconds); +} + +shard_stats_t SeaStore::Shard::get_io_stats( + bool report_detail, double seconds) const +{ shard_stats_t ret = shard_stats; ret.minus(last_shard_stats); - last_shard_stats = shard_stats; - if (report_detail) { + + if (report_detail && seconds != 0) { LOG_PREFIX(SeaStore::get_io_stats); auto calc_conflicts = [](uint64_t ios, uint64_t repeats) { return (double)(repeats-ios)/ios; @@ -2586,6 +2594,8 @@ shard_stats_t SeaStore::Shard::get_io_stats(bool report_detail) const ret.pending_bg_num, ret.pending_flush_num); } + + last_shard_stats = shard_stats; return ret; } diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index 16c0f6185a99..11b3f88e0aa3 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -204,9 +204,11 @@ public: void init_managers(); - device_stats_t get_device_stats(bool report_detail) const; + double reset_report_interval() const; - shard_stats_t get_io_stats(bool report_detail) const; + device_stats_t get_device_stats(bool report_detail, double seconds) const; + + shard_stats_t get_io_stats(bool report_detail, double seconds) const; private: struct internal_context_t { diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 0796d7b18cb8..864bbd687267 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -80,9 +80,10 @@ public: using close_ertr = base_ertr; close_ertr::future<> close(); - device_stats_t get_device_stats(bool report_detail) const { + device_stats_t get_device_stats( + bool report_detail, double seconds) const { writer_stats_t journal_stats = journal->get_writer_stats(); - return epm->get_device_stats(journal_stats, report_detail); + return epm->get_device_stats(journal_stats, report_detail, seconds); } /// Resets transaction