From: Mykola Golub Date: Sun, 2 Dec 2018 08:25:39 +0000 (+0200) Subject: osd: support more dynamic perf query subkey types X-Git-Tag: v14.1.0~718^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7f6738c41e14f4b0295539d45ea567aaf51a212e;p=ceph-ci.git osd: support more dynamic perf query subkey types Signed-off-by: Mykola Golub --- diff --git a/src/mgr/BaseMgrModule.cc b/src/mgr/BaseMgrModule.cc index 03103ba1b3d..fd5f2f53ecf 100644 --- a/src/mgr/BaseMgrModule.cc +++ b/src/mgr/BaseMgrModule.cc @@ -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 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 counter_types = { {"write_ops", PerformanceCounterType::WRITE_OPS}, diff --git a/src/mgr/OSDPerfMetricTypes.cc b/src/mgr/OSDPerfMetricTypes.cc index 266fc403cc5..825c6b3a607 100644 --- a/src/mgr/OSDPerfMetricTypes.cc +++ b/src/mgr/OSDPerfMetricTypes.cc @@ -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(d.type) << ")"; } diff --git a/src/mgr/OSDPerfMetricTypes.h b/src/mgr/OSDPerfMetricTypes.h index c3d281e235a..106c4bd0831 100644 --- a/src/mgr/OSDPerfMetricTypes.h +++ b/src/mgr/OSDPerfMetricTypes.h @@ -14,8 +14,13 @@ typedef std::vector 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; diff --git a/src/osd/DynamicPerfStats.h b/src/osd/DynamicPerfStats.h index dddfb69ee87..02acec041be 100644 --- a/src/osd/DynamicPerfStats.h +++ b/src/osd/DynamicPerfStats.h @@ -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(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"); } diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 77210e2c861..78396edbb64 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -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); } } diff --git a/src/pybind/mgr/mgr_module.py b/src/pybind/mgr/mgr_module.py index fbdd3f1f420..c170e7ba085 100644 --- a/src/pybind/mgr/mgr_module.py +++ b/src/pybind/mgr/mgr_module.py @@ -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'