diff options
author | Yehuda Sadeh <yehuda@inktank.com> | 2012-12-17 22:12:37 -0800 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2013-02-07 16:59:32 -0800 |
commit | 3383618da83a3f257601c9a502a5f66a11a013d8 (patch) | |
tree | 6e3c3d8d0c51e1de9360ac307db7e59a83bf53b9 | |
parent | 70532d198539f94067e53ef48dd7d1f5114fa27d (diff) | |
download | ceph-3383618da83a3f257601c9a502a5f66a11a013d8.tar.gz |
throttle: optional non perf counter mode
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r-- | src/common/Throttle.cc | 54 | ||||
-rw-r--r-- | src/common/Throttle.h | 2 |
2 files changed, 37 insertions, 19 deletions
diff --git a/src/common/Throttle.cc b/src/common/Throttle.cc index 82ffe7a9fc5..c7da2524b9c 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 15964b247a9..9490a903d44 100644 --- a/src/common/Throttle.h +++ b/src/common/Throttle.h @@ -21,7 +21,7 @@ class Throttle { list<Cond*> 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: |