From 550ef509ed769f307a23e32ed3c5d35d37cf3199 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 22 Oct 2012 11:09:18 -0700 Subject: [PATCH] Finisher: add perf counter for queue len Signed-off-by: Samuel Just --- src/common/Finisher.cc | 2 ++ src/common/Finisher.h | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/common/Finisher.cc b/src/common/Finisher.cc index be4bba5f11dd7..c2029f2d668d0 100644 --- a/src/common/Finisher.cc +++ b/src/common/Finisher.cc @@ -62,6 +62,8 @@ void *Finisher::finisher_thread_entry() delete c; ls_rval.pop_front(); } + if (logger) + logger->dec(l_finisher_queue_len); } ldout(cct, 10) << "finisher_thread done with " << ls << dendl; ls.clear(); diff --git a/src/common/Finisher.h b/src/common/Finisher.h index f727968b24921..eb2ac243c9933 100644 --- a/src/common/Finisher.h +++ b/src/common/Finisher.h @@ -19,9 +19,16 @@ #include "common/Mutex.h" #include "common/Cond.h" #include "common/Thread.h" +#include "common/perf_counters.h" class CephContext; +enum { + l_finisher_first = 997082, + l_finisher_queue_len, + l_finisher_last +}; + class Finisher { CephContext *cct; Mutex finisher_lock; @@ -29,6 +36,7 @@ class Finisher { bool finisher_stop, finisher_running; vector finisher_queue; list > finisher_queue_rval; + PerfCounters *logger; void *finisher_thread_entry(); @@ -48,6 +56,8 @@ class Finisher { finisher_queue.push_back(c); finisher_cond.Signal(); finisher_lock.Unlock(); + if (logger) + logger->inc(l_finisher_queue_len); } void queue(vector& ls) { finisher_lock.Lock(); @@ -55,6 +65,8 @@ class Finisher { finisher_cond.Signal(); finisher_lock.Unlock(); ls.clear(); + if (logger) + logger->inc(l_finisher_queue_len); } void queue(deque& ls) { finisher_lock.Lock(); @@ -62,6 +74,8 @@ class Finisher { finisher_cond.Signal(); finisher_lock.Unlock(); ls.clear(); + if (logger) + logger->inc(l_finisher_queue_len); } void start(); @@ -69,8 +83,30 @@ class Finisher { void wait_for_empty(); - Finisher(CephContext *cct_) : cct(cct_), finisher_lock("Finisher::finisher_lock"), - finisher_stop(false), finisher_running(false), finisher_thread(this) {} + Finisher(CephContext *cct_) : + cct(cct_), finisher_lock("Finisher::finisher_lock"), + finisher_stop(false), finisher_running(false), + logger(0), + finisher_thread(this) {} + Finisher(CephContext *cct_, string name) : + cct(cct_), finisher_lock("Finisher::finisher_lock"), + finisher_stop(false), finisher_running(false), + logger(0), + finisher_thread(this) { + PerfCountersBuilder b(cct, string("finisher-") + name, + l_finisher_first, l_finisher_last); + b.add_fl_avg(l_finisher_queue_len, "queue_len"); + logger = b.create_perf_counters(); + cct->get_perfcounters_collection()->add(logger); + logger->set(l_finisher_queue_len, 0); + } + + ~Finisher() { + if (logger && cct) { + cct->get_perfcounters_collection()->remove(logger); + delete logger; + } + } }; class C_OnFinisher : public Context { -- 2.39.5