The new config option "osd_mclock_force_run_benchmark_on_init" is
introduced to allow a user to force run the OSD benchmark test on every
OSD boot-up even if the historical data about the OSD's iops capacity is
available on the MON config store. The 'force_run_benchmark' flag is set
to the value indicated by the new config option.
By default this new config option is set to false.
The utility of this option is to help refresh the OSD iops capacity
when the underlying device's performance characteristics have changed
significantly. In such cases, the OSD can be restarted with this option
enabled temporarily. Once the new iops capacity is updated to the MON
store, this option can be removed from the OSD's start-up config.
Fixes: https://tracker.ceph.com/issues/51464
Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
(cherry picked from commit
8725a1088098aa6f389b87f8db0989693d869c1b)
Conflicts:
src/common/options/osd.yaml.in
- Removed non-existent file: src/common/options/osd.yaml.in since the
switch to yaml for config options is not available in pacific yet.
- Added new config option "osd_mclock_osd_mclock_force_run_benchmark_on_init"
to options.cc.
.set_long_description("This option specifies the max OSD capacity in iops per OSD. Helps in QoS calculations when enabling a dmclock profile. Only considered for osd_op_queue = mclock_scheduler")
.set_flag(Option::FLAG_RUNTIME),
+ Option("osd_mclock_force_run_benchmark_on_init", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+ .set_default(false)
+ .set_description("Force run the OSD benchmark on OSD initialization/boot-up")
+ .set_long_description("This option specifies whether the OSD benchmark must be run during the OSD boot-up sequence even if historical data about the OSD iops capacity is available in the MON config store. Enable this to refresh the OSD iops capacity if the underlying device's performance characteristics have changed significantly. Only considered for osd_op_queue = mclock_scheduler.")
+ .set_flag(Option::FLAG_STARTUP)
+ .add_see_also("osd_mclock_max_capacity_iops_hdd")
+ .add_see_also("osd_mclock_max_capacity_iops_ssd"),
+
Option("osd_mclock_profile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
.set_default("high_client_ops")
.set_enum_allowed( { "balanced", "high_recovery_ops", "high_client_ops", "custom" } )
// osd bench test. This is later used to setup mclock.
if (cct->_conf.get_val<std::string>("osd_op_queue") == "mclock_scheduler") {
std::string max_capacity_iops_config;
- bool force_run_benchmark = false;
+ bool force_run_benchmark =
+ cct->_conf.get_val<bool>("osd_mclock_force_run_benchmark_on_init");
if (store_is_rotational) {
max_capacity_iops_config = "osd_mclock_max_capacity_iops_hdd";