#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"
}
}
-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);
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());
}
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;
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();
#include <thread>
#include "common/DecayCounter.h"
+#include "common/MemoryModel.h"
#include "include/common_fwd.h"
#include "include/types.h"
#include "include/filepath.h"
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();