]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/seastore: dump crimson perf counters 41132/head
authorchunmei-liu <chunmei.liu@intel.com>
Fri, 30 Apr 2021 05:44:31 +0000 (22:44 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Tue, 4 May 2021 01:15:07 +0000 (18:15 -0700)
Signed-off-by: chunmei-liu <chunmei.liu@intel.com>
src/crimson/admin/osd_admin.cc
src/crimson/admin/osd_admin.h
src/crimson/common/perf_counters_collection.cc
src/crimson/common/perf_counters_collection.h
src/crimson/osd/osd.cc

index ce6b6695d2892bb5fb79afbbcdb7f3c1ef558e4d..5cd03815a4d20b9bd7d833307e9292022b55ec56 100644 (file)
@@ -132,6 +132,37 @@ private:
 };
 template std::unique_ptr<AdminSocketHook> make_asok_hook<DumpPGStateHistory>(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<tell_result_t> call(const cmdmap_t& cmdmap,
+                                      std::string_view format,
+                                      ceph::bufferlist&& input) const final
+  {
+    std::unique_ptr<Formatter> 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<tell_result_t>(std::move(f));
+  }
+private:
+  const crimson::osd::OSD& osd;
+};
+template std::unique_ptr<AdminSocketHook> make_asok_hook<DumpPerfCountersHook>(const crimson::osd::OSD& osd);
+
+
+
 /**
  * A CephContext admin hook: calling assert (if allowed by
  * 'debug_asok_assert_abort')
index 395042ea8cfa5f5d9189ca7645a8c2f34a18f325..f68bcf9b7389216a73d6a79238ef0feb9152510b 100644 (file)
@@ -14,7 +14,7 @@ class OsdStatusHook;
 class SendBeaconHook;
 class DumpPGStateHistory;
 class SeastarMetricsHook;
-
+class DumpPerfCountersHook;
 
 template<class Hook, class... Args>
 std::unique_ptr<AdminSocketHook> make_asok_hook(Args&&... args);
index af80dbcc2f17c324a6236e5d1eee979708cdce3a..2eba271dd9f75415c58bd24083b09a2125baa0b4 100644 (file)
@@ -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;
 
 }
index a196302470754f96945fe7c91bc4c807f4b54e37..9ec5c3eb3742476d129cfca81adec6a9e2730a1a 100644 (file)
@@ -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(){
index 930716825334a58e99b8fc5d41e2f4484b968ac1..b22be4a9500a79972a1bd85364d915b75215cbba 100644 (file)
@@ -442,6 +442,7 @@ seastar::future<> OSD::start_asok_admin()
       asok->register_command(make_asok_hook<FlushPgStatsHook>(*this)),
       asok->register_command(make_asok_hook<DumpPGStateHistory>(std::as_const(*this))),
       asok->register_command(make_asok_hook<SeastarMetricsHook>()),
+      asok->register_command(make_asok_hook<DumpPerfCountersHook>(std::as_const(*this))),
       // PG commands
       asok->register_command(make_asok_hook<pg::QueryCommand>(*this)),
       asok->register_command(make_asok_hook<pg::MarkUnfoundLostCommand>(*this)));