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");
- b.add_u64_counter(l_throttle_get, "get");
- b.add_u64_counter(l_throttle_get_sum, "get_sum");
- b.add_u64_counter(l_throttle_get_or_fail_fail, "get_or_fail_fail");
- b.add_u64_counter(l_throttle_get_or_fail_success, "get_or_fail_success");
- b.add_u64_counter(l_throttle_take, "take");
- b.add_u64_counter(l_throttle_take_sum, "take_sum");
- b.add_u64_counter(l_throttle_put, "put");
- b.add_u64_counter(l_throttle_put_sum, "put_sum");
- b.add_time_avg(l_throttle_wait, "wait");
-
- logger = b.create_perf_counters();
- cct->get_perfcounters_collection()->add(logger);
- logger->set(l_throttle_max, max.read());
+ if (cct->_conf->throttler_perf_counter) {
+ 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");
+ b.add_u64_counter(l_throttle_get, "get");
+ b.add_u64_counter(l_throttle_get_sum, "get_sum");
+ b.add_u64_counter(l_throttle_get_or_fail_fail, "get_or_fail_fail");
+ b.add_u64_counter(l_throttle_get_or_fail_success, "get_or_fail_success");
+ b.add_u64_counter(l_throttle_take, "take");
+ b.add_u64_counter(l_throttle_take_sum, "take_sum");
+ b.add_u64_counter(l_throttle_put, "put");
+ b.add_u64_counter(l_throttle_put_sum, "put_sum");
+ b.add_time_avg(l_throttle_wait, "wait");
+
+ logger = b.create_perf_counters();
+ cct->get_perfcounters_collection()->add(logger);
+ logger->set(l_throttle_max, max.read());
+ }
}
Throttle::~Throttle()
if (!use_perf)
return;
- cct->get_perfcounters_collection()->remove(logger);
- delete logger;
+ if (logger) {
+ cct->get_perfcounters_collection()->remove(logger);
+ delete logger;
+ }
}
void Throttle::_reset_max(int64_t m)
do {
if (!waited) {
ldout(cct, 2) << "_wait waiting..." << dendl;
- start = ceph_clock_now(cct);
+ if (logger)
+ start = ceph_clock_now(cct);
}
waited = true;
cv->Wait(lock);
if (waited) {
ldout(cct, 3) << "_wait finished waiting" << dendl;
- utime_t dur = ceph_clock_now(cct) - start;
- if (logger)
+ if (logger) {
+ utime_t dur = ceph_clock_now(cct) - start;
logger->tinc(l_throttle_wait, dur);
+ }
}
delete cv;