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