From 7878e384179b2bca67c0e8693c248baa636f24f1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 7 Jun 2009 14:28:49 -0700 Subject: [PATCH] mds: log memory stats to mds%d.mem --- src/mds/CDentry.h | 12 ++++++++++- src/mds/CDir.cc | 3 +++ src/mds/CDir.h | 4 ++++ src/mds/CInode.h | 4 ++++ src/mds/Capability.h | 9 ++++++++- src/mds/MDCache.cc | 19 ++++++++++++++++++ src/mds/MDCache.h | 1 + src/mds/MDS.cc | 47 ++++++++++++++++++++++++++++++++++++++++---- src/mds/MDS.h | 24 ++++++++++++++++++++-- src/mds/mdstypes.h | 4 ++++ 10 files changed, 119 insertions(+), 8 deletions(-) diff --git a/src/mds/CDentry.h b/src/mds/CDentry.h index 62e62054fd747..129330d8e9fbd 100644 --- a/src/mds/CDentry.h +++ b/src/mds/CDentry.h @@ -151,7 +151,10 @@ public: version(0), projected_version(0), xlist_dirty(this), auth_pins(0), nested_auth_pins(0), nested_anchors(0), - lock(this, CEPH_LOCK_DN, WAIT_LOCK_OFFSET) { } + lock(this, CEPH_LOCK_DN, WAIT_LOCK_OFFSET) { + g_num_dn++; + g_num_dna++; + } CDentry(const nstring& n, inodeno_t ino, unsigned char dt, snapid_t f, snapid_t l) : name(n), @@ -161,9 +164,16 @@ public: xlist_dirty(this), auth_pins(0), nested_auth_pins(0), nested_anchors(0), lock(this, CEPH_LOCK_DN, WAIT_LOCK_OFFSET) { + g_num_dn++; + g_num_dna++; linkage.remote_ino = ino; linkage.remote_d_type = dt; } + ~CDentry() { + g_num_dn--; + g_num_dns++; + } + CDir *get_dir() const { return dir; } const nstring& get_name() const { return name; } diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index d509313cccb76..9b2123bcfe2a1 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -141,6 +141,9 @@ ostream& CDir::print_db_line_prefix(ostream& out) CDir::CDir(CInode *in, frag_t fg, MDCache *mdcache, bool auth) : xlist_dirty(this), xlist_new(this) { + g_num_dir++; + g_num_dira++; + inode = in; frag = fg; this->cache = mdcache; diff --git a/src/mds/CDir.h b/src/mds/CDir.h index b5b275ff35d54..6df48ea9c65f5 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -255,6 +255,10 @@ protected: public: CDir(CInode *in, frag_t fg, MDCache *mdcache, bool auth); + ~CDir() { + g_num_dir--; + g_num_dirs++; + } diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 7e460770c0435..26ecd91684966 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -325,11 +325,15 @@ private: nestlock(this, CEPH_LOCK_INEST, WAIT_NESTLOCK_OFFSET), loner_cap(-1) { + g_num_ino++; + g_num_inoa++; memset(&inode, 0, sizeof(inode)); state = 0; if (auth) state_set(STATE_AUTH); }; ~CInode() { + g_num_ino--; + g_num_inos++; close_dirfrags(); close_snaprealm(); } diff --git a/src/mds/Capability.h b/src/mds/Capability.h index 780ce4f99b143..52776ba38205b 100644 --- a/src/mds/Capability.h +++ b/src/mds/Capability.h @@ -188,7 +188,14 @@ public: mseq(0), suppress(0), stale(false), client_follows(0), client_xattr_version(0), - session_caps_item(this), snaprealm_caps_item(this) { } + session_caps_item(this), snaprealm_caps_item(this) { + g_num_cap++; + g_num_capa++; + } + ~Capability() { + g_num_cap--; + g_num_caps++; + } ceph_seq_t get_mseq() { return mseq; } diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 6bdbcdfeb9eff..a5c07a1b7f115 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -94,6 +94,21 @@ static ostream& _prefix(MDS *mds) { return *_dout << dbeginl << "mds" << mds->get_nodeid() << ".cache "; } +long g_num_ino = 0; +long g_num_dir = 0; +long g_num_dn = 0; +long g_num_cap = 0; + +long g_num_inoa = 0; +long g_num_dira = 0; +long g_num_dna = 0; +long g_num_capa = 0; + +long g_num_inos = 0; +long g_num_dirs = 0; +long g_num_dns = 0; +long g_num_caps = 0; + MDCache::MDCache(MDS *m) { @@ -5118,6 +5133,10 @@ void MDCache::check_memory_usage() << ", " << num_caps << " caps, " << caps_per_inode << " caps per inode" << dendl; + mds->mlogger->set(l_mdm_rss, last.get_rss()); + mds->mlogger->set(l_mdm_heap, last.get_heap()); + mds->mlogger->set(l_mdm_malloc, last.malloc); + /*int size = last.get_total(); if (size > g_conf.mds_mem_max * .9) { float ratio = (float)g_conf.mds_mem_max * .9 / (float)size; diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 444b7505e34f0..eb2058ac93551 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -404,6 +404,7 @@ static const int PREDIRTY_DIR = 2; // update parent dir mtime/size static const int PREDIRTY_SHALLOW = 4; // only go to immediate parent (for easier rollback) + class MDCache { public: // my master diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 5f282ca51c15b..7c29220fe6ff6 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -121,6 +121,7 @@ MDS::MDS(const char *n, Messenger *m, MonMap *mm) : want_state = state = MDSMap::STATE_BOOT; logger = 0; + mlogger = 0; } MDS::~MDS() { @@ -144,6 +145,7 @@ MDS::~MDS() { if (objecter) { delete objecter; objecter = 0; } if (logger) { delete logger; logger = 0; } + delete mlogger; if (messenger) messenger->destroy(); @@ -153,6 +155,7 @@ MDS::~MDS() { void MDS::reopen_logger(utime_t start) { static LogType mds_logtype(l_mds_first, l_mds_last); + static LogType mdm_logtype(l_mdm_first, l_mdm_last); static bool didit = false; if (!didit) { @@ -208,8 +211,6 @@ void MDS::reopen_logger(utime_t start) mds_logtype.add_set(l_mds_popanyd, "popanyd"); mds_logtype.add_set(l_mds_popnest, "popnest"); - mds_logtype.add_set(l_mds_buf, "buf"); - mds_logtype.add_set(l_mds_sm, "sm"); mds_logtype.add_inc(l_mds_ex, "ex"); mds_logtype.add_inc(l_mds_iexp, "iexp"); @@ -222,12 +223,31 @@ void MDS::reopen_logger(utime_t start) */ mds_logtype.validate(); + + mdm_logtype.add_set(l_mdm_ino, "ino"); + mdm_logtype.add_inc(l_mdm_inoa, "ino+"); + mdm_logtype.add_inc(l_mdm_inos, "ino-"); + mdm_logtype.add_set(l_mdm_dir, "dir"); + mdm_logtype.add_inc(l_mdm_dira, "dir+"); + mdm_logtype.add_inc(l_mdm_dirs, "dir-"); + mdm_logtype.add_set(l_mdm_dn, "dn"); + mdm_logtype.add_inc(l_mdm_dna, "dn+"); + mdm_logtype.add_inc(l_mdm_dns, "dn-"); + mdm_logtype.add_set(l_mdm_cap, "cap"); + mdm_logtype.add_inc(l_mdm_capa, "cap+"); + mdm_logtype.add_inc(l_mdm_caps, "cap-"); + mdm_logtype.add_set(l_mdm_buf, "buf"); + mdm_logtype.add_set(l_mdm_rss, "rss"); + mdm_logtype.add_set(l_mdm_heap, "heap"); + mdm_logtype.add_set(l_mdm_malloc, "malloc"); + mdm_logtype.validate(); } if (whoami < 0) return; // flush+close old log - if (logger) delete logger; + delete logger; + delete mlogger; // log char name[80]; @@ -238,6 +258,9 @@ void MDS::reopen_logger(utime_t start) logger = new Logger(name, (LogType*)&mds_logtype, append); logger->set_start(start); + sprintf(name, "mds%d.mem", whoami); + mlogger = new Logger(name, (LogType*)&mdm_logtype, append); + mdlog->reopen_logger(start, append); server->reopen_logger(start, append); } @@ -409,7 +432,6 @@ void MDS::tick() logger->fset(l_mds_l, (int)load.mds_load()); logger->set(l_mds_q, messenger->get_dispatch_queue_len()); - logger->set(l_mds_buf, buffer_total_alloc.test()); logger->set(l_mds_sm, mdcache->num_subtrees()); mdcache->log_stat(); @@ -1347,7 +1369,24 @@ bool MDS::_dispatch(Message *m) } */ + if (mlogger) { + mlogger->set(l_mdm_ino, g_num_ino); + mlogger->set(l_mdm_dir, g_num_dir); + mlogger->set(l_mdm_dn, g_num_dn); + mlogger->set(l_mdm_cap, g_num_cap); + mlogger->inc(l_mdm_inoa, g_num_inoa); g_num_inoa = 0; + mlogger->inc(l_mdm_inos, g_num_inos); g_num_inos = 0; + mlogger->inc(l_mdm_dira, g_num_dira); g_num_dira = 0; + mlogger->inc(l_mdm_dirs, g_num_dirs); g_num_dirs = 0; + mlogger->inc(l_mdm_dna, g_num_dna); g_num_dna = 0; + mlogger->inc(l_mdm_dns, g_num_dns); g_num_dns = 0; + mlogger->inc(l_mdm_capa, g_num_capa); g_num_capa = 0; + mlogger->inc(l_mdm_caps, g_num_caps); g_num_caps = 0; + + mlogger->set(l_mdm_buf, buffer_total_alloc.test()); + + } // shut down? if (is_stopping()) { diff --git a/src/mds/MDS.h b/src/mds/MDS.h index afdd46d365ba7..54c36c2161bc0 100644 --- a/src/mds/MDS.h +++ b/src/mds/MDS.h @@ -66,7 +66,6 @@ enum { l_mds_q, l_mds_popanyd, l_mds_popnest, - l_mds_buf, l_mds_sm, l_mds_ex, l_mds_iexp, @@ -80,6 +79,27 @@ enum { l_mdc_last, }; +enum { + l_mdm_first = 2500, + l_mdm_ino, + l_mdm_inoa, + l_mdm_inos, + l_mdm_dir, + l_mdm_dira, + l_mdm_dirs, + l_mdm_dn, + l_mdm_dna, + l_mdm_dns, + l_mdm_cap, + l_mdm_capa, + l_mdm_caps, + l_mdm_buf, + l_mdm_rss, + l_mdm_heap, + l_mdm_malloc, + l_mdm_last, +}; + class filepath; @@ -154,7 +174,7 @@ class MDS : public Dispatcher { MDSTableClient *get_table_client(int t); MDSTableServer *get_table_server(int t); - Logger *logger; + Logger *logger, *mlogger; protected: diff --git a/src/mds/mdstypes.h b/src/mds/mdstypes.h index e83f19912a97c..3c7fb85d587ac 100644 --- a/src/mds/mdstypes.h +++ b/src/mds/mdstypes.h @@ -58,6 +58,10 @@ using namespace std; #define MDS_TRAVERSE_FAIL 4 +extern long g_num_ino, g_num_dir, g_num_dn, g_num_cap; +extern long g_num_inoa, g_num_dira, g_num_dna, g_num_capa; +extern long g_num_inos, g_num_dirs, g_num_dns, g_num_caps; + // CAPS -- 2.39.5