On Fri, May 03, 2013 at 11:57:51AM -0700, Tejun Heo wrote: [..] > > # set limit to 1000000 bytes/second both in parent and child cgroup > > # dd if=/dev/vdb of=/dev/null iflag=direct > > > > I will capture blktrace and analyze it though to understand better > > what's happening. > > Try using larger block size. It looks like dispatch windows being > reset depending on timing is hurting the overall bandwidth. It > becomes pronounced with larger IOs. Ok, I tried dd with block size 1M and I can now see it happening. dd if=/dev/vdb of=/dev/null bs=1M iflag=direct dd program sends down 2-3 bios of 512K each. And then it is waiting for all the bios to finish before it issues more IO. So if three bios b1, b2, and b3 have been sent down, b4 does not get issued till b3 has finished. Hence following happens. T1 T2 T3 T4 T5 T6 T7 parent: b1 b2 b3 b4 b5 child: b1 b2 b3 b4 b5 So continuity breaks down because application is waiting for previous IO to finish. This forces expiry of existing time slices and new time slice start both in child and parent and penalty keep on increasing. Thanks Vivek _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/containers