Skip to content

Commit b48c104

Browse files
author
Wu Fengguang
committed
writeback: trace event bdi_dirty_ratelimit
It helps understand how various throttle bandwidths are updated. Signed-off-by: Wu Fengguang <[email protected]>
1 parent 50657fc commit b48c104

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

include/trace/events/writeback.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,51 @@ TRACE_EVENT(global_dirty_state,
226226
)
227227
);
228228

229+
#define KBps(x) ((x) << (PAGE_SHIFT - 10))
230+
231+
TRACE_EVENT(bdi_dirty_ratelimit,
232+
233+
TP_PROTO(struct backing_dev_info *bdi,
234+
unsigned long dirty_rate,
235+
unsigned long task_ratelimit),
236+
237+
TP_ARGS(bdi, dirty_rate, task_ratelimit),
238+
239+
TP_STRUCT__entry(
240+
__array(char, bdi, 32)
241+
__field(unsigned long, write_bw)
242+
__field(unsigned long, avg_write_bw)
243+
__field(unsigned long, dirty_rate)
244+
__field(unsigned long, dirty_ratelimit)
245+
__field(unsigned long, task_ratelimit)
246+
__field(unsigned long, balanced_dirty_ratelimit)
247+
),
248+
249+
TP_fast_assign(
250+
strlcpy(__entry->bdi, dev_name(bdi->dev), 32);
251+
__entry->write_bw = KBps(bdi->write_bandwidth);
252+
__entry->avg_write_bw = KBps(bdi->avg_write_bandwidth);
253+
__entry->dirty_rate = KBps(dirty_rate);
254+
__entry->dirty_ratelimit = KBps(bdi->dirty_ratelimit);
255+
__entry->task_ratelimit = KBps(task_ratelimit);
256+
__entry->balanced_dirty_ratelimit =
257+
KBps(bdi->balanced_dirty_ratelimit);
258+
),
259+
260+
TP_printk("bdi %s: "
261+
"write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
262+
"dirty_ratelimit=%lu task_ratelimit=%lu "
263+
"balanced_dirty_ratelimit=%lu",
264+
__entry->bdi,
265+
__entry->write_bw, /* write bandwidth */
266+
__entry->avg_write_bw, /* avg write bandwidth */
267+
__entry->dirty_rate, /* bdi dirty rate */
268+
__entry->dirty_ratelimit, /* base ratelimit */
269+
__entry->task_ratelimit, /* ratelimit with position control */
270+
__entry->balanced_dirty_ratelimit /* the balanced ratelimit */
271+
)
272+
);
273+
229274
DECLARE_EVENT_CLASS(writeback_congest_waited_template,
230275

231276
TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),

mm/page-writeback.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,8 @@ static void bdi_update_dirty_ratelimit(struct backing_dev_info *bdi,
875875

876876
bdi->dirty_ratelimit = max(dirty_ratelimit, 1UL);
877877
bdi->balanced_dirty_ratelimit = balanced_dirty_ratelimit;
878+
879+
trace_bdi_dirty_ratelimit(bdi, dirty_rate, task_ratelimit);
878880
}
879881

880882
void __bdi_update_bandwidth(struct backing_dev_info *bdi,

0 commit comments

Comments
 (0)