Lines Matching +full:max +full:- +full:msg +full:- +full:size

1 /* SPDX-License-Identifier: GPL-2.0 */
31 struct ceph_client_metric *m = &mdsc->metric; in ceph_mdsc_send_metrics()
32 u64 nr_caps = atomic64_read(&m->total_caps); in ceph_mdsc_send_metrics()
34 struct ceph_client *cl = mdsc->fsc->client; in ceph_mdsc_send_metrics()
35 struct ceph_msg *msg; in ceph_mdsc_send_metrics() local
41 mutex_lock(&mdsc->mutex); in ceph_mdsc_send_metrics()
42 if (ceph_mdsmap_get_state(mdsc->mdsmap, s->s_mds) != CEPH_MDS_STATE_ACTIVE) { in ceph_mdsc_send_metrics()
43 mutex_unlock(&mdsc->mutex); in ceph_mdsc_send_metrics()
46 mutex_unlock(&mdsc->mutex); in ceph_mdsc_send_metrics()
53 msg = ceph_msg_new(CEPH_MSG_CLIENT_METRICS, len, GFP_NOFS, true); in ceph_mdsc_send_metrics()
54 if (!msg) { in ceph_mdsc_send_metrics()
56 s->s_mds); in ceph_mdsc_send_metrics()
60 head = msg->front.iov_base; in ceph_mdsc_send_metrics()
64 cap->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_CAP_INFO); in ceph_mdsc_send_metrics()
65 cap->header.ver = 1; in ceph_mdsc_send_metrics()
66 cap->header.compat = 1; in ceph_mdsc_send_metrics()
67 cap->header.data_len = cpu_to_le32(sizeof(*cap) - header_len); in ceph_mdsc_send_metrics()
68 cap->hit = cpu_to_le64(percpu_counter_sum(&m->i_caps_hit)); in ceph_mdsc_send_metrics()
69 cap->mis = cpu_to_le64(percpu_counter_sum(&m->i_caps_mis)); in ceph_mdsc_send_metrics()
70 cap->total = cpu_to_le64(nr_caps); in ceph_mdsc_send_metrics()
75 read->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_READ_LATENCY); in ceph_mdsc_send_metrics()
76 read->header.ver = 2; in ceph_mdsc_send_metrics()
77 read->header.compat = 1; in ceph_mdsc_send_metrics()
78 read->header.data_len = cpu_to_le32(sizeof(*read) - header_len); in ceph_mdsc_send_metrics()
79 sum = m->metric[METRIC_READ].latency_sum; in ceph_mdsc_send_metrics()
80 ktime_to_ceph_timespec(&read->lat, sum); in ceph_mdsc_send_metrics()
81 ktime_to_ceph_timespec(&read->avg, m->metric[METRIC_READ].latency_avg); in ceph_mdsc_send_metrics()
82 read->sq_sum = cpu_to_le64(m->metric[METRIC_READ].latency_sq_sum); in ceph_mdsc_send_metrics()
83 read->count = cpu_to_le64(m->metric[METRIC_READ].total); in ceph_mdsc_send_metrics()
88 write->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_WRITE_LATENCY); in ceph_mdsc_send_metrics()
89 write->header.ver = 2; in ceph_mdsc_send_metrics()
90 write->header.compat = 1; in ceph_mdsc_send_metrics()
91 write->header.data_len = cpu_to_le32(sizeof(*write) - header_len); in ceph_mdsc_send_metrics()
92 sum = m->metric[METRIC_WRITE].latency_sum; in ceph_mdsc_send_metrics()
93 ktime_to_ceph_timespec(&write->lat, sum); in ceph_mdsc_send_metrics()
94 ktime_to_ceph_timespec(&write->avg, m->metric[METRIC_WRITE].latency_avg); in ceph_mdsc_send_metrics()
95 write->sq_sum = cpu_to_le64(m->metric[METRIC_WRITE].latency_sq_sum); in ceph_mdsc_send_metrics()
96 write->count = cpu_to_le64(m->metric[METRIC_WRITE].total); in ceph_mdsc_send_metrics()
101 meta->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_METADATA_LATENCY); in ceph_mdsc_send_metrics()
102 meta->header.ver = 2; in ceph_mdsc_send_metrics()
103 meta->header.compat = 1; in ceph_mdsc_send_metrics()
104 meta->header.data_len = cpu_to_le32(sizeof(*meta) - header_len); in ceph_mdsc_send_metrics()
105 sum = m->metric[METRIC_METADATA].latency_sum; in ceph_mdsc_send_metrics()
106 ktime_to_ceph_timespec(&meta->lat, sum); in ceph_mdsc_send_metrics()
107 ktime_to_ceph_timespec(&meta->avg, m->metric[METRIC_METADATA].latency_avg); in ceph_mdsc_send_metrics()
108 meta->sq_sum = cpu_to_le64(m->metric[METRIC_METADATA].latency_sq_sum); in ceph_mdsc_send_metrics()
109 meta->count = cpu_to_le64(m->metric[METRIC_METADATA].total); in ceph_mdsc_send_metrics()
114 dlease->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_DENTRY_LEASE); in ceph_mdsc_send_metrics()
115 dlease->header.ver = 1; in ceph_mdsc_send_metrics()
116 dlease->header.compat = 1; in ceph_mdsc_send_metrics()
117 dlease->header.data_len = cpu_to_le32(sizeof(*dlease) - header_len); in ceph_mdsc_send_metrics()
118 dlease->hit = cpu_to_le64(percpu_counter_sum(&m->d_lease_hit)); in ceph_mdsc_send_metrics()
119 dlease->mis = cpu_to_le64(percpu_counter_sum(&m->d_lease_mis)); in ceph_mdsc_send_metrics()
120 dlease->total = cpu_to_le64(atomic64_read(&m->total_dentries)); in ceph_mdsc_send_metrics()
123 sum = percpu_counter_sum(&m->total_inodes); in ceph_mdsc_send_metrics()
127 files->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_OPENED_FILES); in ceph_mdsc_send_metrics()
128 files->header.ver = 1; in ceph_mdsc_send_metrics()
129 files->header.compat = 1; in ceph_mdsc_send_metrics()
130 files->header.data_len = cpu_to_le32(sizeof(*files) - header_len); in ceph_mdsc_send_metrics()
131 files->opened_files = cpu_to_le64(atomic64_read(&m->opened_files)); in ceph_mdsc_send_metrics()
132 files->total = cpu_to_le64(sum); in ceph_mdsc_send_metrics()
137 icaps->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_PINNED_ICAPS); in ceph_mdsc_send_metrics()
138 icaps->header.ver = 1; in ceph_mdsc_send_metrics()
139 icaps->header.compat = 1; in ceph_mdsc_send_metrics()
140 icaps->header.data_len = cpu_to_le32(sizeof(*icaps) - header_len); in ceph_mdsc_send_metrics()
141 icaps->pinned_icaps = cpu_to_le64(nr_caps); in ceph_mdsc_send_metrics()
142 icaps->total = cpu_to_le64(sum); in ceph_mdsc_send_metrics()
147 inodes->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_OPENED_INODES); in ceph_mdsc_send_metrics()
148 inodes->header.ver = 1; in ceph_mdsc_send_metrics()
149 inodes->header.compat = 1; in ceph_mdsc_send_metrics()
150 inodes->header.data_len = cpu_to_le32(sizeof(*inodes) - header_len); in ceph_mdsc_send_metrics()
151 inodes->opened_inodes = cpu_to_le64(percpu_counter_sum(&m->opened_inodes)); in ceph_mdsc_send_metrics()
152 inodes->total = cpu_to_le64(sum); in ceph_mdsc_send_metrics()
155 /* encode the read io size metric */ in ceph_mdsc_send_metrics()
157 rsize->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_READ_IO_SIZES); in ceph_mdsc_send_metrics()
158 rsize->header.ver = 1; in ceph_mdsc_send_metrics()
159 rsize->header.compat = 1; in ceph_mdsc_send_metrics()
160 rsize->header.data_len = cpu_to_le32(sizeof(*rsize) - header_len); in ceph_mdsc_send_metrics()
161 rsize->total_ops = cpu_to_le64(m->metric[METRIC_READ].total); in ceph_mdsc_send_metrics()
162 rsize->total_size = cpu_to_le64(m->metric[METRIC_READ].size_sum); in ceph_mdsc_send_metrics()
165 /* encode the write io size metric */ in ceph_mdsc_send_metrics()
167 wsize->header.type = cpu_to_le32(CLIENT_METRIC_TYPE_WRITE_IO_SIZES); in ceph_mdsc_send_metrics()
168 wsize->header.ver = 1; in ceph_mdsc_send_metrics()
169 wsize->header.compat = 1; in ceph_mdsc_send_metrics()
170 wsize->header.data_len = cpu_to_le32(sizeof(*wsize) - header_len); in ceph_mdsc_send_metrics()
171 wsize->total_ops = cpu_to_le64(m->metric[METRIC_WRITE].total); in ceph_mdsc_send_metrics()
172 wsize->total_size = cpu_to_le64(m->metric[METRIC_WRITE].size_sum); in ceph_mdsc_send_metrics()
175 put_unaligned_le32(items, &head->num); in ceph_mdsc_send_metrics()
176 msg->front.iov_len = len; in ceph_mdsc_send_metrics()
177 msg->hdr.version = cpu_to_le16(1); in ceph_mdsc_send_metrics()
178 msg->hdr.compat_version = cpu_to_le16(1); in ceph_mdsc_send_metrics()
179 msg->hdr.front_len = cpu_to_le32(msg->front.iov_len); in ceph_mdsc_send_metrics()
180 ceph_con_send(&s->s_con, msg); in ceph_mdsc_send_metrics()
191 mutex_lock(&mdsc->mutex); in metric_get_session()
192 for (i = 0; i < mdsc->max_sessions; i++) { in metric_get_session()
203 test_bit(CEPHFS_FEATURE_METRIC_COLLECT, &s->s_features)) { in metric_get_session()
204 mdsc->metric.session = s; in metric_get_session()
210 mutex_unlock(&mdsc->mutex); in metric_get_session()
220 if (mdsc->stopping || disable_send_metrics) in metric_delayed_work()
223 if (!m->session || !check_session_state(m->session)) { in metric_delayed_work()
224 if (m->session) { in metric_delayed_work()
225 ceph_put_mds_session(m->session); in metric_delayed_work()
226 m->session = NULL; in metric_delayed_work()
230 if (m->session) { in metric_delayed_work()
231 ceph_mdsc_send_metrics(mdsc, m->session); in metric_delayed_work()
242 return -EINVAL; in ceph_metric_init()
244 atomic64_set(&m->total_dentries, 0); in ceph_metric_init()
245 ret = percpu_counter_init(&m->d_lease_hit, 0, GFP_KERNEL); in ceph_metric_init()
249 ret = percpu_counter_init(&m->d_lease_mis, 0, GFP_KERNEL); in ceph_metric_init()
253 atomic64_set(&m->total_caps, 0); in ceph_metric_init()
254 ret = percpu_counter_init(&m->i_caps_hit, 0, GFP_KERNEL); in ceph_metric_init()
258 ret = percpu_counter_init(&m->i_caps_mis, 0, GFP_KERNEL); in ceph_metric_init()
263 metric = &m->metric[i]; in ceph_metric_init()
264 spin_lock_init(&metric->lock); in ceph_metric_init()
265 metric->size_sum = 0; in ceph_metric_init()
266 metric->size_min = U64_MAX; in ceph_metric_init()
267 metric->size_max = 0; in ceph_metric_init()
268 metric->total = 0; in ceph_metric_init()
269 metric->latency_sum = 0; in ceph_metric_init()
270 metric->latency_avg = 0; in ceph_metric_init()
271 metric->latency_sq_sum = 0; in ceph_metric_init()
272 metric->latency_min = KTIME_MAX; in ceph_metric_init()
273 metric->latency_max = 0; in ceph_metric_init()
276 atomic64_set(&m->opened_files, 0); in ceph_metric_init()
277 ret = percpu_counter_init(&m->opened_inodes, 0, GFP_KERNEL); in ceph_metric_init()
280 ret = percpu_counter_init(&m->total_inodes, 0, GFP_KERNEL); in ceph_metric_init()
284 m->session = NULL; in ceph_metric_init()
285 INIT_DELAYED_WORK(&m->delayed_work, metric_delayed_work); in ceph_metric_init()
290 percpu_counter_destroy(&m->opened_inodes); in ceph_metric_init()
292 percpu_counter_destroy(&m->i_caps_mis); in ceph_metric_init()
294 percpu_counter_destroy(&m->i_caps_hit); in ceph_metric_init()
296 percpu_counter_destroy(&m->d_lease_mis); in ceph_metric_init()
298 percpu_counter_destroy(&m->d_lease_hit); in ceph_metric_init()
308 cancel_delayed_work_sync(&m->delayed_work); in ceph_metric_destroy()
310 percpu_counter_destroy(&m->total_inodes); in ceph_metric_destroy()
311 percpu_counter_destroy(&m->opened_inodes); in ceph_metric_destroy()
312 percpu_counter_destroy(&m->i_caps_mis); in ceph_metric_destroy()
313 percpu_counter_destroy(&m->i_caps_hit); in ceph_metric_destroy()
314 percpu_counter_destroy(&m->d_lease_mis); in ceph_metric_destroy()
315 percpu_counter_destroy(&m->d_lease_hit); in ceph_metric_destroy()
317 ceph_put_mds_session(m->session); in ceph_metric_destroy()
320 #define METRIC_UPDATE_MIN_MAX(min, max, new) \ argument
324 if (unlikely(new > max)) \
325 max = new; \
336 /* the sq is (lat - old_avg) * (lat - new_avg) */ in __update_mean_and_stdev()
337 avg = *lavg + div64_s64(lat - *lavg, total); in __update_mean_and_stdev()
338 *sq_sump += (lat - *lavg)*(lat - avg); in __update_mean_and_stdev()
345 unsigned int size, int rc) in ceph_update_metrics() argument
350 if (unlikely(rc < 0 && rc != -ENOENT && rc != -ETIMEDOUT)) in ceph_update_metrics()
353 spin_lock(&m->lock); in ceph_update_metrics()
354 total = ++m->total; in ceph_update_metrics()
355 m->size_sum += size; in ceph_update_metrics()
356 METRIC_UPDATE_MIN_MAX(m->size_min, m->size_max, size); in ceph_update_metrics()
357 m->latency_sum += lat; in ceph_update_metrics()
358 METRIC_UPDATE_MIN_MAX(m->latency_min, m->latency_max, lat); in ceph_update_metrics()
359 __update_mean_and_stdev(total, &m->latency_avg, &m->latency_sq_sum, in ceph_update_metrics()
361 spin_unlock(&m->lock); in ceph_update_metrics()