Hi Vivek, To explore the possibility of an integrated async write cgroup IO controller in balance_dirty_pages(), I did the attached patches. They should serve it well to illustrate the basic ideas. It's based on Andrea's two supporting patches and a slightly simplified and improved version of this v6 patchset. root@fat ~# cat test-blkio-cgroup.sh #!/bin/sh mount /dev/sda7 /fs rmdir /cgroup/async_write mkdir /cgroup/async_write echo $$ > /cgroup/async_write/tasks # echo "8:16 1048576" > /cgroup/async_write/blkio.throttle.read_bps_device dd if=/dev/zero of=/fs/zero1 bs=1M count=100 & dd if=/dev/zero of=/fs/zero2 bs=1M count=100 & 2-dd case: root@fat ~# 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied100+0 records in 100+0 records out , 11.9477 s, 8.8 MB/s 104857600 bytes (105 MB) copied, 11.9496 s, 8.8 MB/s 1-dd case: root@fat ~# 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 6.21919 s, 16.9 MB/s The patch hard codes a limit of 16MiB/s or 16.8MB/s. So the 1-dd case is pretty accurate, and the 2-dd case is a bit leaked due to the time to take the throttle bandwidth from its initial value 16MiB/s to 8MiB/s. This could be compensated by some position control in future, so that it won't leak in normal cases. The main bits, blkcg_update_throttle_bandwidth() is in fact a minimal version of bdi_update_throttle_bandwidth(); blkcg_update_bandwidth() is also a cut-down version of bdi_update_bandwidth(). Thanks, Fengguang