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: v18.1.0~445^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d4a556128e2df1a495dd7897c6a1b0c66a285aa4;p=ceph.git os/bluestore: new BlueFS perf counters on compaction. Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 064b058e4f40..457dda8a2a35 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -369,6 +369,14 @@ void BlueFS::_init_logger() "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", @@ -2478,6 +2486,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; @@ -2671,6 +2680,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); } /* @@ -2717,6 +2727,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); @@ -2799,6 +2819,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 @@ -3863,11 +3884,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 eb85939eb117..458a39cf58b8 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -61,6 +61,8 @@ enum { l_bluefs_read_disk_bytes_slow, 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,