]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: allow io priority to be set for the disk_tp
authorSage Weil <sage@redhat.com>
Wed, 18 Jun 2014 18:02:58 +0000 (11:02 -0700)
committerSage Weil <sage@redhat.com>
Mon, 11 Aug 2014 15:42:20 +0000 (08:42 -0700)
The disk_tp covers scrubbing, pg deletion, and snap trimming

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

Conflicts:
src/osd/OSD.cc

(cherry picked from commit 987ad133415aa988061c95259f9412b05ce8ac7e)

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

index a7baee9e36dd6515c2051fc503ed1740452f8edb..1fd91c327d83cdded25ea11375f2d38ada52ec09 100644 (file)
@@ -407,6 +407,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_INT, -1)  // 1 = RT, 2 = BE, 3 = 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_backfill_scan_min, OPT_INT, 64)
index c46f567e4743d183b02d0d2dd97ffcb64004faad..c5d0821561ed60d4bdf0c08772512fa39eb5fc3a 100644 (file)
@@ -1242,6 +1242,8 @@ int OSD::init()
   disk_tp.start();
   command_tp.start();
 
+  set_disk_tp_priority();
+
   // start the heartbeat
   heartbeat_thread.create();
 
@@ -7258,6 +7260,8 @@ const char** OSD::get_tracked_conf_keys() const
 {
   static const char* KEYS[] = {
     "osd_max_backfills",
+    "osd_disk_thread_ioprio_class",
+    "osd_disk_thread_ioprio_priority",
     NULL
   };
   return KEYS;
@@ -7270,6 +7274,20 @@ void OSD::handle_conf_change(const struct md_config_t *conf,
     service.local_reserver.set_max(g_conf->osd_max_backfills);
     service.remote_reserver.set_max(g_conf->osd_max_backfills);
   }
+  if (changed.count("osd_disk_thread_ioprio_class") ||
+      changed.count("osd_disk_thread_ioprio_priority")) {
+    set_disk_tp_priority();
+  }
+}
+
+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;
+  disk_tp.set_ioprio(cct->_conf->osd_disk_thread_ioprio_class,
+                    cct->_conf->osd_disk_thread_ioprio_priority);
 }
 
 // --------------------------------
index 8cd4c8dd51493e5e0b225f1b98dece085ddb7e91..ed309fdfb173dcccbf8ca1f8070bc74e4c148dfb 100644 (file)
@@ -738,6 +738,8 @@ private:
 
   bool paused_recovery;
 
+  void set_disk_tp_priority();
+
   // -- sessions --
 public:
   struct Session : public RefCountedObject {