1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _FS_CEPH_MDS_METRIC_H
3 #define _FS_CEPH_MDS_METRIC_H
5 #include <linux/types.h>
6 #include <linux/percpu_counter.h>
7 #include <linux/ktime.h>
9 /* This is the global metrics */
10 struct ceph_client_metric {
11 atomic64_t total_dentries;
12 struct percpu_counter d_lease_hit;
13 struct percpu_counter d_lease_mis;
15 struct percpu_counter i_caps_hit;
16 struct percpu_counter i_caps_mis;
18 spinlock_t read_latency_lock;
20 ktime_t read_latency_sum;
21 ktime_t read_latency_sq_sum;
22 ktime_t read_latency_min;
23 ktime_t read_latency_max;
25 spinlock_t write_latency_lock;
27 ktime_t write_latency_sum;
28 ktime_t write_latency_sq_sum;
29 ktime_t write_latency_min;
30 ktime_t write_latency_max;
32 spinlock_t metadata_latency_lock;
34 ktime_t metadata_latency_sum;
35 ktime_t metadata_latency_sq_sum;
36 ktime_t metadata_latency_min;
37 ktime_t metadata_latency_max;
40 extern int ceph_metric_init(struct ceph_client_metric *m);
41 extern void ceph_metric_destroy(struct ceph_client_metric *m);
43 static inline void ceph_update_cap_hit(struct ceph_client_metric *m)
45 percpu_counter_inc(&m->i_caps_hit);
48 static inline void ceph_update_cap_mis(struct ceph_client_metric *m)
50 percpu_counter_inc(&m->i_caps_mis);
53 extern void ceph_update_read_latency(struct ceph_client_metric *m,
54 ktime_t r_start, ktime_t r_end,
56 extern void ceph_update_write_latency(struct ceph_client_metric *m,
57 ktime_t r_start, ktime_t r_end,
59 extern void ceph_update_metadata_latency(struct ceph_client_metric *m,
60 ktime_t r_start, ktime_t r_end,
62 #endif /* _FS_CEPH_MDS_METRIC_H */