]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: allow io priority to be set for the disk_tp 2203/head
authorSage Weil <sage@redhat.com>
Thu, 19 Jun 2014 19:34:36 +0000 (12:34 -0700)
committerSage Weil <sage@redhat.com>
Thu, 14 Aug 2014 00:21:18 +0000 (17:21 -0700)
The disk_tp covers scrubbing, pg deletion, and snap trimming

Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit d9073f486527ca13cdb2774745c4c63c218333ad)

src/common/config_opts.h
src/osd/OSD.cc
src/osd/OSD.h

index 3e20c45f8a107c0a1f51e47a54304f6b8f9e5bf9..ec5b8c2e0ad493a4cd402d96cd3ea14fa49d63ff 100644 (file)
@@ -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
 
index f8961776fc515b2deac20d4bd2779bee4e493ea1..d018892470007236e872ae3e6aad488b586892f8 100644 (file)
@@ -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)
index d670111ea0c3663d7021ea4ebe5b422ffd2bc6d4..e2a3c8e33f2ea31de230ac536bc02508d5c14bce 100644 (file)
@@ -981,6 +981,8 @@ private:
 
   bool paused_recovery;
 
+  void set_disk_tp_priority();
+
   // -- sessions --
 public:
   struct Session : public RefCountedObject {