xref: /openbmc/linux/include/trace/events/wbt.h (revision 1a59d1b8)
1 /* SPDX-License-Identifier: GPL-2.0 */
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(
36 		strncpy(__entry->name, dev_name(bdi->dev), 32);
37 		__entry->rmean		= stat[0].mean;
38 		__entry->rmin		= stat[0].min;
39 		__entry->rmax		= stat[0].max;
40 		__entry->rnr_samples	= stat[0].nr_samples;
41 		__entry->wmean		= stat[1].mean;
42 		__entry->wmin		= stat[1].min;
43 		__entry->wmax		= stat[1].max;
44 		__entry->wnr_samples	= stat[1].nr_samples;
45 	),
46 
47 	TP_printk("%s: rmean=%llu, rmin=%llu, rmax=%llu, rsamples=%llu, "
48 		  "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu\n",
49 		  __entry->name, __entry->rmean, __entry->rmin, __entry->rmax,
50 		  __entry->rnr_samples, __entry->wmean, __entry->wmin,
51 		  __entry->wmax, __entry->wnr_samples)
52 );
53 
54 /**
55  * wbt_lat - trace latency event
56  * @lat: latency trigger
57  */
58 TRACE_EVENT(wbt_lat,
59 
60 	TP_PROTO(struct backing_dev_info *bdi, unsigned long lat),
61 
62 	TP_ARGS(bdi, lat),
63 
64 	TP_STRUCT__entry(
65 		__array(char, name, 32)
66 		__field(unsigned long, lat)
67 	),
68 
69 	TP_fast_assign(
70 		strncpy(__entry->name, dev_name(bdi->dev), 32);
71 		__entry->lat = div_u64(lat, 1000);
72 	),
73 
74 	TP_printk("%s: latency %lluus\n", __entry->name,
75 			(unsigned long long) __entry->lat)
76 );
77 
78 /**
79  * wbt_step - trace wb event step
80  * @msg: context message
81  * @step: the current scale step count
82  * @window: the current monitoring window
83  * @bg: the current background queue limit
84  * @normal: the current normal writeback limit
85  * @max: the current max throughput writeback limit
86  */
87 TRACE_EVENT(wbt_step,
88 
89 	TP_PROTO(struct backing_dev_info *bdi, const char *msg,
90 		 int step, unsigned long window, unsigned int bg,
91 		 unsigned int normal, unsigned int max),
92 
93 	TP_ARGS(bdi, msg, step, window, bg, normal, max),
94 
95 	TP_STRUCT__entry(
96 		__array(char, name, 32)
97 		__field(const char *, msg)
98 		__field(int, step)
99 		__field(unsigned long, window)
100 		__field(unsigned int, bg)
101 		__field(unsigned int, normal)
102 		__field(unsigned int, max)
103 	),
104 
105 	TP_fast_assign(
106 		strncpy(__entry->name, dev_name(bdi->dev), 32);
107 		__entry->msg	= msg;
108 		__entry->step	= step;
109 		__entry->window	= div_u64(window, 1000);
110 		__entry->bg	= bg;
111 		__entry->normal	= normal;
112 		__entry->max	= max;
113 	),
114 
115 	TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u\n",
116 		  __entry->name, __entry->msg, __entry->step, __entry->window,
117 		  __entry->bg, __entry->normal, __entry->max)
118 );
119 
120 /**
121  * wbt_timer - trace wb timer event
122  * @status: timer state status
123  * @step: the current scale step count
124  * @inflight: tracked writes inflight
125  */
126 TRACE_EVENT(wbt_timer,
127 
128 	TP_PROTO(struct backing_dev_info *bdi, unsigned int status,
129 		 int step, unsigned int inflight),
130 
131 	TP_ARGS(bdi, status, step, inflight),
132 
133 	TP_STRUCT__entry(
134 		__array(char, name, 32)
135 		__field(unsigned int, status)
136 		__field(int, step)
137 		__field(unsigned int, inflight)
138 	),
139 
140 	TP_fast_assign(
141 		strncpy(__entry->name, dev_name(bdi->dev), 32);
142 		__entry->status		= status;
143 		__entry->step		= step;
144 		__entry->inflight	= inflight;
145 	),
146 
147 	TP_printk("%s: status=%u, step=%d, inflight=%u\n", __entry->name,
148 		  __entry->status, __entry->step, __entry->inflight)
149 );
150 
151 #endif /* _TRACE_WBT_H */
152 
153 /* This part must be outside protection */
154 #include <trace/define_trace.h>
155