]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/mclock_common: move config registration and tracking into MclockConfig
authorSamuel Just <sjust@redhat.com>
Fri, 8 Aug 2025 16:42:50 +0000 (09:42 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 2 Sep 2025 16:18:03 +0000 (16:18 +0000)
mClockScheduler doesn't listen on any keys of its own, simpler to just
bring it into MclockConfig.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/common/mclock_common.cc
src/common/mclock_common.h
src/osd/scheduler/mClockScheduler.cc
src/osd/scheduler/mClockScheduler.h

index d53e410192c418a1cd7ea65c58295fc3db3bf5c0..d8cb8fa695006939e2e4951d6f3a65f5b1fc7272 100644 (file)
@@ -377,9 +377,8 @@ uint32_t MclockConfig::calc_scaled_cost(int item_cost)
   return std::max<uint32_t>(cost, cost_per_io);
 }
 
-void MclockConfig::mclock_handle_conf_change(const ConfigProxy& conf,
-                                             const std::set<std::string>
-                                            &changed)
+void MclockConfig::handle_conf_change(const ConfigProxy& conf,
+                                     const std::set<std::string> &changed)
 {
   if (changed.count("osd_mclock_max_capacity_iops_hdd") ||
       changed.count("osd_mclock_max_capacity_iops_ssd")) {
@@ -466,4 +465,5 @@ MclockConfig::~MclockConfig()
     delete logger;
     logger = nullptr;
   }
+  cct->_conf.remove_observer(this);
 }
index 7a679f2c923f99c591c09588ad0f040552160e3b..0c056996338acb237f1756acb6eed5161e2e5f42 100644 (file)
@@ -186,7 +186,7 @@ class ClientRegistry {
       const scheduler_id_t &id) const;
 };
 
-class MclockConfig {
+class MclockConfig final : public md_config_obs_t {
 private:
   CephContext *cct;
   uint32_t num_shards;
@@ -211,7 +211,13 @@ public:
                            whoami(whoami), osd_bandwidth_cost_per_io(0.0),
                           osd_bandwidth_capacity_per_shard(0.0),
                           client_registry(creg)
-  {}
+  {
+    cct->_conf.add_observer(this);
+    set_osd_capacity_params_from_config();
+    set_config_defaults_from_profile();
+    client_registry.update_from_config(
+      cct->_conf, get_capacity_per_shard());
+  }
   #else
   MclockConfig(CephContext *cct, ClientRegistry& creg,
                MonClient *monc, uint32_t num_shards, bool is_rotational,
@@ -223,9 +229,15 @@ public:
                                         osd_bandwidth_cost_per_io(0.0),
                                         osd_bandwidth_capacity_per_shard(0.0),
                                         client_registry(creg), monc(monc)
-  {}
+  {
+    cct->_conf.add_observer(this);
+    set_osd_capacity_params_from_config();
+    set_config_defaults_from_profile();
+    client_registry.update_from_config(
+      cct->_conf, get_capacity_per_shard());
+  }
 #endif
-  ~MclockConfig();
+  ~MclockConfig() final;
   void set_config_defaults_from_profile();
   void set_osd_capacity_params_from_config();
   void init_logger();
@@ -233,7 +245,26 @@ public:
   void put_mclock_counter(scheduler_id_t id);
   double get_cost_per_io() const;
   double get_capacity_per_shard() const;
-  void mclock_handle_conf_change(const ConfigProxy& conf,
-                                 const std::set<std::string> &changed);
+  void handle_conf_change(const ConfigProxy& conf,
+                         const std::set<std::string> &changed) final;
+  std::vector<std::string> get_tracked_keys() const noexcept final {
+    using namespace std::literals;
+    return {
+      "osd_mclock_scheduler_client_res"s,
+      "osd_mclock_scheduler_client_wgt"s,
+      "osd_mclock_scheduler_client_lim"s,
+      "osd_mclock_scheduler_background_recovery_res"s,
+      "osd_mclock_scheduler_background_recovery_wgt"s,
+      "osd_mclock_scheduler_background_recovery_lim"s,
+      "osd_mclock_scheduler_background_best_effort_res"s,
+      "osd_mclock_scheduler_background_best_effort_wgt"s,
+      "osd_mclock_scheduler_background_best_effort_lim"s,
+      "osd_mclock_max_capacity_iops_hdd"s,
+      "osd_mclock_max_capacity_iops_ssd"s,
+      "osd_mclock_max_sequential_bandwidth_hdd"s,
+      "osd_mclock_max_sequential_bandwidth_ssd"s,
+      "osd_mclock_profile"s
+    };
+  }
   uint32_t calc_scaled_cost(int item_cost);
 };
index e5dffde986ca905618d3ed73206b955fb1f14031..f343aa923eaf68fa08c1d49c2af2a64973852c51 100644 (file)
@@ -197,38 +197,4 @@ std::string mClockScheduler::display_queues() const
   return out.str();
 }
 
-
-std::vector<std::string> mClockScheduler::get_tracked_keys() const noexcept
-{
-  return {
-    "osd_mclock_scheduler_client_res"s,
-    "osd_mclock_scheduler_client_wgt"s,
-    "osd_mclock_scheduler_client_lim"s,
-    "osd_mclock_scheduler_background_recovery_res"s,
-    "osd_mclock_scheduler_background_recovery_wgt"s,
-    "osd_mclock_scheduler_background_recovery_lim"s,
-    "osd_mclock_scheduler_background_best_effort_res"s,
-    "osd_mclock_scheduler_background_best_effort_wgt"s,
-    "osd_mclock_scheduler_background_best_effort_lim"s,
-    "osd_mclock_max_capacity_iops_hdd"s,
-    "osd_mclock_max_capacity_iops_ssd"s,
-    "osd_mclock_max_sequential_bandwidth_hdd"s,
-    "osd_mclock_max_sequential_bandwidth_ssd"s,
-    "osd_mclock_profile"s
-  };
-}
-
-
-void mClockScheduler::handle_conf_change(
-  const ConfigProxy& conf,
-  const std::set<std::string> &changed)
-{
-  mclock_conf.mclock_handle_conf_change(conf, changed);
-}
-
-mClockScheduler::~mClockScheduler()
-{
-  cct->_conf.remove_observer(this);
-}
-
 }
index e94e037640a6d1a2c1a46bc04806ebee138be401..0adf106925aa84f5e67ee3a4f7599842d08c70cb 100644 (file)
@@ -38,7 +38,7 @@ namespace ceph::osd::scheduler {
  *
  * TODO: explain configs
  */
-class mClockScheduler : public OpScheduler, md_config_obs_t {
+class mClockScheduler : public OpScheduler {
 
   CephContext *cct;
   const unsigned cutoff_priority;
@@ -96,13 +96,7 @@ public:
        crimson::dmclock::AtLimit::Wait,
        cct->_conf.get_val<double>("osd_mclock_scheduler_anticipation_timeout"))
   {
-    cct->_conf.add_observer(this);
     ceph_assert(num_shards > 0);
-    mclock_conf.set_osd_capacity_params_from_config();
-    mclock_conf.set_config_defaults_from_profile();
-    client_registry.update_from_config(
-      cct->_conf, mclock_conf.get_capacity_per_shard());
-
     if (init_perfcounter) {
       mclock_conf.init_logger();
     }
@@ -118,7 +112,6 @@ public:
       crimson::dmclock::standard_erase_age,
       crimson::dmclock::standard_check_time,
       monc, init_perfcounter) {}
-  ~mClockScheduler() override;
 
   /// Calculate scaled cost per item
   uint32_t calc_scaled_cost(int cost);
@@ -156,10 +149,6 @@ public:
     return op_queue_type_t::mClockScheduler;
   }
 
-  std::vector<std::string> get_tracked_keys() const noexcept final;
-  void handle_conf_change(const ConfigProxy& conf,
-                         const std::set<std::string> &changed) final;
-
   double get_cost_per_io() const {
     return mclock_conf.get_cost_per_io();
   }