linux/include/trace/events/wbt.h
<<
>>
Prefs
   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 */
  15TRACE_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 */
  58TRACE_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 */
  87TRACE_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 */
 126TRACE_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