From: Patrick Donnelly Date: Thu, 5 Nov 2020 05:00:50 +0000 (-0800) Subject: Merge PR #37654 into master X-Git-Tag: v16.1.0~686 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4b26dd797f3b2042ca9e29403ba60fd2acf3f6c4;p=ceph.git Merge PR #37654 into master * refs/pull/37654/head: mds: print the METRIC_TYPE for debug info mds: add XXPayload:print support mds: only update the requesting metrics Reviewed-by: Venky Shankar --- 4b26dd797f3b2042ca9e29403ba60fd2acf3f6c4 diff --cc src/include/cephfs/metrics/Types.h index 5951e8ea1996,524192b5d595..160bfa1d174e --- a/src/include/cephfs/metrics/Types.h +++ b/src/include/cephfs/metrics/Types.h @@@ -169,51 -179,12 +183,55 @@@ struct MetadataLatencyPayload void dump(Formatter *f) const { f->dump_int("latency", lat); } + + void print(ostream *out) const { + *out << "latency: " << lat; + } }; +struct DentryLeasePayload { + static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE; + + uint64_t dlease_hits = 0; + uint64_t dlease_misses = 0; + uint64_t nr_dentries = 0; + + DentryLeasePayload() { } + DentryLeasePayload(uint64_t dlease_hits, uint64_t dlease_misses, uint64_t nr_dentries) + : dlease_hits(dlease_hits), dlease_misses(dlease_misses), nr_dentries(nr_dentries) { + } + + void encode(bufferlist &bl) const { + using ceph::encode; + ENCODE_START(1, 1, bl); + encode(dlease_hits, bl); + encode(dlease_misses, bl); + encode(nr_dentries, bl); + ENCODE_FINISH(bl); + } + + void decode(bufferlist::const_iterator &iter) { + using ceph::decode; + DECODE_START(1, iter); + decode(dlease_hits, iter); + decode(dlease_misses, iter); + decode(nr_dentries, iter); + DECODE_FINISH(iter); + } + + void dump(Formatter *f) const { + f->dump_int("dlease_hits", dlease_hits); + f->dump_int("dlease_misses", dlease_misses); + f->dump_int("num_dentries", nr_dentries); + } + + void print(ostream *out) const { + *out << "dlease_hits: " << dlease_hits << " " + << "dlease_misses: " << dlease_misses << " " + << "num_dentries: " << nr_dentries; + } +}; + struct UnknownPayload { static const ClientMetricType METRIC_TYPE = static_cast(-1); diff --cc src/mds/MetricAggregator.cc index 23752e90e5d6,fc5e1d6ed8b9..c5e6fe3bbaf0 --- a/src/mds/MetricAggregator.cc +++ b/src/mds/MetricAggregator.cc @@@ -115,23 -111,23 +115,29 @@@ void MetricAggregator::refresh_metrics_ c->second = metrics.cap_hit_metric.misses; break; case MDSPerformanceCounterType::READ_LATENCY_METRIC: - c->first = metrics.read_latency_metric.lat.tv.tv_sec; - c->second = metrics.read_latency_metric.lat.tv.tv_nsec; + if (metrics.read_latency_metric.updated) { + c->first = metrics.read_latency_metric.lat.tv.tv_sec; + c->second = metrics.read_latency_metric.lat.tv.tv_nsec; + } break; case MDSPerformanceCounterType::WRITE_LATENCY_METRIC: - c->first = metrics.write_latency_metric.lat.tv.tv_sec; - c->second = metrics.write_latency_metric.lat.tv.tv_nsec; + if (metrics.write_latency_metric.updated) { + c->first = metrics.write_latency_metric.lat.tv.tv_sec; + c->second = metrics.write_latency_metric.lat.tv.tv_nsec; + } break; case MDSPerformanceCounterType::METADATA_LATENCY_METRIC: - c->first = metrics.metadata_latency_metric.lat.tv.tv_sec; - c->second = metrics.metadata_latency_metric.lat.tv.tv_nsec; + if (metrics.metadata_latency_metric.updated) { + c->first = metrics.metadata_latency_metric.lat.tv.tv_sec; + c->second = metrics.metadata_latency_metric.lat.tv.tv_nsec; + } break; + case MDSPerformanceCounterType::DENTRY_LEASE_METRIC: + if (metrics.dentry_lease_metric.updated) { + c->first = metrics.dentry_lease_metric.hits; + c->second = metrics.dentry_lease_metric.misses; + } + break; default: ceph_abort_msg("unknown counter type"); } diff --cc src/mds/MetricsHandler.cc index 156175aca2a4,3cec99ce8780..781a41581db4 --- a/src/mds/MetricsHandler.cc +++ b/src/mds/MetricsHandler.cc @@@ -195,27 -197,11 +201,28 @@@ void MetricsHandler::handle_payload(Ses auto &metrics = it->second.second; metrics.update_type = UPDATE_TYPE_REFRESH; metrics.metadata_latency_metric.lat = payload.lat; + metrics.metadata_latency_metric.updated = true; } +void MetricsHandler::handle_payload(Session *session, const DentryLeasePayload &payload) { + dout(20) << ": type=" << static_cast(DentryLeasePayload::METRIC_TYPE) + << ", session=" << session << ", hits=" << payload.dlease_hits << ", misses=" + << payload.dlease_misses << dendl; + + auto it = client_metrics_map.find(session->info.inst); + if (it == client_metrics_map.end()) { + return; + } + + auto &metrics = it->second.second; + metrics.update_type = UPDATE_TYPE_REFRESH; + metrics.dentry_lease_metric.hits = payload.dlease_hits; + metrics.dentry_lease_metric.misses = payload.dlease_misses; + metrics.dentry_lease_metric.updated = true; +} + void MetricsHandler::handle_payload(Session *session, const UnknownPayload &payload) { - dout(5) << ": session=" << session << ", ignoring unknown payload" << dendl; + dout(5) << ": type=Unknown, session=" << session << ", ignoring unknown payload" << dendl; } void MetricsHandler::handle_client_metrics(const cref_t &m) {