From: Igor Fedotov Date: Wed, 9 Nov 2022 14:36:07 +0000 (+0300) Subject: os/bluestore: new BlueFS perf counters on compaction. X-Git-Tag: v16.2.14~23^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0724809dc368c3a1d9f1de8f2b671718bcdc7be;p=ceph.git os/bluestore: new BlueFS perf counters on compaction. Signed-off-by: Igor Fedotov (cherry picked from commit d4a556128e2df1a495dd7897c6a1b0c66a285aa4) --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 98eace275a2..56442d7ebec 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -295,6 +295,14 @@ void BlueFS::_init_logger() b.add_u64_counter(l_bluefs_read_prefetch_bytes, "read_prefetch_bytes", "Bytes requested in prefetch read mode", NULL, PerfCountersBuilder::PRIO_USEFUL, unit_t(UNIT_BYTES)); + b.add_time_avg (l_bluefs_compaction_lat, "compact_lat", + "Average bluefs log compaction latency", + "c__t", + PerfCountersBuilder::PRIO_INTERESTING); + b.add_time_avg (l_bluefs_compaction_lock_lat, "compact_lock_lat", + "Average lock duration while compacting bluefs log", + "c_lt", + PerfCountersBuilder::PRIO_INTERESTING); b.add_u64(l_bluefs_read_zeros_candidate, "read_zeros_candidate", "How many times bluefs read found page with all 0s"); b.add_u64(l_bluefs_read_zeros_errors, "read_zeros_errors", @@ -2358,6 +2366,7 @@ void BlueFS::_rewrite_log_and_layout_sync_LNF_LD(bool allocate_with_fallback, // Part 0. // Lock the log totally till the end of the procedure std::lock_guard ll(log.lock); + auto t0 = mono_clock::now(); File *log_file = log.writer->file.get(); bluefs_fnode_t fnode_tail; @@ -2551,6 +2560,7 @@ void BlueFS::_rewrite_log_and_layout_sync_LNF_LD(bool allocate_with_fallback, dirty.pending_release[r.bdev].insert(r.offset, r.length); } } + logger->tinc(l_bluefs_compaction_lock_lat, mono_clock::now() - t0); } /* @@ -2597,6 +2607,16 @@ void BlueFS::_compact_log_async_LD_LNF_D() //also locks FW for new_writer } // lock log's run-time structures for a while log.lock.lock(); + auto t0 = mono_clock::now(); + + // Part 1. + // Prepare current log for jumping into it. + // 1. Allocate extent + // 2. Update op to log + // 3. Jump op to log + // During that, no one else can write to log, otherwise we risk jumping backwards. + // We need to sync log, because we are injecting discontinuity, and writer is not prepared for that. + //signal _maybe_extend_log that expansion of log is temporary inacceptable bool old_forbidden = atomic_exchange(&log_forbidden_to_expand, true); ceph_assert(old_forbidden == false); @@ -2679,6 +2699,7 @@ void BlueFS::_compact_log_async_LD_LNF_D() //also locks FW for new_writer // now state is captured to compacted_meta_t, // current log can be used to write to, //ops in log will be continuation of captured state + logger->tinc(l_bluefs_compaction_lock_lat, mono_clock::now() - t0); log.lock.unlock(); // 2.2 Allocate the space required for the compacted meta transaction @@ -3734,11 +3755,13 @@ void BlueFS::_maybe_compact_log_LNF_NF_LD_D() { if (!cct->_conf->bluefs_replay_recovery_disable_compact && _should_start_compact_log_L_N()) { + auto t0 = mono_clock::now(); if (cct->_conf->bluefs_compact_log_sync) { _compact_log_sync_LNF_LD(); } else { _compact_log_async_LD_LNF_D(); } + logger->tinc(l_bluefs_compaction_lat, mono_clock::now() - t0); } } diff --git a/src/os/bluestore/BlueFS.h b/src/os/bluestore/BlueFS.h index 692d50c6c26..2d4a6871dbd 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -50,6 +50,8 @@ enum { l_bluefs_read_bytes, l_bluefs_read_prefetch_count, l_bluefs_read_prefetch_bytes, + l_bluefs_compaction_lat, + l_bluefs_compaction_lock_lat, l_bluefs_read_zeros_candidate, l_bluefs_read_zeros_errors,