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 strlcpy(__entry->name, dev_name(bdi->dev), 37 ARRAY_SIZE(__entry->name)); 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", 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( 71 strlcpy(__entry->name, dev_name(bdi->dev), 72 ARRAY_SIZE(__entry->name)); 73 __entry->lat = div_u64(lat, 1000); 74 ), 75 76 TP_printk("%s: latency %lluus", __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( 108 strlcpy(__entry->name, dev_name(bdi->dev), 109 ARRAY_SIZE(__entry->name)); 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", 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( 144 strlcpy(__entry->name, dev_name(bdi->dev), 145 ARRAY_SIZE(__entry->name)); 146 __entry->status = status; 147 __entry->step = step; 148 __entry->inflight = inflight; 149 ), 150 151 TP_printk("%s: status=%u, step=%d, inflight=%u", __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> 159