xref: /linux/fs/ceph/metric.h (revision 74cc09fd8d04c56b652cfb332adb61f10bc2c199)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _FS_CEPH_MDS_METRIC_H
3 #define _FS_CEPH_MDS_METRIC_H
4 
5 #include <linux/types.h>
6 #include <linux/percpu_counter.h>
7 #include <linux/ktime.h>
8 
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;
14 
15 	struct percpu_counter i_caps_hit;
16 	struct percpu_counter i_caps_mis;
17 
18 	spinlock_t read_latency_lock;
19 	u64 total_reads;
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;
24 
25 	spinlock_t write_latency_lock;
26 	u64 total_writes;
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;
31 
32 	spinlock_t metadata_latency_lock;
33 	u64 total_metadatas;
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;
38 };
39 
40 extern int ceph_metric_init(struct ceph_client_metric *m);
41 extern void ceph_metric_destroy(struct ceph_client_metric *m);
42 
43 static inline void ceph_update_cap_hit(struct ceph_client_metric *m)
44 {
45 	percpu_counter_inc(&m->i_caps_hit);
46 }
47 
48 static inline void ceph_update_cap_mis(struct ceph_client_metric *m)
49 {
50 	percpu_counter_inc(&m->i_caps_mis);
51 }
52 
53 extern void ceph_update_read_latency(struct ceph_client_metric *m,
54 				     ktime_t r_start, ktime_t r_end,
55 				     int rc);
56 extern void ceph_update_write_latency(struct ceph_client_metric *m,
57 				      ktime_t r_start, ktime_t r_end,
58 				      int rc);
59 extern void ceph_update_metadata_latency(struct ceph_client_metric *m,
60 				         ktime_t r_start, ktime_t r_end,
61 					 int rc);
62 #endif /* _FS_CEPH_MDS_METRIC_H */
63