summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2012-12-17 22:12:37 -0800
committerYehuda Sadeh <yehuda@inktank.com>2013-02-07 16:59:32 -0800
commit3383618da83a3f257601c9a502a5f66a11a013d8 (patch)
tree6e3c3d8d0c51e1de9360ac307db7e59a83bf53b9
parent70532d198539f94067e53ef48dd7d1f5114fa27d (diff)
downloadceph-3383618da83a3f257601c9a502a5f66a11a013d8.tar.gz
throttle: optional non perf counter mode
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/common/Throttle.cc54
-rw-r--r--src/common/Throttle.h2
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: