]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
throttle: optional non perf counter mode
authorYehuda Sadeh <yehuda@inktank.com>
Tue, 18 Dec 2012 06:12:37 +0000 (22:12 -0800)
committerYehuda Sadeh <yehuda@inktank.com>
Fri, 8 Feb 2013 00:59:32 +0000 (16:59 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/common/Throttle.cc
src/common/Throttle.h

index 82ffe7a9fc58a4c7652e07dff4172e2f15a30caa..c7da2524b9ce4979fa8cd1663783a7ac1901a7fe 100644 (file)
@@ -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();
 }
index 15964b247a919e506c9433fab72cd3ca54923abb..9490a903d4478abf893d9d0bd77e45e9cf705ddf 100644 (file)
@@ -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: