From: Jianpeng Ma Date: Thu, 9 Aug 2018 15:56:06 +0000 (+0800) Subject: kv/MemDB: add perfcounter X-Git-Tag: v14.0.1~561^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2e389dbb4921274284ccb5c767c571a815e10922;p=ceph.git kv/MemDB: add perfcounter Signed-off-by: Jianpeng Ma --- diff --git a/src/kv/MemDB.cc b/src/kv/MemDB.cc index 438fe095ba3e4..dac64a45f9dd7 100644 --- a/src/kv/MemDB.cc +++ b/src/kv/MemDB.cc @@ -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(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 &keys, std::map *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; } diff --git a/src/kv/MemDB.h b/src/kv/MemDB.h index 032b2ccb8e98f..c5efe3d5c194a 100644 --- a/src/kv/MemDB.h +++ b/src/kv/MemDB.h @@ -23,6 +23,17 @@ 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, 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 }