From c3c1393882d4d4bf453c92edb4f0812d117d28a1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 5 May 2017 15:45:57 -0400 Subject: [PATCH] common/ceph_context: add perf counters for all mempools Report bytes and items for each mempool. Signed-off-by: Sage Weil --- src/common/ceph_context.cc | 38 ++++++++++++++++++++++++++++++++++++++ src/common/ceph_context.h | 8 ++++++++ 2 files changed, 46 insertions(+) diff --git a/src/common/ceph_context.cc b/src/common/ceph_context.cc index 1c19cd71af406..3d9ee962ca068 100644 --- a/src/common/ceph_context.cc +++ b/src/common/ceph_context.cc @@ -821,6 +821,32 @@ void CephContext::_enable_perf_counter() plb.add_u64(l_cct_unhealthy_workers, "unhealthy_workers", "Unhealthy workers"); _cct_perf = plb.create_perf_counters(); _perf_counters_collection->add(_cct_perf); + + assert(_mempool_perf_names.empty()); + assert(_mempool_perf_descriptions.empty()); + _mempool_perf_names.reserve(mempool::num_pools * 2); + _mempool_perf_descriptions.reserve(mempool::num_pools * 2); + for (unsigned i = 0; i < mempool::num_pools; ++i) { + string n = mempool::get_pool_name(mempool::pool_index_t(i)); + _mempool_perf_names.push_back(n + "_bytes"); + _mempool_perf_descriptions.push_back( + string("mempool ") + n + " total bytes"); + _mempool_perf_names.push_back(n + "_items"); + _mempool_perf_descriptions.push_back( + string("mempool ") + n + " total items"); + } + + PerfCountersBuilder plb2(this, "mempool", l_mempool_first, + l_mempool_first + 1 + 2*mempool::num_pools); + unsigned l = l_mempool_first + 1; + for (unsigned i = 0; i < mempool::num_pools; ++i) { + plb2.add_u64(l++, _mempool_perf_names[i*2].c_str(), + _mempool_perf_descriptions[i*2].c_str()); + plb2.add_u64(l++, _mempool_perf_names[i*2+1].c_str(), + _mempool_perf_descriptions[i*2+1].c_str()); + } + _mempool_perf = plb2.create_perf_counters(); + _perf_counters_collection->add(_mempool_perf); } void CephContext::_disable_perf_counter() @@ -831,6 +857,12 @@ void CephContext::_disable_perf_counter() _perf_counters_collection->remove(_cct_perf); delete _cct_perf; _cct_perf = nullptr; + + _perf_counters_collection->remove(_mempool_perf); + delete _mempool_perf; + _mempool_perf = nullptr; + _mempool_perf_names.clear(); + _mempool_perf_descriptions.clear(); } void CephContext::_refresh_perf_values() @@ -839,6 +871,12 @@ void CephContext::_refresh_perf_values() _cct_perf->set(l_cct_total_workers, _heartbeat_map->get_total_workers()); _cct_perf->set(l_cct_unhealthy_workers, _heartbeat_map->get_unhealthy_workers()); } + unsigned l = l_mempool_first + 1; + for (unsigned i = 0; i < mempool::num_pools; ++i) { + mempool::pool_t& p = mempool::get_pool(mempool::pool_index_t(i)); + _mempool_perf->set(l++, p.allocated_bytes()); + _mempool_perf->set(l++, p.allocated_items()); + } } AdminSocket *CephContext::get_admin_socket() diff --git a/src/common/ceph_context.h b/src/common/ceph_context.h index 3d2fd9949a27f..c49072f15a293 100644 --- a/src/common/ceph_context.h +++ b/src/common/ceph_context.h @@ -317,7 +317,15 @@ private: l_cct_unhealthy_workers, l_cct_last }; + enum { + l_mempool_first = 873222, + l_mempool_bytes, + l_mempool_items, + l_mempool_last + }; PerfCounters *_cct_perf = nullptr; + PerfCounters* _mempool_perf = nullptr; + std::vector _mempool_perf_names, _mempool_perf_descriptions; /** * Enable the performance counters. -- 2.39.5