]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds/MDCache: avoid using static variables in check_memory_usage
authorSamuel Just <sjust@redhat.com>
Thu, 25 Jan 2024 21:48:55 +0000 (13:48 -0800)
committerRonen Friedman <rfriedma@redhat.com>
Tue, 18 Jun 2024 11:35:31 +0000 (06:35 -0500)
We're going to add this functionality to other components, simplify
this one first to match.

Signed-off-by: Samuel Just <sjust@redhat.com>
Signed-off-by: Shreekara <sshreeka@redhat.com>
(cherry picked from commit f337bdac62cbf606082ba46893430f14d1d91077)

src/mds/MDCache.cc
src/mds/MDCache.h

index dd99f861ed4e42f4c1a41260db4ca2d6161a9cc1..7ca60fddc9eb81e02fb1ae6a598dbd9997e6aa06 100644 (file)
@@ -46,7 +46,6 @@
 #include "msg/Message.h"
 #include "msg/Messenger.h"
 
-#include "common/MemoryModel.h"
 #include "common/errno.h"
 #include "common/perf_counters.h"
 #include "common/safe_io.h"
@@ -7813,12 +7812,10 @@ void MDCache::trim_client_leases()
   }
 }
 
-void MDCache::check_memory_usage()
+void MDCache::check_memory_usage(const MemoryModel::mem_snap_t &baseline)
 {
-  static MemoryModel mm(g_ceph_context);
-  static MemoryModel::mem_snap_t last;
-  mm.sample(&last);
-  static MemoryModel::mem_snap_t baseline = last;
+  MemoryModel mm(g_ceph_context);
+  mm.sample();
 
   // check client caps
   ceph_assert(CInode::count() == inode_map.size() + snap_inode_map.size() + num_shadow_inodes);
@@ -7827,17 +7824,17 @@ void MDCache::check_memory_usage()
     caps_per_inode = (double)Capability::count() / (double)CInode::count();
 
   dout(2) << "Memory usage: "
-          << " total " << last.get_total()
-          << ", rss " << last.get_rss()
-          << ", heap " << last.get_heap()
+          << " total " << mm.last.get_total()
+          << ", rss " << mm.last.get_rss()
+          << ", heap " << mm.last.get_heap()
           << ", baseline " << baseline.get_heap()
           << ", " << num_inodes_with_caps << " / " << CInode::count() << " inodes have caps"
           << ", " << Capability::count() << " caps, " << caps_per_inode << " caps per inode"
           << dendl;
 
   mds->update_mlogger();
-  mds->mlogger->set(l_mdm_rss, last.get_rss());
-  mds->mlogger->set(l_mdm_heap, last.get_heap());
+  mds->mlogger->set(l_mdm_rss, mm.last.get_rss());
+  mds->mlogger->set(l_mdm_heap, mm.last.get_heap());
 }
 
 
@@ -14173,6 +14170,14 @@ bool MDCache::is_ready_to_trim_cache(void)
 void MDCache::upkeep_main(void)
 {
   std::unique_lock lock(upkeep_mutex);
+
+  // get initial sample upon thread creation
+  MemoryModel::mem_snap_t baseline;
+  {
+    MemoryModel mm(g_ceph_context);
+    mm.sample(&baseline);
+  }
+
   while (!upkeep_trim_shutdown.load()) {
     auto now = clock::now();
     auto since = now-upkeep_last_trim;
@@ -14183,7 +14188,7 @@ void MDCache::upkeep_main(void)
       lock.lock();
       if (upkeep_trim_shutdown.load())
         return;
-      check_memory_usage();
+      check_memory_usage(baseline);
       if (mds->is_cache_trimmable()) {
         dout(20) << "upkeep thread trimming cache; last trim " << since << " ago" << dendl;
         bool active_with_clients = mds->is_active() || mds->is_clientreplay() || mds->is_stopping();
index 18c848d941c7623a422e296a0cad146524f729f3..04b58bf4453d5368de375277fbb62072ed7e2214 100644 (file)
@@ -20,6 +20,7 @@
 #include <thread>
 
 #include "common/DecayCounter.h"
+#include "common/MemoryModel.h"
 #include "include/common_fwd.h"
 #include "include/types.h"
 #include "include/filepath.h"
@@ -775,7 +776,7 @@ private:
   bool expire_recursive(CInode *in, expiremap& expiremap);
 
   void trim_client_leases();
-  void check_memory_usage();
+  void check_memory_usage(const MemoryModel::mem_snap_t &baseline);
 
   void shutdown_start();
   void shutdown_check();