From d9073f486527ca13cdb2774745c4c63c218333ad Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 19 Jun 2014 12:34:36 -0700 Subject: [PATCH] osd: allow io priority to be set for the disk_tp The disk_tp covers scrubbing, pg deletion, and snap trimming Signed-off-by: Sage Weil --- src/common/config_opts.h | 2 ++ src/osd/OSD.cc | 20 ++++++++++++++++++++ src/osd/OSD.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 29ff66349ea6a..27cfc2cfe9dcf 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -464,6 +464,8 @@ OPTION(osd_peering_wq_batch_size, OPT_U64, 20) OPTION(osd_op_pq_max_tokens_per_priority, OPT_U64, 4194304) OPTION(osd_op_pq_min_cost, OPT_U64, 65536) OPTION(osd_disk_threads, OPT_INT, 1) +OPTION(osd_disk_thread_ioprio_class, OPT_STR, "") // rt realtime be besteffort best effort idle +OPTION(osd_disk_thread_ioprio_priority, OPT_INT, -1) // 0-7 OPTION(osd_recovery_threads, OPT_INT, 1) OPTION(osd_recover_clone_overlap, OPT_BOOL, true) // preserve clone_overlap during recovery/migration OPTION(osd_op_num_threads_per_shard, OPT_INT, 2) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index ec2b09cf8ff9a..fe85e2daff55b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -42,6 +42,7 @@ #include "common/ceph_argparse.h" #include "common/version.h" +#include "common/io_priority.h" #include "os/ObjectStore.h" @@ -1289,6 +1290,8 @@ int OSD::init() disk_tp.start(); command_tp.start(); + set_disk_tp_priority(); + // start the heartbeat heartbeat_thread.create(); @@ -8244,6 +8247,8 @@ const char** OSD::get_tracked_conf_keys() const "osd_map_cache_size", "osd_map_max_advance", "osd_pg_epoch_persisted_max_stale", + "osd_disk_thread_ioprio_class", + "osd_disk_thread_ioprio_priority", NULL }; return KEYS; @@ -8266,6 +8271,10 @@ void OSD::handle_conf_change(const struct md_config_t *conf, op_tracker.set_history_size_and_duration(cct->_conf->osd_op_history_size, cct->_conf->osd_op_history_duration); } + if (changed.count("osd_disk_thread_ioprio_class") || + changed.count("osd_disk_thread_ioprio_priority")) { + set_disk_tp_priority(); + } check_config(); } @@ -8285,6 +8294,17 @@ void OSD::check_config() } } +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; + int cls = + ceph_ioprio_string_to_class(cct->_conf->osd_disk_thread_ioprio_class); + disk_tp.set_ioprio(cls, cct->_conf->osd_disk_thread_ioprio_priority); +} + // -------------------------------- int OSD::init_op_flags(OpRequestRef op) diff --git a/src/osd/OSD.h b/src/osd/OSD.h index ac1c2e7129155..9734f2e6deca2 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1095,6 +1095,8 @@ private: bool paused_recovery; + void set_disk_tp_priority(); + // -- sessions -- public: struct Session : public RefCountedObject { -- 2.39.5