root/include/trace/events/wbt.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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\n",
  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\n", __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\n",
 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\n", __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>

/* [<][>][^][v][top][bottom][index][help] */