]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: add aggregated replication perf counters 25834/head
authorMykola Golub <mgolub@suse.com>
Thu, 10 Jan 2019 10:09:31 +0000 (10:09 +0000)
committerMykola Golub <mgolub@suse.com>
Thu, 10 Jan 2019 10:36:45 +0000 (10:36 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/test/rbd_mirror/test_main.cc
src/tools/rbd_mirror/ImageReplayer.cc
src/tools/rbd_mirror/main.cc

index d5859cac919c0b4ee10b465268124b1c7c5e72fa..9226b086469f66bc3c504468a48f77b8496e414f 100644 (file)
@@ -1,6 +1,7 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
 
+#include "common/perf_counters.h"
 #include "include/rados/librados.hpp"
 #include "global/global_context.h"
 #include "test/librados/test_cxx.h"
@@ -8,6 +9,8 @@
 #include <iostream>
 #include <string>
 
+PerfCounters *g_perf_counters = nullptr;
+
 extern void register_test_cluster_watcher();
 extern void register_test_image_policy();
 extern void register_test_image_sync();
index c3538d8d02b3db4507cae36ee5617fb649d6330f..058aaad094ad6232f2ee2d3d311722b1eb605d03 100644 (file)
@@ -43,6 +43,8 @@ using std::unique_ptr;
 using std::shared_ptr;
 using std::vector;
 
+extern PerfCounters *g_perf_counters;
+
 namespace rbd {
 namespace mirror {
 
@@ -1258,6 +1260,14 @@ void ImageReplayer<I>::handle_process_entry_safe(const ReplayEntry &replay_entry
   m_perf_counters->tinc(l_rbd_mirror_replay_latency,
                         ceph_clock_now() - replay_start_time);
 
+  if (g_perf_counters) {
+    g_perf_counters->inc(l_rbd_mirror_replay);
+    g_perf_counters->inc(l_rbd_mirror_replay_bytes,
+                         replay_entry.get_data().length());
+    g_perf_counters->tinc(l_rbd_mirror_replay_latency,
+                          ceph_clock_now() - replay_start_time);
+  }
+
   m_event_replay_tracker.finish_op();
 }
 
index 38ebabba419fa7f3ae2c0149b6534ecea1811a39..c19ff4f568115ead8c0613082ce9db70a1af87e6 100644 (file)
@@ -5,13 +5,16 @@
 #include "common/config.h"
 #include "common/debug.h"
 #include "common/errno.h"
+#include "common/perf_counters.h"
 #include "global/global_init.h"
 #include "global/signal_handler.h"
 #include "Mirror.h"
+#include "Types.h"
 
 #include <vector>
 
 rbd::mirror::Mirror *mirror = nullptr;
+PerfCounters *g_perf_counters = nullptr;
 
 void usage() {
   std::cout << "usage: rbd-mirror [options...]" << std::endl;
@@ -63,6 +66,20 @@ int main(int argc, const char **argv)
   // disable unnecessary librbd cache
   g_ceph_context->_conf.set_val_or_die("rbd_cache", "false");
 
+  auto prio =
+      g_ceph_context->_conf.get_val<int64_t>("rbd_mirror_perf_stats_prio");
+  PerfCountersBuilder plb(g_ceph_context, "rbd_mirror",
+                          rbd::mirror::l_rbd_mirror_first,
+                          rbd::mirror::l_rbd_mirror_last);
+  plb.add_u64_counter(rbd::mirror::l_rbd_mirror_replay, "replay", "Replays",
+                      "r", prio);
+  plb.add_u64_counter(rbd::mirror::l_rbd_mirror_replay_bytes, "replay_bytes",
+                      "Replayed data", "rb", prio, unit_t(UNIT_BYTES));
+  plb.add_time_avg(rbd::mirror::l_rbd_mirror_replay_latency, "replay_latency",
+                   "Replay latency", "rl", prio);
+  g_perf_counters = plb.create_perf_counters();
+  g_ceph_context->get_perfcounters_collection()->add(g_perf_counters);
+
   mirror = new rbd::mirror::Mirror(g_ceph_context, cmd_args);
   int r = mirror->init();
   if (r < 0) {
@@ -78,6 +95,9 @@ int main(int argc, const char **argv)
   unregister_async_signal_handler(SIGTERM, handle_signal);
   shutdown_async_signal_handler();
 
+  g_ceph_context->get_perfcounters_collection()->remove(g_perf_counters);
+  delete g_perf_counters;
+
   delete mirror;
 
   return r < 0 ? EXIT_SUCCESS : EXIT_FAILURE;