]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/MemDB: add perfcounter 10305/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Thu, 9 Aug 2018 15:56:06 +0000 (23:56 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 9 Aug 2018 15:56:06 +0000 (23:56 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/kv/MemDB.cc
src/kv/MemDB.h

index 438fe095ba3e4a2b1110c22f70c6b98189555a81..dac64a45f9dd76373eb980b8c61da2b245ddf30d 100644 (file)
@@ -139,15 +139,23 @@ int MemDB::_init(bool create)
     if (r < 0) {
       r = -errno;
       if (r != -EEXIST) {
-        derr << __func__ << " mkdir failed: " << cpp_strerror(r) << dendl;
-        return r;
+       derr << __func__ << " mkdir failed: " << cpp_strerror(r) << dendl;
+       return r;
       }
-      return 0; // ignore EEXIST
+      r = 0; // ignore EEXIST
     }
   } else {
     r = _load();
   }
 
+  PerfCountersBuilder plb(g_ceph_context, "memdb", l_memdb_first, l_memdb_last);
+  plb.add_u64_counter(l_memdb_gets, "get", "Gets");
+  plb.add_u64_counter(l_memdb_txns, "submit_transaction", "Submit transactions");
+  plb.add_time_avg(l_memdb_get_latency, "get_latency", "Get latency");
+  plb.add_time_avg(l_memdb_submit_latency, "submit_latency", "Submit Latency");
+  logger = plb.create_perf_counters();
+  m_cct->get_perfcounters_collection()->add(logger);
+
   return r;
 }
 
@@ -193,10 +201,14 @@ void MemDB::close()
    * Save whatever in memory btree.
    */
   _save();
+  if (logger)
+    m_cct->get_perfcounters_collection()->remove(logger);
 }
 
 int MemDB::submit_transaction(KeyValueDB::Transaction t)
 {
+  utime_t start = ceph_clock_now();
+
   MDBTransactionImpl* mt =  static_cast<MDBTransactionImpl*>(t.get());
 
   dtrace << __func__ << " " << mt->get_ops().size() << dendl;
@@ -214,6 +226,10 @@ int MemDB::submit_transaction(KeyValueDB::Transaction t)
     }
   }
 
+  utime_t lat = ceph_clock_now() - start;
+  logger->inc(l_memdb_txns);
+  logger->tinc(l_memdb_submit_latency, lat);
+
   return 0;
 }
 
@@ -399,21 +415,37 @@ bool MemDB::_get_locked(const string &prefix, const string &k, bufferlist *out)
 int MemDB::get(const string &prefix, const std::string& key,
                  bufferlist *out)
 {
+  utime_t start = ceph_clock_now();
+  int ret;
+
   if (_get_locked(prefix, key, out)) {
-    return 0;
+    ret = 0;
+  } else {
+    ret = -ENOENT;
   }
-  return -ENOENT;
+
+  utime_t lat = ceph_clock_now() - start;
+  logger->inc(l_memdb_gets);
+  logger->tinc(l_memdb_get_latency, lat);
+
+  return ret;
 }
 
 int MemDB::get(const string &prefix, const std::set<string> &keys,
     std::map<string, bufferlist> *out)
 {
+  utime_t start = ceph_clock_now();
+
   for (const auto& i : keys) {
     bufferlist bl;
     if (_get_locked(prefix, i, &bl))
       out->insert(make_pair(i, bl));
   }
 
+  utime_t lat = ceph_clock_now() - start;
+  logger->inc(l_memdb_gets);
+  logger->tinc(l_memdb_get_latency, lat);
+
   return 0;
 }
 
index 032b2ccb8e98ffafd76aa3d3f8dad1749419df14..c5efe3d5c194a94c380228a76c5618ddaa952e8b 100644 (file)
 using std::string;
 #define KEY_DELIM '\0' 
 
+class PerfCounters;
+
+enum {
+  l_memdb_first = 34440,
+  l_memdb_gets,
+  l_memdb_txns,
+  l_memdb_get_latency,
+  l_memdb_submit_latency,
+  l_memdb_last,
+};
+
 class MemDB : public KeyValueDB
 {
   typedef std::pair<std::pair<std::string, std::string>, bufferlist> ms_op_t;
@@ -37,6 +48,7 @@ class MemDB : public KeyValueDB
   mdb_map_t m_map;
 
   CephContext *m_cct;
+  PerfCounters *logger;
   void* m_priv;
   string m_options;
   string m_db_path;
@@ -55,7 +67,7 @@ class MemDB : public KeyValueDB
 public:
   MemDB(CephContext *c, const string &path, void *p) :
     m_total_bytes(0), m_allocated_bytes(0), m_using_btree(false),
-    m_cct(c), m_priv(p), m_db_path(path), iterator_seq_no(1)
+    m_cct(c), logger(NULL), m_priv(p), m_db_path(path), iterator_seq_no(1)
   {
     //Nothing as of now
   }