]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: cleanup periodical reporting
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 14 Aug 2024 05:20:30 +0000 (13:20 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 15 Aug 2024 05:45:27 +0000 (13:45 +0800)
Consolidate time into a single place per SeaStore::Shard.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h
src/crimson/os/seastore/transaction_manager.h

index a958fbdfd028a0f9aca7b43fe6311fbf61db496e..0f440137b2961c3bcee91faf9da108665230e58d 100644 (file)
@@ -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<double> 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,
index 14047d8650848f1937e3af3568c8563b6e104af2..9440c462d25525777c6f4eca3e14149fce665620 100644 (file)
@@ -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;
 };
 
index f0243bdb853b88c925410e8424aa1b78db70aff0..6df05eba02f565444b9c41483007e962b15b0bf3 100644 (file)
@@ -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<double> duration_d = now - last_tp;
+    seconds = duration_d.count();
   }
-  std::chrono::duration<double> 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;
 }
 
index 16c0f6185a996da62bfe91d86cf37ab8ddc33e0c..11b3f88e0aa38f007dca6e6ca03ffd7ce64140b9 100644 (file)
@@ -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 {
index 0796d7b18cb84e23892e4e647e3cced90e339c9d..864bbd68726780ea24279bf9bc158205aee45328 100644 (file)
@@ -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