OPTION(osd_op_pq_max_tokens_per_priority, OPT_U64)
OPTION(osd_op_pq_min_cost, OPT_U64)
-OPTION(osd_disk_threads, OPT_INT)
-OPTION(osd_disk_thread_ioprio_class, OPT_STR) // rt realtime be best effort idle
-OPTION(osd_disk_thread_ioprio_priority, OPT_INT) // 0-7
OPTION(osd_recover_clone_overlap, OPT_BOOL) // preserve clone_overlap during recovery/migration
OPTION(osd_op_num_threads_per_shard, OPT_INT)
OPTION(osd_op_num_threads_per_shard_hdd, OPT_INT)
OPTION(osd_backfill_scan_max, OPT_INT)
OPTION(osd_op_thread_timeout, OPT_INT)
OPTION(osd_op_thread_suicide_timeout, OPT_INT)
-OPTION(osd_recovery_thread_timeout, OPT_INT)
-OPTION(osd_recovery_thread_suicide_timeout, OPT_INT)
OPTION(osd_recovery_sleep, OPT_FLOAT) // seconds to sleep between recovery ops
OPTION(osd_recovery_sleep_hdd, OPT_FLOAT)
OPTION(osd_recovery_sleep_ssd, OPT_FLOAT)
.set_default(1)
.set_description(""),
- Option("osd_disk_thread_ioprio_class", Option::TYPE_STR, Option::LEVEL_ADVANCED)
- .set_default("")
- .set_description(""),
-
- Option("osd_disk_thread_ioprio_priority", Option::TYPE_INT, Option::LEVEL_ADVANCED)
- .set_default(-1)
- .set_description(""),
-
Option("osd_recover_clone_overlap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
.set_default(true)
.set_description(""),
.set_default(150)
.set_description(""),
- Option("osd_recovery_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
- .set_default(30)
- .set_description(""),
-
- Option("osd_recovery_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
- .set_default(300)
- .set_description(""),
-
Option("osd_recovery_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
.set_default(0)
.set_description("Time in seconds to sleep before next recovery or backfill op"),
logger(osd->logger),
recoverystate_perf(osd->recoverystate_perf),
monc(osd->monc),
- recovery_gen_wq("recovery_gen_wq", cct->_conf->osd_recovery_thread_timeout,
- &osd->disk_tp),
class_handler(osd->class_handler),
osd_max_object_size(*cct->_conf, "osd_max_object_size"),
osd_skip_data_digest(*cct->_conf, "osd_skip_data_digest"),
osd_compat(get_osd_compat_set()),
osd_op_tp(cct, "OSD::osd_op_tp", "tp_osd_tp",
get_num_op_threads()),
- disk_tp(cct, "OSD::disk_tp", "tp_osd_disk", cct->_conf->osd_disk_threads, "osd_disk_threads"),
command_tp(cct, "OSD::command_tp", "tp_osd_cmd", 1),
session_waiting_lock("OSD::session_waiting_lock"),
osdmap_subscribe_lock("OSD::osdmap_subscribe_lock"),
update_log_config();
osd_op_tp.start();
- disk_tp.start();
command_tp.start();
- set_disk_tp_priority();
-
// start the heartbeat
heartbeat_thread.create("osd_srv_heartbt");
command_tp.stop();
dout(10) << "command tp stopped" << dendl;
- disk_tp.drain();
- disk_tp.stop();
- dout(10) << "disk tp paused (new)" << dendl;
-
dout(10) << "stopping agent" << dendl;
service.agent_stop();
if (changed.count("osd_enable_op_tracker")) {
op_tracker.set_tracking(cct->_conf->osd_enable_op_tracker);
}
- if (changed.count("osd_disk_thread_ioprio_class") ||
- changed.count("osd_disk_thread_ioprio_priority")) {
- set_disk_tp_priority();
- }
if (changed.count("osd_map_cache_size")) {
service.map_cache.set_size(cct->_conf->osd_map_cache_size);
service.map_bl_cache.set_size(cct->_conf->osd_map_cache_size);
}
}
-void OSD::set_disk_tp_priority()
-{
- dout(10) << __func__
- << " class " << cct->_conf->osd_disk_thread_ioprio_class
- << " priority " << cct->_conf->osd_disk_thread_ioprio_priority
- << dendl;
- if (cct->_conf->osd_disk_thread_ioprio_class.empty() ||
- cct->_conf->osd_disk_thread_ioprio_priority < 0)
- return;
- int cls =
- ceph_ioprio_string_to_class(cct->_conf->osd_disk_thread_ioprio_class);
- if (cls < 0)
- derr << __func__ << cpp_strerror(cls) << ": "
- << "osd_disk_thread_ioprio_class is " << cct->_conf->osd_disk_thread_ioprio_class
- << " but only the following values are allowed: idle, be or rt" << dendl;
- else
- disk_tp.set_ioprio(cls, cct->_conf->osd_disk_thread_ioprio_priority);
-}
-
// --------------------------------
void OSD::get_latest_osdmap()