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