From: Yehuda Sadeh Date: Tue, 18 Dec 2012 06:12:37 +0000 (-0800) Subject: throttle: optional non perf counter mode X-Git-Tag: v0.58~126 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3383618da83a3f257601c9a502a5f66a11a013d8;p=ceph.git throttle: optional non perf counter mode Signed-off-by: Yehuda Sadeh --- diff --git a/src/common/Throttle.cc b/src/common/Throttle.cc index 82ffe7a9fc58..c7da2524b9ce 100644 --- a/src/common/Throttle.cc +++ b/src/common/Throttle.cc @@ -25,13 +25,16 @@ enum { l_throttle_last, }; -Throttle::Throttle(CephContext *cct, std::string n, int64_t m) - : cct(cct), name(n), +Throttle::Throttle(CephContext *cct, std::string n, int64_t m, bool use_perf) + : cct(cct), name(n), logger(NULL), max(m), lock("Throttle::lock") { assert(m >= 0); + if (!use_perf) + return; + PerfCountersBuilder b(cct, string("throttle-") + name, l_throttle_first, l_throttle_last); b.add_u64_counter(l_throttle_val, "val"); b.add_u64_counter(l_throttle_max, "max"); @@ -58,6 +61,9 @@ Throttle::~Throttle() cond.pop_front(); } + if (!use_perf) + return; + cct->get_perfcounters_collection()->remove(logger); delete logger; } @@ -67,7 +73,8 @@ void Throttle::_reset_max(int64_t m) assert(lock.is_locked()); if (!cond.empty()) cond.front()->SignalOne(); - logger->set(l_throttle_max, m); + if (logger) + logger->set(l_throttle_max, m); max.set((size_t)m); } @@ -90,7 +97,8 @@ bool Throttle::_wait(int64_t c) if (waited) { ldout(cct, 3) << "_wait finished waiting" << dendl; utime_t dur = ceph_clock_now(cct) - start; - logger->tinc(l_throttle_wait, dur); + if (logger) + logger->tinc(l_throttle_wait, dur); } delete cv; @@ -122,9 +130,11 @@ int64_t Throttle::take(int64_t c) Mutex::Locker l(lock); count.add(c); } - logger->inc(l_throttle_take); - logger->inc(l_throttle_take_sum, c); - logger->set(l_throttle_val, count.read()); + if (logger) { + logger->inc(l_throttle_take); + logger->inc(l_throttle_take_sum, c); + logger->set(l_throttle_val, count.read()); + } return count.read(); } @@ -142,9 +152,11 @@ bool Throttle::get(int64_t c, int64_t m) waited = _wait(c); count.add(c); } - logger->inc(l_throttle_get); - logger->inc(l_throttle_get_sum, c); - logger->set(l_throttle_val, count.read()); + if (logger) { + logger->inc(l_throttle_get); + logger->inc(l_throttle_get_sum, c); + logger->set(l_throttle_val, count.read()); + } return waited; } @@ -157,15 +169,19 @@ bool Throttle::get_or_fail(int64_t c) Mutex::Locker l(lock); if (_should_wait(c) || !cond.empty()) { ldout(cct, 10) << "get_or_fail " << c << " failed" << dendl; - logger->inc(l_throttle_get_or_fail_fail); + if (logger) { + logger->inc(l_throttle_get_or_fail_fail); + } return false; } else { ldout(cct, 10) << "get_or_fail " << c << " success (" << count.read() << " -> " << (count.read() + c) << ")" << dendl; count.add(c); - logger->inc(l_throttle_get_or_fail_success); - logger->inc(l_throttle_get); - logger->inc(l_throttle_get_sum, c); - logger->set(l_throttle_val, count.read()); + if (logger) { + logger->inc(l_throttle_get_or_fail_success); + logger->inc(l_throttle_get); + logger->inc(l_throttle_get_sum, c); + logger->set(l_throttle_val, count.read()); + } return true; } } @@ -180,9 +196,11 @@ int64_t Throttle::put(int64_t c) cond.front()->SignalOne(); assert(((int64_t)count.read()) >= c); //if count goes negative, we failed somewhere! count.sub(c); - logger->inc(l_throttle_put); - logger->inc(l_throttle_put_sum, c); - logger->set(l_throttle_val, count.read()); + if (logger) { + logger->inc(l_throttle_put); + logger->inc(l_throttle_put_sum, c); + logger->set(l_throttle_val, count.read()); + } } return count.read(); } diff --git a/src/common/Throttle.h b/src/common/Throttle.h index 15964b247a91..9490a903d447 100644 --- a/src/common/Throttle.h +++ b/src/common/Throttle.h @@ -21,7 +21,7 @@ class Throttle { list cond; public: - Throttle(CephContext *cct, std::string n, int64_t m = 0); + Throttle(CephContext *cct, std::string n, int64_t m = 0, bool use_perf = true); ~Throttle(); private: