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