From 81295c61c4507d26ba3f80c52dd53385a4b9e9d7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 11 Oct 2016 14:21:56 -0400 Subject: [PATCH] global: introduce mempool_debug config option, asok command Signed-off-by: Sage Weil --- src/common/config_opts.h | 2 ++ src/global/global_init.cc | 56 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 2cf5080d914..82157561687 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -106,6 +106,8 @@ OPTION(async_compressor_threads, OPT_INT, 2) OPTION(async_compressor_thread_timeout, OPT_INT, 5) OPTION(async_compressor_thread_suicide_timeout, OPT_INT, 30) +OPTION(mempool_debug, OPT_BOOL, false) + DEFAULT_SUBSYS(0, 5) SUBSYS(lockdep, 0, 1) SUBSYS(context, 0, 1) diff --git a/src/global/global_init.cc b/src/global/global_init.cc index fcee7d6d2bb..e16c776dfc1 100644 --- a/src/global/global_init.cc +++ b/src/global/global_init.cc @@ -12,6 +12,7 @@ * */ +#include "include/mempool.h" #include "common/ceph_argparse.h" #include "common/code_environment.h" #include "common/config.h" @@ -26,6 +27,7 @@ #include "global/signal_handler.h" #include "include/compat.h" #include "include/str_list.h" +#include "common/admin_socket.h" #include #include @@ -37,6 +39,56 @@ #define dout_subsys ceph_subsys_ +class GlobalObs : public md_config_obs_t, + public AdminSocketHook { + CephContext *cct; + +public: + explicit GlobalObs(CephContext *cct) : cct(cct) { + cct->_conf->add_observer(this); + int r = cct->get_admin_socket()->register_command( + "dump_mempools", + "dump_mempools", + this, + "get mempool stats"); + assert(r == 0); + } + ~GlobalObs() { + cct->_conf->remove_observer(this); + cct->get_admin_socket()->unregister_command("dump_mempools"); + } + + // md_config_obs_t + const char** get_tracked_conf_keys() const { + static const char *KEYS[] = { + "mempool_debug", + NULL + }; + return KEYS; + } + + void handle_conf_change(const md_config_t *conf, + const std::set &changed) { + if (changed.count("mempool_debug")) { + mempool::set_debug_mode(cct->_conf->mempool_debug); + } + } + + // AdminSocketHook + bool call(std::string command, cmdmap_t& cmdmap, std::string format, + bufferlist& out) { + if (command == "dump_mempools") { + std::unique_ptr f(Formatter::create(format)); + f->open_object_section("mempools"); + mempool::dump(f.get()); + f->close_section(); + f->flush(out); + return true; + } + return false; + } +}; + static void global_init_set_globals(CephContext *cct) { g_ceph_context = cct; @@ -97,6 +149,10 @@ void global_pre_init(std::vector < const char * > *alt_def_args, if (alt_def_args) conf->parse_argv(*alt_def_args); // alternative default args + // set up global config observer + GlobalObs *obs = 0; + g_ceph_context->lookup_or_create_singleton_object(obs, "global_obs"); + int ret = conf->parse_config_files(c_str_or_null(conf_file_list), &cerr, flags); if (ret == -EDOM) { -- 2.39.5