aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFengguang Wu <fengguang.wu@intel.com>2011-10-19 13:34:48 -0600
committerFengguang Wu <fengguang.wu@intel.com>2012-03-28 19:52:05 +0800
commit42a598cb0cfc1b03a9c0db3461d95bdbbe1981f9 (patch)
tree83965f5aa6813c836942e4bf6b877ab7289b304f
parent61ff4284697ed4b99a1bdbe0bddca2bbd99a0b99 (diff)
downloadlinux-buffered-write-io-controller.tar.gz
blk-cgroup: buffered write IO controller - debug tracebuffered-write-io-controller
test-blkio-cgroup.sh #!/bin/sh mount /dev/sda7 /fs echo 1 > /debug/tracing/events/writeback/balance_dirty_pages/enable echo 1 > /debug/tracing/events/writeback/blkcg_dirty_ratelimit/enable rmdir /cgroup/buffered_write mkdir /cgroup/buffered_write echo $$ > /cgroup/buffered_write/tasks echo $((2<<20)) > /cgroup/buffered_write/blkio.throttle.buffered_write_bps dd if=/dev/zero of=/fs/zero1 bs=1M count=100 & dd if=/dev/zero of=/fs/zero2 bs=1M count=100 & run 1: 104857600 bytes (105 MB) copied, 97.8103 s, 1.1 MB/s 104857600 bytes (105 MB) copied, 97.9835 s, 1.1 MB/s run 2: 104857600 bytes (105 MB) copied, 98.5704 s, 1.1 MB/s 104857600 bytes (105 MB) copied, 98.6268 s, 1.1 MB/s average bps: 100MiB / 98.248s = 1.02MiB/s run 1 trace: dd-3485 [000] .... 658.737063: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1932 dirty_ratelimit=1064 balanced_dirty_ratelimit=1088 dd-3485 [000] .... 658.976945: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2000 dirty_ratelimit=1076 balanced_dirty_ratelimit=1084 dd-3485 [000] .... 659.212830: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2440 dirty_ratelimit=992 balanced_dirty_ratelimit=900 dd-3485 [002] .... 659.470651: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1860 dirty_ratelimit=1044 balanced_dirty_ratelimit=1088 dd-3485 [002] .... 659.714535: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2360 dirty_ratelimit=976 balanced_dirty_ratelimit=904 dd-3485 [002] .... 659.976381: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1832 dirty_ratelimit=1036 balanced_dirty_ratelimit=1088 dd-3485 [000] .... 660.222254: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2340 dirty_ratelimit=972 balanced_dirty_ratelimit=904 dd-3485 [000] .... 660.484089: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1464 dirty_ratelimit=1164 balanced_dirty_ratelimit=1352 dd-3485 [000] .... 660.701984: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2640 dirty_ratelimit=1036 balanced_dirty_ratelimit=900 dd-3485 [000] .... 660.947856: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1948 dirty_ratelimit=1064 balanced_dirty_ratelimit=1084 dd-3485 [000] .... 661.187727: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2000 dirty_ratelimit=1076 balanced_dirty_ratelimit=1084 dd-3485 [000] .... 661.423572: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2440 dirty_ratelimit=992 balanced_dirty_ratelimit=900 dd-3485 [000] .... 661.681431: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2232 dirty_ratelimit=952 balanced_dirty_ratelimit=908 dd-3485 [002] .... 661.949290: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1432 dirty_ratelimit=1156 balanced_dirty_ratelimit=1356 dd-3485 [002] .... 662.169176: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2616 dirty_ratelimit=1032 balanced_dirty_ratelimit=900 dd-3485 [000] .... 662.417016: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2320 dirty_ratelimit=972 balanced_dirty_ratelimit=908 dd-3485 [000] .... 662.678903: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=1464 dirty_ratelimit=1164 balanced_dirty_ratelimit=1352 dd-3485 [000] .... 662.896764: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2640 dirty_ratelimit=1036 balanced_dirty_ratelimit=900 dd-3485 [002] .... 663.142644: blkcg_dirty_ratelimit: kbps=2048 dirty_rate=2340 dirty_ratelimit=972 balanced_dirty_ratelimit=904 It looks good enough as a proposal. Could be made more accurate if necessary. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
-rw-r--r--include/trace/events/writeback.h34
-rw-r--r--mm/page-writeback.c2
2 files changed, 36 insertions, 0 deletions
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
index 5973410e8f8cf..3f25d8743fb80 100644
--- a/include/trace/events/writeback.h
+++ b/include/trace/events/writeback.h
@@ -249,6 +249,40 @@ TRACE_EVENT(global_dirty_state,
#define KBps(x) ((x) << (PAGE_SHIFT - 10))
+TRACE_EVENT(blkcg_dirty_ratelimit,
+
+ TP_PROTO(unsigned long bps,
+ unsigned long dirty_rate,
+ unsigned long dirty_ratelimit,
+ unsigned long balanced_dirty_ratelimit),
+
+ TP_ARGS(bps, dirty_rate, dirty_ratelimit, balanced_dirty_ratelimit),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, kbps)
+ __field(unsigned long, dirty_rate)
+ __field(unsigned long, dirty_ratelimit)
+ __field(unsigned long, balanced_dirty_ratelimit)
+ ),
+
+ TP_fast_assign(
+ __entry->kbps = bps >> 10;
+ __entry->dirty_rate = KBps(dirty_rate);
+ __entry->dirty_ratelimit = KBps(dirty_ratelimit);
+ __entry->balanced_dirty_ratelimit =
+ KBps(balanced_dirty_ratelimit);
+ ),
+
+ TP_printk("kbps=%lu dirty_rate=%lu "
+ "dirty_ratelimit=%lu "
+ "balanced_dirty_ratelimit=%lu",
+ __entry->kbps,
+ __entry->dirty_rate,
+ __entry->dirty_ratelimit,
+ __entry->balanced_dirty_ratelimit
+ )
+);
+
TRACE_EVENT(bdi_dirty_ratelimit,
TP_PROTO(struct backing_dev_info *bdi,
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 6900135a784c7..ea47aa8d91860 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1163,6 +1163,8 @@ static void blkcg_update_dirty_ratelimit(struct blkio_cgroup *blkcg,
ratelimit >>= PAGE_SHIFT;
blkcg->dirty_ratelimit = (blkcg->dirty_ratelimit + ratelimit) / 2 + 1;
+ trace_blkcg_dirty_ratelimit(bps, dirty_rate,
+ blkcg->dirty_ratelimit, ratelimit);
}
void blkcg_update_bandwidth(struct blkio_cgroup *blkcg)