]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: track larger log events in perf dump
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 1 Feb 2023 20:01:37 +0000 (15:01 -0500)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 1 Aug 2023 15:16:01 +0000 (11:16 -0400)
Fixes: https://tracker.ceph.com/issues/58550
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/common/options/mds.yaml.in
src/mds/MDLog.cc
src/mds/MDLog.h
src/mds/MDSRank.cc

index 8b3a07302bb5281b1dd5d634bd23810bbee32c20..3214970ce02fdb1fa9a7ff0594ae05caf099b1be 100644 (file)
@@ -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
index 33a91b53f89284fe621f7df4540c2a0a6eb7c681..fb5e25f678c568c6e26430b34ee685884a5ad736 100644 (file)
@@ -47,6 +47,7 @@ MDLog::MDLog(MDSRank* m)
     submit_thread(this)
 {
   debug_subtrees = g_conf().get_val<bool>("mds_debug_subtrees");
+  event_large_threshold = g_conf().get_val<uint64_t>("mds_log_event_large_threshold");
   events_per_segment = g_conf().get_val<uint64_t>("mds_log_events_per_segment");
   pause = g_conf().get_val<bool>("mds_log_pause");
   major_segment_event_ratio = g_conf().get_val<uint64_t>("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<std::string>& changed, const MDSMa
   if (changed.count("mds_debug_subtrees")) {
     debug_subtrees = g_conf().get_val<bool>("mds_debug_subtrees");
   }
+  if (changed.count("mds_log_event_large_threshold")) {
+    event_large_threshold = g_conf().get_val<uint64_t>("mds_log_event_large_threshold");
+  }
   if (changed.count("mds_log_events_per_segment")) {
     events_per_segment = g_conf().get_val<uint64_t>("mds_log_events_per_segment");
   }
index 3ec1492f3a6865bed39a9a2382dfd8008eef5de4..43817de5268c9c8863e2e7c192b01829b5655866 100644 (file)
@@ -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;
index 74615cca2b8b152fe3d6992176cb9fb0a6ccd7ad..da681e735a3f967ec1d7eff6a607e5bc31940622 100644 (file)
@@ -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",