From 9ca451a6bf2f29e75f72cbd3dbcff0bf8986e462 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 (cherry picked from commit d9073f486527ca13cdb2774745c4c63c218333ad) --- 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 3e20c45f8a107..ec5b8c2e0ad49 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -460,6 +460,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 diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f8961776fc515..d018892470007 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" @@ -1278,6 +1279,8 @@ int OSD::init() disk_tp.start(); command_tp.start(); + set_disk_tp_priority(); + // start the heartbeat heartbeat_thread.create(); @@ -7872,6 +7875,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; @@ -7894,6 +7899,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(); } @@ -7913,6 +7922,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 d670111ea0c36..e2a3c8e33f2ea 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -981,6 +981,8 @@ private: bool paused_recovery; + void set_disk_tp_priority(); + // -- sessions -- public: struct Session : public RefCountedObject { -- 2.39.5