]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: support more dynamic perf query subkey types
authorMykola Golub <mgolub@suse.com>
Sun, 2 Dec 2018 08:25:39 +0000 (10:25 +0200)
committerMykola Golub <mgolub@suse.com>
Tue, 4 Dec 2018 11:20:04 +0000 (11:20 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/mgr/BaseMgrModule.cc
src/mgr/OSDPerfMetricTypes.cc
src/mgr/OSDPerfMetricTypes.h
src/osd/DynamicPerfStats.h
src/osd/PrimaryLogPG.cc
src/pybind/mgr/mgr_module.py

index 03103ba1b3d4022f657096e6be43697c18e2d65e..fd5f2f53ecf20fe776a8c0b0279828867db786d6 100644 (file)
@@ -685,8 +685,13 @@ ceph_add_osd_perf_query(BaseMgrModule *self, PyObject *args)
   static const std::string NAME_SUB_KEY_REGEX = "regex";
   static const std::map<std::string, OSDPerfMetricSubKeyType> sub_key_types = {
     {"client_id", OSDPerfMetricSubKeyType::CLIENT_ID},
+    {"client_address", OSDPerfMetricSubKeyType::CLIENT_ADDRESS},
     {"pool_id", OSDPerfMetricSubKeyType::POOL_ID},
+    {"namespace", OSDPerfMetricSubKeyType::NAMESPACE},
+    {"osd_id", OSDPerfMetricSubKeyType::OSD_ID},
+    {"pg_id", OSDPerfMetricSubKeyType::PG_ID},
     {"object_name", OSDPerfMetricSubKeyType::OBJECT_NAME},
+    {"snap_id", OSDPerfMetricSubKeyType::SNAP_ID},
   };
   static const std::map<std::string, PerformanceCounterType> counter_types = {
     {"write_ops", PerformanceCounterType::WRITE_OPS},
index 266fc403cc5edc5b643e7f9f6a856776534bf6e8..825c6b3a607763f66482a6315f33e2ff2e01c2ca 100644 (file)
@@ -11,12 +11,27 @@ std::ostream& operator<<(std::ostream& os,
   case OSDPerfMetricSubKeyType::CLIENT_ID:
     os << "client_id";
     break;
+  case OSDPerfMetricSubKeyType::CLIENT_ADDRESS:
+    os << "client_address";
+    break;
   case OSDPerfMetricSubKeyType::POOL_ID:
     os << "pool_id";
     break;
+  case OSDPerfMetricSubKeyType::NAMESPACE:
+    os << "namespace";
+    break;
+  case OSDPerfMetricSubKeyType::OSD_ID:
+    os << "osd_id";
+    break;
+  case OSDPerfMetricSubKeyType::PG_ID:
+    os << "pg_id";
+    break;
   case OSDPerfMetricSubKeyType::OBJECT_NAME:
     os << "object_name";
     break;
+  case OSDPerfMetricSubKeyType::SNAP_ID:
+    os << "snap_id";
+    break;
   default:
     os << "unknown (" << static_cast<int>(d.type) << ")";
   }
index c3d281e235a368e220e3d971693bf87ab0325084..106c4bd08312a90ab0315327758d238c466462fe 100644 (file)
@@ -14,8 +14,13 @@ typedef std::vector<OSDPerfMetricSubKey> OSDPerfMetricKey;
 
 enum class OSDPerfMetricSubKeyType : uint8_t {
   CLIENT_ID = 0,
-  POOL_ID = 1,
-  OBJECT_NAME = 2,
+  CLIENT_ADDRESS = 1,
+  POOL_ID = 2,
+  NAMESPACE = 3,
+  OSD_ID = 4,
+  PG_ID = 5,
+  OBJECT_NAME = 6,
+  SNAP_ID = 7,
 };
 
 struct OSDPerfMetricSubKeyDescriptor {
@@ -26,8 +31,13 @@ struct OSDPerfMetricSubKeyDescriptor {
   bool is_supported() const {
     switch (type) {
     case OSDPerfMetricSubKeyType::CLIENT_ID:
+    case OSDPerfMetricSubKeyType::CLIENT_ADDRESS:
     case OSDPerfMetricSubKeyType::POOL_ID:
+    case OSDPerfMetricSubKeyType::NAMESPACE:
+    case OSDPerfMetricSubKeyType::OSD_ID:
+    case OSDPerfMetricSubKeyType::PG_ID:
     case OSDPerfMetricSubKeyType::OBJECT_NAME:
+    case OSDPerfMetricSubKeyType::SNAP_ID:
       return true;
     default:
       return false;
index dddfb69ee87cbe446675ee1f7a872590604e8510..02acec041be7407fe871a8a6deaeeaad11c4ddc6 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "messages/MOSDOp.h"
 #include "mgr/OSDPerfMetricTypes.h"
+#include "osd/OSD.h"
 #include "osd/OpRequest.h"
 
 class DynamicPerfStats {
@@ -52,8 +53,8 @@ public:
     return !data.empty();
   }
 
-  void add(const OpRequest& op, uint64_t inb, uint64_t outb,
-           const utime_t &latency) {
+  void add(const OSDService *osd, const pg_info_t &pg_info, const OpRequest& op,
+           uint64_t inb, uint64_t outb, const utime_t &latency) {
 
     auto update_counter_fnc =
         [&op, inb, outb, &latency](const PerformanceCounterDescriptor &d,
@@ -101,8 +102,8 @@ public:
         };
 
     auto get_subkey_fnc =
-        [&op](const OSDPerfMetricSubKeyDescriptor &d,
-              OSDPerfMetricSubKey *sub_key) {
+        [&osd, &pg_info, &op](const OSDPerfMetricSubKeyDescriptor &d,
+                              OSDPerfMetricSubKey *sub_key) {
           ceph_assert(d.is_supported());
 
           auto m = static_cast<const MOSDOp*>(op.get_req());
@@ -111,12 +112,27 @@ public:
           case OSDPerfMetricSubKeyType::CLIENT_ID:
             match_string = stringify(m->get_reqid().name);
             break;
+          case OSDPerfMetricSubKeyType::CLIENT_ADDRESS:
+            match_string = stringify(m->get_connection()->get_peer_addr());
+            break;
           case OSDPerfMetricSubKeyType::POOL_ID:
             match_string = stringify(m->get_spg().pool());
             break;
+          case OSDPerfMetricSubKeyType::NAMESPACE:
+            match_string = m->get_hobj().nspace;
+            break;
+          case OSDPerfMetricSubKeyType::OSD_ID:
+            match_string = stringify(osd->get_nodeid());
+            break;
+          case OSDPerfMetricSubKeyType::PG_ID:
+            match_string = stringify(pg_info.pgid);
+            break;
           case OSDPerfMetricSubKeyType::OBJECT_NAME:
             match_string = m->get_oid().name;
             break;
+          case OSDPerfMetricSubKeyType::SNAP_ID:
+            match_string = stringify(m->get_snapid());
+            break;
           default:
             ceph_abort_msg("unknown counter type");
           }
index 77210e2c861487e29982186d2f352e173c35460d..78396edbb64a2c7d75904be18e1a0daec64f6078 100644 (file)
@@ -4141,7 +4141,7 @@ void PrimaryLogPG::log_op_stats(const OpRequest& op,
           << " lat " << latency << dendl;
 
   if (m_dynamic_perf_stats.is_enabled()) {
-    m_dynamic_perf_stats.add(op, inb, outb, latency);
+    m_dynamic_perf_stats.add(osd, info, op, inb, outb, latency);
   }
 }
 
index fbdd3f1f420743157a8935a690546ff9f8d39c00..c170e7ba0851183c9c224dc69cfeee4baab29240 100644 (file)
@@ -969,7 +969,9 @@ class MgrModule(ceph_module.BaseMgrModule):
              ],
            }
 
-        Valid subkey types: 'client_id', 'pool_id', 'object_name'
+        Valid subkey types:
+           'client_id', 'client_address', 'pool_id', 'namespace', 'osd_id',
+           'pg_id', 'object_name', 'snap_id'
         Valid performance counter types:
            'write_ops', 'read_ops', 'write_bytes', 'read_bytes',
            'write_latency', 'read_latency'