@@ -378,6 +378,9 @@ Client::Client(Messenger *m, MonClient *mc, Objecter *objecter_)
378378 fuse_default_permissions = cct->_conf .get_val <bool >(
379379 " fuse_default_permissions" );
380380
381+ _collect_and_send_global_metrics = cct->_conf .get_val <bool >(
382+ " client_collect_and_send_global_metrics" );
383+
381384 if (cct->_conf ->client_acl_type == " posix_acl" )
382385 acl_type = POSIX_ACL;
383386
@@ -2337,6 +2340,7 @@ void Client::handle_client_session(const MConstRef<MClientSession>& m)
23372340 break ;
23382341 }
23392342 session->mds_features = std::move (m->supported_features );
2343+ session->mds_metric_flags = std::move (m->metric_spec .metric_flags );
23402344
23412345 renew_caps (session.get ());
23422346 session->state = MetaSession::STATE_OPEN;
@@ -6810,66 +6814,88 @@ void Client::collect_and_send_global_metrics() {
68106814 std::vector<ClientMetricMessage> message;
68116815
68126816 // read latency
6813- metric = ClientMetricMessage (ReadLatencyPayload (logger->tget (l_c_read),
6814- logger->tget (l_c_rd_avg),
6815- logger->get (l_c_rd_sqsum),
6816- nr_read_request));
6817- message.push_back (metric);
6817+ if (_collect_and_send_global_metrics ||
6818+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_READ_LATENCY)) {
6819+ metric = ClientMetricMessage (ReadLatencyPayload (logger->tget (l_c_read),
6820+ logger->tget (l_c_rd_avg),
6821+ logger->get (l_c_rd_sqsum),
6822+ nr_read_request));
6823+ message.push_back (metric);
6824+ }
68186825
68196826 // write latency
6820- metric = ClientMetricMessage (WriteLatencyPayload (logger->tget (l_c_wrlat),
6821- logger->tget (l_c_wr_avg),
6822- logger->get (l_c_wr_sqsum),
6823- nr_write_request));
6824- message.push_back (metric);
6827+ if (_collect_and_send_global_metrics ||
6828+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_WRITE_LATENCY)) {
6829+ metric = ClientMetricMessage (WriteLatencyPayload (logger->tget (l_c_wrlat),
6830+ logger->tget (l_c_wr_avg),
6831+ logger->get (l_c_wr_sqsum),
6832+ nr_write_request));
6833+ message.push_back (metric);
6834+ }
68256835
68266836 // metadata latency
6827- metric = ClientMetricMessage (MetadataLatencyPayload (logger->tget (l_c_lat),
6828- logger->tget (l_c_md_avg),
6829- logger->get (l_c_md_sqsum),
6830- nr_metadata_request));
6831- message.push_back (metric);
6837+ if (session->mds_metric_flags .test (CLIENT_METRIC_TYPE_METADATA_LATENCY)) {
6838+ metric = ClientMetricMessage (MetadataLatencyPayload (logger->tget (l_c_lat),
6839+ logger->tget (l_c_md_avg),
6840+ logger->get (l_c_md_sqsum),
6841+ nr_metadata_request));
6842+ message.push_back (metric);
6843+ }
68326844
68336845 // cap hit ratio -- nr_caps is unused right now
6834- auto [cap_hits, cap_misses] = get_cap_hit_rates ();
6835- metric = ClientMetricMessage (CapInfoPayload (cap_hits, cap_misses, 0 ));
6836- message.push_back (metric);
6846+ if (_collect_and_send_global_metrics ||
6847+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_CAP_INFO)) {
6848+ auto [cap_hits, cap_misses] = get_cap_hit_rates ();
6849+ metric = ClientMetricMessage (CapInfoPayload (cap_hits, cap_misses, 0 ));
6850+ message.push_back (metric);
6851+ }
68376852
68386853 // dentry lease hit ratio
6839- auto [dlease_hits, dlease_misses, nr] = get_dlease_hit_rates ();
6840- metric = ClientMetricMessage (DentryLeasePayload (dlease_hits, dlease_misses, nr));
6841- message.push_back (metric);
6854+ if (_collect_and_send_global_metrics ||
6855+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_DENTRY_LEASE)) {
6856+ auto [dlease_hits, dlease_misses, nr] = get_dlease_hit_rates ();
6857+ metric = ClientMetricMessage (DentryLeasePayload (dlease_hits, dlease_misses, nr));
6858+ message.push_back (metric);
6859+ }
68426860
68436861 // opened files
6844- {
6862+ if (session-> mds_metric_flags . test (CLIENT_METRIC_TYPE_OPENED_FILES)) {
68456863 auto [opened_files, total_inodes] = get_opened_files_rates ();
68466864 metric = ClientMetricMessage (OpenedFilesPayload (opened_files, total_inodes));
6865+ message.push_back (metric);
68476866 }
6848- message.push_back (metric);
68496867
68506868 // pinned i_caps
6851- {
6869+ if (_collect_and_send_global_metrics ||
6870+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_PINNED_ICAPS)) {
68526871 auto [pinned_icaps, total_inodes] = get_pinned_icaps_rates ();
68536872 metric = ClientMetricMessage (PinnedIcapsPayload (pinned_icaps, total_inodes));
6873+ message.push_back (metric);
68546874 }
6855- message.push_back (metric);
68566875
68576876 // opened inodes
6858- {
6877+ if (_collect_and_send_global_metrics ||
6878+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_OPENED_INODES)) {
68596879 auto [opened_inodes, total_inodes] = get_opened_inodes_rates ();
68606880 metric = ClientMetricMessage (OpenedInodesPayload (opened_inodes, total_inodes));
6881+ message.push_back (metric);
68616882 }
6862- message.push_back (metric);
68636883
68646884 // read io sizes
6865- metric = ClientMetricMessage (ReadIoSizesPayload (total_read_ops,
6866- total_read_size));
6867- message.push_back (metric);
6885+ if (_collect_and_send_global_metrics ||
6886+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_READ_IO_SIZES)) {
6887+ metric = ClientMetricMessage (ReadIoSizesPayload (total_read_ops,
6888+ total_read_size));
6889+ message.push_back (metric);
6890+ }
68686891
68696892 // write io sizes
6870- metric = ClientMetricMessage (WriteIoSizesPayload (total_write_ops,
6871- total_write_size));
6872- message.push_back (metric);
6893+ if (_collect_and_send_global_metrics ||
6894+ session->mds_metric_flags .test (CLIENT_METRIC_TYPE_WRITE_IO_SIZES)) {
6895+ metric = ClientMetricMessage (WriteIoSizesPayload (total_write_ops,
6896+ total_write_size));
6897+ message.push_back (metric);
6898+ }
68736899
68746900 session->con ->send_message2 (make_message<MClientMetrics>(std::move (message)));
68756901}
@@ -15945,6 +15971,10 @@ void Client::handle_conf_change(const ConfigProxy& conf,
1594515971 if (changed.count (" client_oc_max_dirty_age" )) {
1594615972 objectcacher->set_max_dirty_age (cct->_conf ->client_oc_max_dirty_age );
1594715973 }
15974+ if (changed.count (" client_collect_and_send_global_metrics" )) {
15975+ _collect_and_send_global_metrics = cct->_conf .get_val <bool >(
15976+ " client_collect_and_send_global_metrics" );
15977+ }
1594815978}
1594915979
1595015980void intrusive_ptr_add_ref (Inode *in)
0 commit comments