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)
.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
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()) ||
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;
for (auto txc : kv_committing) {
throttle.log_state_latency(*txc, logger, l_bluestore_state_kv_queued_lat);
if (txc->get_state() == TransContext::STATE_KV_QUEUED) {
+ ++kv_submitted;
_txc_apply_kv(txc, false);
--txc->osr->kv_committing_serially;
} else {