]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add hdd, ssd and hybrid variants for osd_snap_trim_sleep
authorNeha Ojha <nojha@redhat.com>
Wed, 26 Jun 2019 01:43:05 +0000 (18:43 -0700)
committerNeha Ojha <nojha@redhat.com>
Thu, 27 Jun 2019 16:44:02 +0000 (09:44 -0700)
This is better than the earlier default, which was set to 0.

Fixes: https://tracker.ceph.com/issues/40528
Signed-off-by: Neha Ojha <nojha@redhat.com>
src/common/options.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PrimaryLogPG.h

index 8f9c899e6ee0e44e4c9cc6612af2673b7467658d..548d0c4131c18546cf9e90fa523685520966e748 100644 (file)
@@ -3256,7 +3256,19 @@ std::vector<Option> get_global_options() {
 
     Option("osd_snap_trim_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
     .set_default(0)
-    .set_description(""),
+    .set_description("Time in seconds to sleep before next snap trim"),
+
+    Option("osd_snap_trim_sleep_hdd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    .set_default(5)
+    .set_description("Time in seconds to sleep before next snap trim for HDDs"),
+
+    Option("osd_snap_trim_sleep_ssd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    .set_default(0)
+    .set_description("Time in seconds to sleep before next snap trim for SSDs"),
+
+    Option("osd_snap_trim_sleep_hybrid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    .set_default(2)
+    .set_description("Time in seconds to sleep before next snap trim when data is on HDD and journal is on SSD"),
 
     Option("osd_scrub_invalid_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(true)
index 67c0834d58758705156eaf591a8e0901b6ebd65c..d544d864e6a4cee23b9c6b45396d569610d53c81 100644 (file)
@@ -2699,6 +2699,18 @@ int OSD::get_recovery_max_active()
     return cct->_conf->osd_recovery_max_active_ssd;
 }
 
+float OSD::get_osd_snap_trim_sleep()
+{
+  float osd_snap_trim_sleep = cct->_conf.get_val<double>("osd_snap_trim_sleep");
+  if (osd_snap_trim_sleep > 0)
+    return osd_snap_trim_sleep;
+  if (!store_is_rotational && !journal_is_rotational)
+    return cct->_conf.get_val<double>("osd_snap_trim_sleep_ssd");
+  if (store_is_rotational && !journal_is_rotational)
+    return cct->_conf.get_val<double>("osd_snap_trim_sleep_hybrid");
+  return cct->_conf.get_val<double>("osd_snap_trim_sleep_hdd");
+}
+
 int OSD::init()
 {
   CompatSet initial, diff;
index 40b6a07eacd8846a369f5500e915020cb27b782f..ca16b27ff5b024aeddc42a270ce65c691b1c5712 100644 (file)
@@ -2118,6 +2118,7 @@ private:
 
   float get_osd_recovery_sleep();
   float get_osd_delete_sleep();
+  float get_osd_snap_trim_sleep();
 
   int get_recovery_max_active();
 
index 7ed859780f1277cf465b6060b69dde13e7ebd794..021ca04c4d5700e259d49a35723312ef9df5aca9 100644 (file)
@@ -1658,10 +1658,11 @@ private:
        }
       };
       auto *pg = context< SnapTrimmer >().pg;
-      if (pg->cct->_conf->osd_snap_trim_sleep > 0) {
+      float osd_snap_trim_sleep = pg->osd->osd->get_osd_snap_trim_sleep();
+      if (osd_snap_trim_sleep > 0) {
        std::lock_guard l(pg->osd->sleep_lock);
        wakeup = pg->osd->sleep_timer.add_event_after(
-         pg->cct->_conf->osd_snap_trim_sleep,
+         osd_snap_trim_sleep,
          new OnTimer{pg, pg->get_osdmap_epoch()});
       } else {
        post_event(SnapTrimTimerReady());