// -*- 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"
#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();
using std::shared_ptr;
using std::vector;
+extern PerfCounters *g_perf_counters;
+
namespace rbd {
namespace mirror {
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();
}
#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;
// 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) {
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;