]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
e34cbd30 JA |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM wbt | |
4 | ||
5 | #if !defined(_TRACE_WBT_H) || defined(TRACE_HEADER_MULTI_READ) | |
6 | #define _TRACE_WBT_H | |
7 | ||
8 | #include <linux/tracepoint.h> | |
9 | #include "../../../block/blk-wbt.h" | |
10 | ||
11 | /** | |
12 | * wbt_stat - trace stats for blk_wb | |
13 | * @stat: array of read/write stats | |
14 | */ | |
15 | TRACE_EVENT(wbt_stat, | |
16 | ||
17 | TP_PROTO(struct backing_dev_info *bdi, struct blk_rq_stat *stat), | |
18 | ||
19 | TP_ARGS(bdi, stat), | |
20 | ||
21 | TP_STRUCT__entry( | |
22 | __array(char, name, 32) | |
23 | __field(s64, rmean) | |
24 | __field(u64, rmin) | |
25 | __field(u64, rmax) | |
26 | __field(s64, rnr_samples) | |
27 | __field(s64, rtime) | |
28 | __field(s64, wmean) | |
29 | __field(u64, wmin) | |
30 | __field(u64, wmax) | |
31 | __field(s64, wnr_samples) | |
32 | __field(s64, wtime) | |
33 | ), | |
34 | ||
35 | TP_fast_assign( | |
4fdc202d BVA |
36 | strlcpy(__entry->name, dev_name(bdi->dev), |
37 | ARRAY_SIZE(__entry->name)); | |
e34cbd30 JA |
38 | __entry->rmean = stat[0].mean; |
39 | __entry->rmin = stat[0].min; | |
40 | __entry->rmax = stat[0].max; | |
41 | __entry->rnr_samples = stat[0].nr_samples; | |
42 | __entry->wmean = stat[1].mean; | |
43 | __entry->wmin = stat[1].min; | |
44 | __entry->wmax = stat[1].max; | |
45 | __entry->wnr_samples = stat[1].nr_samples; | |
46 | ), | |
47 | ||
48 | TP_printk("%s: rmean=%llu, rmin=%llu, rmax=%llu, rsamples=%llu, " | |
49 | "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu\n", | |
50 | __entry->name, __entry->rmean, __entry->rmin, __entry->rmax, | |
51 | __entry->rnr_samples, __entry->wmean, __entry->wmin, | |
52 | __entry->wmax, __entry->wnr_samples) | |
53 | ); | |
54 | ||
55 | /** | |
56 | * wbt_lat - trace latency event | |
57 | * @lat: latency trigger | |
58 | */ | |
59 | TRACE_EVENT(wbt_lat, | |
60 | ||
61 | TP_PROTO(struct backing_dev_info *bdi, unsigned long lat), | |
62 | ||
63 | TP_ARGS(bdi, lat), | |
64 | ||
65 | TP_STRUCT__entry( | |
66 | __array(char, name, 32) | |
67 | __field(unsigned long, lat) | |
68 | ), | |
69 | ||
70 | TP_fast_assign( | |
4fdc202d BVA |
71 | strlcpy(__entry->name, dev_name(bdi->dev), |
72 | ARRAY_SIZE(__entry->name)); | |
e34cbd30 JA |
73 | __entry->lat = div_u64(lat, 1000); |
74 | ), | |
75 | ||
76 | TP_printk("%s: latency %lluus\n", __entry->name, | |
77 | (unsigned long long) __entry->lat) | |
78 | ); | |
79 | ||
80 | /** | |
81 | * wbt_step - trace wb event step | |
82 | * @msg: context message | |
83 | * @step: the current scale step count | |
84 | * @window: the current monitoring window | |
85 | * @bg: the current background queue limit | |
86 | * @normal: the current normal writeback limit | |
87 | * @max: the current max throughput writeback limit | |
88 | */ | |
89 | TRACE_EVENT(wbt_step, | |
90 | ||
91 | TP_PROTO(struct backing_dev_info *bdi, const char *msg, | |
92 | int step, unsigned long window, unsigned int bg, | |
93 | unsigned int normal, unsigned int max), | |
94 | ||
95 | TP_ARGS(bdi, msg, step, window, bg, normal, max), | |
96 | ||
97 | TP_STRUCT__entry( | |
98 | __array(char, name, 32) | |
99 | __field(const char *, msg) | |
100 | __field(int, step) | |
101 | __field(unsigned long, window) | |
102 | __field(unsigned int, bg) | |
103 | __field(unsigned int, normal) | |
104 | __field(unsigned int, max) | |
105 | ), | |
106 | ||
107 | TP_fast_assign( | |
4fdc202d BVA |
108 | strlcpy(__entry->name, dev_name(bdi->dev), |
109 | ARRAY_SIZE(__entry->name)); | |
e34cbd30 JA |
110 | __entry->msg = msg; |
111 | __entry->step = step; | |
112 | __entry->window = div_u64(window, 1000); | |
113 | __entry->bg = bg; | |
114 | __entry->normal = normal; | |
115 | __entry->max = max; | |
116 | ), | |
117 | ||
118 | TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u\n", | |
119 | __entry->name, __entry->msg, __entry->step, __entry->window, | |
120 | __entry->bg, __entry->normal, __entry->max) | |
121 | ); | |
122 | ||
123 | /** | |
124 | * wbt_timer - trace wb timer event | |
125 | * @status: timer state status | |
126 | * @step: the current scale step count | |
127 | * @inflight: tracked writes inflight | |
128 | */ | |
129 | TRACE_EVENT(wbt_timer, | |
130 | ||
131 | TP_PROTO(struct backing_dev_info *bdi, unsigned int status, | |
132 | int step, unsigned int inflight), | |
133 | ||
134 | TP_ARGS(bdi, status, step, inflight), | |
135 | ||
136 | TP_STRUCT__entry( | |
137 | __array(char, name, 32) | |
138 | __field(unsigned int, status) | |
139 | __field(int, step) | |
140 | __field(unsigned int, inflight) | |
141 | ), | |
142 | ||
143 | TP_fast_assign( | |
4fdc202d BVA |
144 | strlcpy(__entry->name, dev_name(bdi->dev), |
145 | ARRAY_SIZE(__entry->name)); | |
e34cbd30 JA |
146 | __entry->status = status; |
147 | __entry->step = step; | |
148 | __entry->inflight = inflight; | |
149 | ), | |
150 | ||
151 | TP_printk("%s: status=%u, step=%d, inflight=%u\n", __entry->name, | |
152 | __entry->status, __entry->step, __entry->inflight) | |
153 | ); | |
154 | ||
155 | #endif /* _TRACE_WBT_H */ | |
156 | ||
157 | /* This part must be outside protection */ | |
158 | #include <trace/define_trace.h> |