]> 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 16:31:24 +0000 (19:31 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 0504b9554998005307647744ba82ffbe9ad8c703)

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

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

index d1869cc00318039bdb76dbb25ed1730f922d1aea..d4c6a8e908dd496fec8c39dfc142626548434745 100644 (file)
@@ -1097,6 +1097,7 @@ OPTION(bluestore_log_collection_list_age, OPT_DOUBLE)
 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 df16c9457f746e266931284b22c9dae46d015099..c3ce70ecf8608b14bc21872db9e84dd8685b4e4c 100644 (file)
@@ -5019,6 +5019,14 @@ std::vector<Option> get_global_options() {
     .set_default(64_M)
     .set_description("Maximum RAM hybrid allocator should use before enabling bitmap supplement"),
 
+    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 82639d8832aa498160e138f3bd83c144f240f679..360a4e302805b6cc1dd207637cec527c7d06fb72 100644 (file)
@@ -11292,7 +11292,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()) ||
@@ -11300,7 +11318,10 @@ void BlueStore::_kv_sync_thread()
       if (kv_stop)
        break;
       dout(20) << __func__ << " sleep" << dendl;
+      auto t = mono_clock::now();
       kv_cond.wait(l);
+      twait += mono_clock::now() - t;
+
       dout(20) << __func__ << " wake" << dendl;
     } else {
       deque<TransContext*> kv_submitting;
@@ -11396,6 +11417,7 @@ void BlueStore::_kv_sync_thread()
          txc->log_state_latency(logger, l_bluestore_state_kv_queued_lat);
          int r = cct->_conf->bluestore_debug_omit_kv_commit ? 0 : db->submit_transaction(txc->t);
          ceph_assert(r == 0);
+         ++kv_submitted;
          txc->state = TransContext::STATE_KV_SUBMITTED;
          _txc_applied_kv(txc);
          --txc->osr->kv_committing_serially;