From: Sage Weil Date: Sun, 8 Jun 2014 15:56:26 +0000 (-0700) Subject: mon: gather perf stats on session adds, removes, counts X-Git-Tag: v0.83~104^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8f36d96fb9afc52e231c694164c96d5c2b9c2c5b;p=ceph.git mon: gather perf stats on session adds, removes, counts I found myself wanting to know this on a running cluster. Signed-off-by: Sage Weil --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 036c2f6712bb..5bd6c2eaab44 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -243,12 +243,6 @@ Monitor::~Monitor() } -enum { - l_mon_first = 456000, - l_mon_last, -}; - - class AdminHook : public AdminSocketHook { Monitor *mon; public: @@ -395,7 +389,10 @@ int Monitor::preinit() assert(!logger); { PerfCountersBuilder pcb(g_ceph_context, "mon", l_mon_first, l_mon_last); - // ... + pcb.add_u64(l_mon_num_sessions, "num_sessions"); + pcb.add_u64_counter(l_mon_session_add, "session_add"); + pcb.add_u64_counter(l_mon_session_rm, "session_rm"); + pcb.add_u64_counter(l_mon_session_trim, "session_trim"); logger = pcb.create_perf_counters(); cct->get_perfcounters_collection()->add(logger); } @@ -2776,6 +2773,8 @@ void Monitor::remove_session(MonSession *s) } s->con->set_priv(NULL); session_map.remove_session(s); + logger->set(l_mon_num_sessions, session_map.get_size()); + logger->inc(l_mon_session_rm); } void Monitor::remove_all_sessions() @@ -2783,7 +2782,9 @@ void Monitor::remove_all_sessions() while (!session_map.sessions.empty()) { MonSession *s = session_map.sessions.front(); remove_session(s); + logger->inc(l_mon_session_rm); } + logger->set(l_mon_num_sessions, session_map.get_size()); } void Monitor::send_command(const entity_inst_t& inst, @@ -2882,6 +2883,9 @@ bool Monitor::_ms_dispatch(Message *m) m->get_connection()->set_priv(s->get()); dout(10) << "ms_dispatch new session " << s << " for " << s->inst << dendl; + logger->set(l_mon_num_sessions, session_map.get_size()); + logger->inc(l_mon_session_add); + if (!src_is_mon) { dout(10) << "setting timeout on session" << dendl; // set an initial timeout here, so we will trim this session even if they don't @@ -3835,12 +3839,14 @@ void Monitor::tick() << " (until " << s->until << " < now " << now << ")" << dendl; messenger->mark_down(s->con); remove_session(s); + logger->inc(l_mon_session_trim); } else if (!exited_quorum.is_zero()) { if (now > (exited_quorum + 2 * g_conf->mon_lease)) { // boot the client Session because we've taken too long getting back in dout(10) << " trimming session " << s->con << " " << s->inst << " because we've been out of quorum too long" << dendl; messenger->mark_down(s->con); + logger->inc(l_mon_session_trim); remove_session(s); } } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 2fb784229538..c3ed9ce589e9 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -85,6 +85,15 @@ enum { l_cluster_last, }; +enum { + l_mon_first = 456000, + l_mon_num_sessions, + l_mon_session_add, + l_mon_session_rm, + l_mon_session_trim, + l_mon_last, +}; + class QuorumService; class PaxosService; diff --git a/src/mon/Session.h b/src/mon/Session.h index d6e0a9989911..6da8c9ba0a34 100644 --- a/src/mon/Session.h +++ b/src/mon/Session.h @@ -96,6 +96,10 @@ struct MonSessionMap { } } + unsigned get_size() const { + return sessions.size(); + } + void remove_session(MonSession *s) { assert(!s->closed); for (map::iterator p = s->sub_map.begin(); p != s->sub_map.end(); ++p) {