]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: add latency perf counter for finisher
authorXinze Chi <xinze@xsky.com>
Sun, 4 Oct 2015 23:44:14 +0000 (07:44 +0800)
committerXinze Chi <xinze@xsky.com>
Mon, 5 Oct 2015 00:56:24 +0000 (08:56 +0800)
Signed-off-by: Xinze Chi <xinze@xsky.com>
src/common/Finisher.cc
src/common/Finisher.h

index 7ebbe05622bcb5c1285fcd627ccb0b68940c56f3..9b39dc888e3ce8ca661b688ad3ecfeff019925e1 100644 (file)
@@ -44,9 +44,12 @@ void *Finisher::finisher_thread_entry()
   finisher_lock.Lock();
   ldout(cct, 10) << "finisher_thread start" << dendl;
 
+  utime_t start;
   while (!finisher_stop) {
     /// Every time we are woken up, we process the queue until it is empty.
     while (!finisher_queue.empty()) {
+      if (logger)
+        start = ceph_clock_now(cct);
       // To reduce lock contention, we swap out the queue to process.
       // This way other threads can submit new contexts to complete while we are working.
       vector<Context*> ls;
@@ -73,8 +76,10 @@ void *Finisher::finisher_thread_entry()
          c->complete(ls_rval.front().second);
          ls_rval.pop_front();
        }
-       if (logger)
+       if (logger) {
          logger->dec(l_finisher_queue_len);
+          logger->tinc(l_finisher_complete_lat, ceph_clock_now(cct) - start);
+        }
       }
       ldout(cct, 10) << "finisher_thread done with " << ls << dendl;
       ls.clear();
index 876744599031614d317f46ffba643a5b699393ed..95db977a0ea2d460a36282cedf188f7cdf35221f 100644 (file)
@@ -27,6 +27,7 @@ class CephContext;
 enum {
   l_finisher_first = 997082,
   l_finisher_queue_len,
+  l_finisher_complete_lat,
   l_finisher_last
 };
 
@@ -146,9 +147,11 @@ class Finisher {
     PerfCountersBuilder b(cct, string("finisher-") + name,
                          l_finisher_first, l_finisher_last);
     b.add_u64(l_finisher_queue_len, "queue_len");
+    b.add_time_avg(l_finisher_complete_lat, "complete_latency");
     logger = b.create_perf_counters();
     cct->get_perfcounters_collection()->add(logger);
     logger->set(l_finisher_queue_len, 0);
+    logger->set(l_finisher_complete_lat, 0);
   }
 
   ~Finisher() {