From: Samuel Just Date: Fri, 8 Aug 2025 16:42:50 +0000 (-0700) Subject: common/mclock_common: move config registration and tracking into MclockConfig X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4b8ca5fd1ca3929d9e14000e95b319bb4820a48e;p=ceph.git common/mclock_common: move config registration and tracking into MclockConfig mClockScheduler doesn't listen on any keys of its own, simpler to just bring it into MclockConfig. Signed-off-by: Samuel Just --- diff --git a/src/common/mclock_common.cc b/src/common/mclock_common.cc index d53e410192c..d8cb8fa6950 100644 --- a/src/common/mclock_common.cc +++ b/src/common/mclock_common.cc @@ -377,9 +377,8 @@ uint32_t MclockConfig::calc_scaled_cost(int item_cost) return std::max(cost, cost_per_io); } -void MclockConfig::mclock_handle_conf_change(const ConfigProxy& conf, - const std::set - &changed) +void MclockConfig::handle_conf_change(const ConfigProxy& conf, + const std::set &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); } diff --git a/src/common/mclock_common.h b/src/common/mclock_common.h index 7a679f2c923..0c056996338 100644 --- a/src/common/mclock_common.h +++ b/src/common/mclock_common.h @@ -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 &changed); + void handle_conf_change(const ConfigProxy& conf, + const std::set &changed) final; + std::vector 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); }; diff --git a/src/osd/scheduler/mClockScheduler.cc b/src/osd/scheduler/mClockScheduler.cc index e5dffde986c..f343aa923ea 100644 --- a/src/osd/scheduler/mClockScheduler.cc +++ b/src/osd/scheduler/mClockScheduler.cc @@ -197,38 +197,4 @@ std::string mClockScheduler::display_queues() const return out.str(); } - -std::vector 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 &changed) -{ - mclock_conf.mclock_handle_conf_change(conf, changed); -} - -mClockScheduler::~mClockScheduler() -{ - cct->_conf.remove_observer(this); -} - } diff --git a/src/osd/scheduler/mClockScheduler.h b/src/osd/scheduler/mClockScheduler.h index e94e037640a..0adf106925a 100644 --- a/src/osd/scheduler/mClockScheduler.h +++ b/src/osd/scheduler/mClockScheduler.h @@ -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("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 get_tracked_keys() const noexcept final; - void handle_conf_change(const ConfigProxy& conf, - const std::set &changed) final; - double get_cost_per_io() const { return mclock_conf.get_cost_per_io(); }