From: chunmei-liu Date: Fri, 30 Apr 2021 05:44:31 +0000 (-0700) Subject: crimson/seastore: dump crimson perf counters X-Git-Tag: v17.1.0~1971^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1ccb04e7e259b71402f5efa411e27781017898c9;p=ceph.git crimson/seastore: dump crimson perf counters Signed-off-by: chunmei-liu --- diff --git a/src/crimson/admin/osd_admin.cc b/src/crimson/admin/osd_admin.cc index ce6b6695d2892..5cd03815a4d20 100644 --- a/src/crimson/admin/osd_admin.cc +++ b/src/crimson/admin/osd_admin.cc @@ -132,6 +132,37 @@ private: }; template std::unique_ptr make_asok_hook(const crimson::osd::OSD& osd); +//dump the contents of perfcounters in osd and store +class DumpPerfCountersHook final: public AdminSocketHook { +public: + explicit DumpPerfCountersHook(const crimson::osd::OSD &osd) : + AdminSocketHook{"perfcounters_dump", + "", + "dump perfcounters in osd and store"}, + osd{osd} + {} + seastar::future call(const cmdmap_t& cmdmap, + std::string_view format, + ceph::bufferlist&& input) const final + { + std::unique_ptr f{Formatter::create(format, + "json-pretty", + "json-pretty")}; + std::string logger; + std::string counter; + cmd_getval(cmdmap, "logger", logger); + cmd_getval(cmdmap, "counter", counter); + + crimson::common::local_perf_coll().dump_formatted(f.get(), false, logger, counter); + return seastar::make_ready_future(std::move(f)); + } +private: + const crimson::osd::OSD& osd; +}; +template std::unique_ptr make_asok_hook(const crimson::osd::OSD& osd); + + + /** * A CephContext admin hook: calling assert (if allowed by * 'debug_asok_assert_abort') diff --git a/src/crimson/admin/osd_admin.h b/src/crimson/admin/osd_admin.h index 395042ea8cfa5..f68bcf9b73892 100644 --- a/src/crimson/admin/osd_admin.h +++ b/src/crimson/admin/osd_admin.h @@ -14,7 +14,7 @@ class OsdStatusHook; class SendBeaconHook; class DumpPGStateHistory; class SeastarMetricsHook; - +class DumpPerfCountersHook; template std::unique_ptr make_asok_hook(Args&&... args); diff --git a/src/crimson/common/perf_counters_collection.cc b/src/crimson/common/perf_counters_collection.cc index af80dbcc2f17c..2eba271dd9f75 100644 --- a/src/crimson/common/perf_counters_collection.cc +++ b/src/crimson/common/perf_counters_collection.cc @@ -18,6 +18,13 @@ PerfCountersCollectionImpl* PerfCountersCollection:: get_perf_collection() return perf_collection.get(); } +void PerfCountersCollection::dump_formatted(ceph::Formatter *f, bool schema, + const std::string &logger, + const std::string &counter) +{ + perf_collection->dump_formatted(f, schema, logger, counter); +} + PerfCountersCollection::ShardedPerfCountersCollection PerfCountersCollection::sharded_perf_coll; } diff --git a/src/crimson/common/perf_counters_collection.h b/src/crimson/common/perf_counters_collection.h index a196302470754..9ec5c3eb37424 100644 --- a/src/crimson/common/perf_counters_collection.h +++ b/src/crimson/common/perf_counters_collection.h @@ -22,7 +22,9 @@ public: PerfCountersCollection(); ~PerfCountersCollection(); PerfCountersCollectionImpl* get_perf_collection(); - + void dump_formatted(ceph::Formatter *f, bool schema, + const std::string &logger = "", + const std::string &counter = ""); }; inline PerfCountersCollection::ShardedPerfCountersCollection& sharded_perf_coll(){ diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 930716825334a..b22be4a9500a7 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -442,6 +442,7 @@ seastar::future<> OSD::start_asok_admin() asok->register_command(make_asok_hook(*this)), asok->register_command(make_asok_hook(std::as_const(*this))), asok->register_command(make_asok_hook()), + asok->register_command(make_asok_hook(std::as_const(*this))), // PG commands asok->register_command(make_asok_hook(*this)), asok->register_command(make_asok_hook(*this)));