From d314003d88cf4a21015db78e828319357f09e8e1 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Wed, 1 Feb 2023 15:01:37 -0500 Subject: [PATCH] mds: track larger log events in perf dump Fixes: https://tracker.ceph.com/issues/58550 Signed-off-by: Patrick Donnelly --- src/common/options/mds.yaml.in | 7 +++++++ src/mds/MDLog.cc | 10 ++++++++++ src/mds/MDLog.h | 2 ++ src/mds/MDSRank.cc | 1 + 4 files changed, 20 insertions(+) diff --git a/src/common/options/mds.yaml.in b/src/common/options/mds.yaml.in index 8b3a07302bb..3214970ce02 100644 --- a/src/common/options/mds.yaml.in +++ b/src/common/options/mds.yaml.in @@ -497,6 +497,13 @@ options: default: false services: - mds +- name: mds_log_event_large_threshold + type: uint + level: advanced + default: 512_K + min: 1_K + services: + - mds - name: mds_log_skip_corrupt_events type: bool level: dev diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 33a91b53f89..fb5e25f678c 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -47,6 +47,7 @@ MDLog::MDLog(MDSRank* m) submit_thread(this) { debug_subtrees = g_conf().get_val("mds_debug_subtrees"); + event_large_threshold = g_conf().get_val("mds_log_event_large_threshold"); events_per_segment = g_conf().get_val("mds_log_events_per_segment"); pause = g_conf().get_val("mds_log_pause"); major_segment_event_ratio = g_conf().get_val("mds_log_major_segment_event_ratio"); @@ -77,6 +78,7 @@ void MDLog::create_logger() PerfCountersBuilder::PRIO_INTERESTING); plb.set_prio_default(PerfCountersBuilder::PRIO_USEFUL); + plb.add_u64(l_mdl_evlrg, "evlrg", "Large events"); plb.add_u64(l_mdl_evexg, "evexg", "Expiring events"); plb.add_u64(l_mdl_evexd, "evexd", "Current expired events"); plb.add_u64(l_mdl_segexg, "segexg", "Expiring segments"); @@ -424,6 +426,11 @@ void MDLog::_submit_thread() ls->offset = write_pos; } + if (bl.length() >= event_large_threshold.load()) { + dout(5) << "large event detected!" << dendl; + logger->inc(l_mdl_evlrg); + } + dout(5) << "_submit_thread " << write_pos << "~" << bl.length() << " : " << *le << dendl; @@ -1530,6 +1537,9 @@ void MDLog::handle_conf_change(const std::set& changed, const MDSMa if (changed.count("mds_debug_subtrees")) { debug_subtrees = g_conf().get_val("mds_debug_subtrees"); } + if (changed.count("mds_log_event_large_threshold")) { + event_large_threshold = g_conf().get_val("mds_log_event_large_threshold"); + } if (changed.count("mds_log_events_per_segment")) { events_per_segment = g_conf().get_val("mds_log_events_per_segment"); } diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index 3ec1492f3a6..43817de5268 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -19,6 +19,7 @@ enum { l_mdl_first = 5000, + l_mdl_evlrg, l_mdl_evadd, l_mdl_evex, l_mdl_evtrm, @@ -287,6 +288,7 @@ private: void write_head(MDSContext *onfinish); bool debug_subtrees; + std::atomic_uint64_t event_large_threshold; // accessed by submit thread uint64_t events_per_segment; uint64_t major_segment_event_ratio; int64_t max_events; diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 74615cca2b8..da681e735a3 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -3820,6 +3820,7 @@ const char** MDSRankDispatcher::get_tracked_conf_keys() const "mds_inject_journal_corrupt_dentry_first", "mds_inject_migrator_session_race", "mds_inject_rename_corrupt_dentry_first", + "mds_log_event_large_threshold", "mds_log_events_per_segment", "mds_log_major_segment_event_ratio", "mds_log_max_events", -- 2.39.5