// Override a few options if mclock scheduler is enabled.
maybe_override_sleep_options_for_qos();
+ maybe_override_cost_for_qos();
maybe_override_options_for_qos();
maybe_override_max_osd_capacity_for_qos();
changed.count("osd_recovery_sleep_hybrid")) {
maybe_override_sleep_options_for_qos();
}
+ if (changed.count("osd_pg_delete_cost")) {
+ maybe_override_cost_for_qos();
+ }
if (changed.count("osd_min_recovery_priority")) {
service.local_reserver.set_min_priority(cct->_conf->osd_min_recovery_priority);
service.remote_reserver.set_min_priority(cct->_conf->osd_min_recovery_priority);
}
}
+void OSD::maybe_override_cost_for_qos()
+{
+ // If the scheduler enabled is mclock, override the default PG deletion cost
+ // so that mclock can meet the QoS goals.
+ if (cct->_conf.get_val<std::string>("osd_op_queue") == "mclock_scheduler" &&
+ !unsupported_objstore_for_qos()) {
+ uint64_t pg_delete_cost = 15728640;
+ cct->_conf.set_val("osd_pg_delete_cost", std::to_string(pg_delete_cost));
+ }
+}
+
/**
* A context for receiving status from a background mon command to set
* a config option and optionally apply the changes on each op shard.
void maybe_override_sleep_options_for_qos();
bool maybe_override_options_for_qos(
const std::set<std::string> *changed = nullptr);
+ void maybe_override_cost_for_qos();
int run_osd_bench_test(int64_t count,
int64_t bsize,
int64_t osize,