X-Git-Url: https://git.proxmox.com/?p=ceph.git;a=blobdiff_plain;f=ceph%2Fsrc%2Fmsg%2Fasync%2FStack.h;fp=ceph%2Fsrc%2Fmsg%2Fasync%2FStack.h;h=6739968f4e2b7667e81a1124fcfa6a9c7f942e65;hp=376a87c7268771817d507c0120573dea48f715d9;hb=aee94f6923ba628a85d855d0c5316d0da78bfa2a;hpb=27f45121cc74e31203777ad565f78d8aad9b92a2 diff --git a/ceph/src/msg/async/Stack.h b/ceph/src/msg/async/Stack.h index 376a87c72..6739968f4 100644 --- a/ceph/src/msg/async/Stack.h +++ b/ceph/src/msg/async/Stack.h @@ -17,10 +17,12 @@ #ifndef CEPH_MSG_ASYNC_STACK_H #define CEPH_MSG_ASYNC_STACK_H -#include "include/spinlock.h" #include "common/perf_counters.h" -#include "msg/msg_types.h" +#include "common/perf_counters_key.h" +#include "include/spinlock.h" #include "msg/async/Event.h" +#include "msg/msg_types.h" +#include class Worker; class ConnectedSocketImpl { @@ -214,6 +216,15 @@ enum { l_msgr_last, }; +enum { + l_msgr_labeled_first = l_msgr_last + 1, + + l_msgr_connection_ready_timeouts, + l_msgr_connection_idle_timeouts, + + l_msgr_labeled_last, +}; + class Worker { std::mutex init_lock; std::condition_variable init_cond; @@ -224,6 +235,7 @@ class Worker { CephContext *cct; PerfCounters *perf_logger; + PerfCounters *perf_labeled_logger; unsigned id; std::atomic_uint references; @@ -233,9 +245,11 @@ class Worker { Worker& operator=(const Worker&) = delete; Worker(CephContext *c, unsigned worker_id) - : cct(c), perf_logger(NULL), id(worker_id), references(0), center(c) { + : cct(c), id(worker_id), references(0), center(c) { char name[128]; - sprintf(name, "AsyncMessenger::Worker-%u", id); + char name_prefix[] = "AsyncMessenger::Worker"; + sprintf(name, "%s-%u", name_prefix, id); + // initialize perf_logger PerfCountersBuilder plb(cct, name, l_msgr_first, l_msgr_last); @@ -259,12 +273,35 @@ class Worker { perf_logger = plb.create_perf_counters(); cct->get_perfcounters_collection()->add(perf_logger); + + // Add labeled perfcounters + std::string labels = ceph::perf_counters::key_create( + name_prefix, {{"id", std::to_string(id)}}); + PerfCountersBuilder plb_labeled( + cct, labels, l_msgr_labeled_first, + l_msgr_labeled_last); + + plb_labeled.add_u64_counter( + l_msgr_connection_ready_timeouts, "msgr_connection_ready_timeouts", + "Number of not yet ready connections declared as dead", NULL, + PerfCountersBuilder::PRIO_USEFUL); + plb_labeled.add_u64_counter( + l_msgr_connection_idle_timeouts, "msgr_connection_idle_timeouts", + "Number of connections closed due to idleness", NULL, + PerfCountersBuilder::PRIO_USEFUL); + + perf_labeled_logger = plb_labeled.create_perf_counters(); + cct->get_perfcounters_collection()->add(perf_labeled_logger); } virtual ~Worker() { if (perf_logger) { cct->get_perfcounters_collection()->remove(perf_logger); delete perf_logger; } + if (perf_labeled_logger) { + cct->get_perfcounters_collection()->remove(perf_labeled_logger); + delete perf_labeled_logger; + } } virtual int listen(entity_addr_t &addr, unsigned addr_slot, @@ -275,6 +312,7 @@ class Worker { virtual void initialize() {} PerfCounters *get_perf_counter() { return perf_logger; } + PerfCounters *get_labeled_perf_counter() { return perf_labeled_logger; } void release_worker() { int oldref = references.fetch_sub(1); ceph_assert(oldref > 0);