|
@@ -271,6 +271,79 @@ TRACE_EVENT(bdi_dirty_ratelimit,
|
|
|
)
|
|
|
);
|
|
|
|
|
|
+TRACE_EVENT(balance_dirty_pages,
|
|
|
+
|
|
|
+ TP_PROTO(struct backing_dev_info *bdi,
|
|
|
+ unsigned long thresh,
|
|
|
+ unsigned long bg_thresh,
|
|
|
+ unsigned long dirty,
|
|
|
+ unsigned long bdi_thresh,
|
|
|
+ unsigned long bdi_dirty,
|
|
|
+ unsigned long dirty_ratelimit,
|
|
|
+ unsigned long task_ratelimit,
|
|
|
+ unsigned long dirtied,
|
|
|
+ long pause,
|
|
|
+ unsigned long start_time),
|
|
|
+
|
|
|
+ TP_ARGS(bdi, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty,
|
|
|
+ dirty_ratelimit, task_ratelimit,
|
|
|
+ dirtied, pause, start_time),
|
|
|
+
|
|
|
+ TP_STRUCT__entry(
|
|
|
+ __array( char, bdi, 32)
|
|
|
+ __field(unsigned long, limit)
|
|
|
+ __field(unsigned long, setpoint)
|
|
|
+ __field(unsigned long, dirty)
|
|
|
+ __field(unsigned long, bdi_setpoint)
|
|
|
+ __field(unsigned long, bdi_dirty)
|
|
|
+ __field(unsigned long, dirty_ratelimit)
|
|
|
+ __field(unsigned long, task_ratelimit)
|
|
|
+ __field(unsigned int, dirtied)
|
|
|
+ __field(unsigned int, dirtied_pause)
|
|
|
+ __field(unsigned long, paused)
|
|
|
+ __field( long, pause)
|
|
|
+ ),
|
|
|
+
|
|
|
+ TP_fast_assign(
|
|
|
+ unsigned long freerun = (thresh + bg_thresh) / 2;
|
|
|
+ strlcpy(__entry->bdi, dev_name(bdi->dev), 32);
|
|
|
+
|
|
|
+ __entry->limit = global_dirty_limit;
|
|
|
+ __entry->setpoint = (global_dirty_limit + freerun) / 2;
|
|
|
+ __entry->dirty = dirty;
|
|
|
+ __entry->bdi_setpoint = __entry->setpoint *
|
|
|
+ bdi_thresh / (thresh + 1);
|
|
|
+ __entry->bdi_dirty = bdi_dirty;
|
|
|
+ __entry->dirty_ratelimit = KBps(dirty_ratelimit);
|
|
|
+ __entry->task_ratelimit = KBps(task_ratelimit);
|
|
|
+ __entry->dirtied = dirtied;
|
|
|
+ __entry->dirtied_pause = current->nr_dirtied_pause;
|
|
|
+ __entry->pause = pause * 1000 / HZ;
|
|
|
+ __entry->paused = (jiffies - start_time) * 1000 / HZ;
|
|
|
+ ),
|
|
|
+
|
|
|
+
|
|
|
+ TP_printk("bdi %s: "
|
|
|
+ "limit=%lu setpoint=%lu dirty=%lu "
|
|
|
+ "bdi_setpoint=%lu bdi_dirty=%lu "
|
|
|
+ "dirty_ratelimit=%lu task_ratelimit=%lu "
|
|
|
+ "dirtied=%u dirtied_pause=%u "
|
|
|
+ "paused=%lu pause=%ld",
|
|
|
+ __entry->bdi,
|
|
|
+ __entry->limit,
|
|
|
+ __entry->setpoint,
|
|
|
+ __entry->dirty,
|
|
|
+ __entry->bdi_setpoint,
|
|
|
+ __entry->bdi_dirty,
|
|
|
+ __entry->dirty_ratelimit,
|
|
|
+ __entry->task_ratelimit,
|
|
|
+ __entry->dirtied,
|
|
|
+ __entry->dirtied_pause,
|
|
|
+ __entry->paused, /* ms */
|
|
|
+ __entry->pause /* ms */
|
|
|
+ )
|
|
|
+);
|
|
|
+
|
|
|
DECLARE_EVENT_CLASS(writeback_congest_waited_template,
|
|
|
|
|
|
TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
|