From 7752ceed3ca532e0b1c86ad6a7322dd6bc0f986d Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 25 Jan 2024 13:48:55 -0800 Subject: [PATCH] mds/MDCache: avoid using static variables in check_memory_usage We're going to add this functionality to other components, simplify this one first to match. Signed-off-by: Samuel Just Signed-off-by: Shreekara (cherry picked from commit f337bdac62cbf606082ba46893430f14d1d91077) --- src/mds/MDCache.cc | 29 +++++++++++++++++------------ src/mds/MDCache.h | 3 ++- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index dd99f861ed4..7ca60fddc9e 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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(); diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 18c848d941c..04b58bf4453 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -20,6 +20,7 @@ #include #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(); -- 2.39.5