]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: track kv utilization in kv_sync_thread
authorIgor Fedotov <ifedotov@suse.com>
Fri, 14 Jun 2019 11:04:33 +0000 (14:04 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Mon, 7 Dec 2020 14:14:47 +0000 (17:14 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 0504b9554998005307647744ba82ffbe9ad8c703)

 Conflicts:
src/common/options.cc
src/os/bluestore/BlueStore.cc
 trivial

src/common/legacy_config_opts.h
src/common/options.cc
src/os/bluestore/BlueStore.cc

index e59913b37bfe3018492a3c8c5161553af77e63dd..deedbd94294bf53e05f8f4ad98ece918ddfbbc84 100644 (file)
@@ -1062,6 +1062,7 @@ OPTION(bluestore_debug_enforce_settings, OPT_STR)
 OPTION(bluestore_volume_selection_policy, OPT_STR)
 OPTION(bluestore_volume_selection_reserved_factor, OPT_DOUBLE)
 OPTION(bluestore_volume_selection_reserved, OPT_INT)
+OPTION(bluestore_kv_sync_util_logging_s, OPT_DOUBLE)
 
 OPTION(kstore_max_ops, OPT_U64)
 OPTION(kstore_max_bytes, OPT_U64)
index e79be858e95e20998ff159619220feca53c1dfeb..90b36894c8ca876db058c51e1242e9528b5d8071 100644 (file)
@@ -4674,6 +4674,22 @@ std::vector<Option> get_global_options() {
     .set_default(false)
     .set_description("Enables Linux io_uring API instead of libaio"),
 
+    Option("bdev_ioring_hipri", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+    .set_default(false)
+    .set_description("Enables Linux io_uring API Use polled IO completions"),
+
+    Option("bdev_ioring_sqthread_poll", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+    .set_default(false)
+    .set_description("Enables Linux io_uring API Offload submission/completion to kernel thread"),
+
+    Option("bluestore_kv_sync_util_logging_s", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    .set_default(10.0)
+    .set_flag(Option::FLAG_RUNTIME)
+    .set_description("KV sync thread utilization logging period")
+    .set_long_description("How often (in seconds) to print KV sync thread utilization, "
+      "not logged when set to 0 or when utilization is 0%"),
+
+
     // -----------------------------------------
     // kstore
 
index 9e33c9f1db0fc45805aa37244023b4c12695df33..2f35df8c27e6c2762542c48f61dc598e3c293063 100644 (file)
@@ -12096,7 +12096,25 @@ void BlueStore::_kv_sync_thread()
   ceph_assert(!kv_sync_started);
   kv_sync_started = true;
   kv_cond.notify_all();
+
+  auto t0 = mono_clock::now();
+  timespan twait = ceph::make_timespan(0);
+  size_t kv_submitted = 0;
+
   while (true) {
+    auto period = cct->_conf->bluestore_kv_sync_util_logging_s;
+    auto observation_period =
+      ceph::make_timespan(period);
+    auto elapsed = mono_clock::now() - t0;
+    if (period && elapsed >= observation_period) {
+      dout(5) << __func__ << " utilization: idle "
+             << twait << " of " << elapsed
+             << ", submitted: " << kv_submitted
+             <<dendl;
+      t0 = mono_clock::now();
+      twait = ceph::make_timespan(0);
+      kv_submitted = 0;
+    }
     ceph_assert(kv_committing.empty());
     if (kv_queue.empty() &&
        ((deferred_done_queue.empty() && deferred_stable_queue.empty()) ||
@@ -12104,8 +12122,11 @@ void BlueStore::_kv_sync_thread()
       if (kv_stop)
        break;
       dout(20) << __func__ << " sleep" << dendl;
+      auto t = mono_clock::now();
       kv_sync_in_progress = false;
       kv_cond.wait(l);
+      twait += mono_clock::now() - t;
+
       dout(20) << __func__ << " wake" << dendl;
     } else {
       deque<TransContext*> kv_submitting;
@@ -12199,6 +12220,7 @@ void BlueStore::_kv_sync_thread()
       for (auto txc : kv_committing) {
        throttle.log_state_latency(*txc, logger, l_bluestore_state_kv_queued_lat);
        if (txc->state == TransContext::STATE_KV_QUEUED) {
+         ++kv_submitted;
          _txc_apply_kv(txc, false);
          --txc->osr->kv_committing_serially;
        } else {