The following solution works for me. I use the cgroups to limit the amount of memory dd can use. That shows that there is a problem with the kernel otherwise allowing the page cache to take _all_ the available kernel memory.
mkdir -p /cgroups mount -t cgroup none /cgroups -o memory mkdir 0 echo $$ > /cgroups/0/tasks echo 4M > /cgroups/0/memory.limit_in_bytes dd if=/dev/zero of=/tmp/bigfile bs=1024k count=20480
The same works with the fio "ssh" test case when run under the cgroups limitations :
write: io=10240MiB, bw=34349KiB/s, iops=32, runt=312595msec read : io=2068KiB, bw=404KiB/s, iops=16, runt= 5239msec read : io=2048KiB, bw=598KiB/s, iops=25, runt= 3505msec read : io=2056KiB, bw=283KiB/s, iops=12, runt= 7437msec read : io=2056KiB, bw=542KiB/s, iops=21, runt= 3879msec read : io=2060KiB, bw=388KiB/s, iops=16, runt= 5431msec read : io=2052KiB, bw=591KiB/s, iops=25, runt= 3554msec read : io=2076KiB, bw=375KiB/s, iops=15, runt= 5658msec read : io=2048KiB, bw=522KiB/s, iops=19, runt= 4011msec read : io=2080KiB, bw=468KiB/s, iops=19, runt= 4548msec read : io=2068KiB, bw=406KiB/s, iops=16, runt= 5206msec read : io=2080KiB, bw=412KiB/s, iops=17, runt= 5161msec read : io=2068KiB, bw=410KiB/s, iops=18, runt= 5159msec read : io=2064KiB, bw=320KiB/s, iops=13, runt= 6603msec read : io=2064KiB, bw=356KiB/s, iops=13, runt= 5924msec read : io=2052KiB, bw=565KiB/s, iops=22, runt= 3716msec read : io=2060KiB, bw=396KiB/s, iops=18, runt= 5321msec read : io=2048KiB, bw=507KiB/s, iops=19, runt= 4129msec read : io=2048KiB, bw=302KiB/s, iops=12, runt= 6924msec read : io=2060KiB, bw=497KiB/s, iops=20, runt= 4243msec read : io=2072KiB, bw=3138KiB/s, iops=130, runt= 676msec read : io=2048KiB, bw=3472KiB/s, iops=130, runt= 604msec read : io=2060KiB, bw=4080KiB/s, iops=172, runt= 517msec read : io=2052KiB, bw=4227KiB/s, iops=171, runt= 497msec read : io=2048KiB, bw=3744KiB/s, iops=166, runt= 560msec read : io=2076KiB, bw=4201KiB/s, iops=169, runt= 506msec read : io=2052KiB, bw=3531KiB/s, iops=159, runt= 595msec
See Documentation/cgroups/memory.txt for more details.
Mathieu
The following solution works for me. I use the cgroups to limit the amount of memory dd can use. That shows that there is a problem with the kernel otherwise allowing the page cache to take _all_ the available kernel memory.
mkdir -p /cgroups 0/memory. limit_in_ bytes
mount -t cgroup none /cgroups -o memory
mkdir 0
echo $$ > /cgroups/0/tasks
echo 4M > /cgroups/
dd if=/dev/zero of=/tmp/bigfile bs=1024k count=20480
The same works with the fio "ssh" test case when run under the cgroups limitations :
write: io=10240MiB, bw=34349KiB/s, iops=32, runt=312595msec
read : io=2068KiB, bw=404KiB/s, iops=16, runt= 5239msec
read : io=2048KiB, bw=598KiB/s, iops=25, runt= 3505msec
read : io=2056KiB, bw=283KiB/s, iops=12, runt= 7437msec
read : io=2056KiB, bw=542KiB/s, iops=21, runt= 3879msec
read : io=2060KiB, bw=388KiB/s, iops=16, runt= 5431msec
read : io=2052KiB, bw=591KiB/s, iops=25, runt= 3554msec
read : io=2076KiB, bw=375KiB/s, iops=15, runt= 5658msec
read : io=2048KiB, bw=522KiB/s, iops=19, runt= 4011msec
read : io=2080KiB, bw=468KiB/s, iops=19, runt= 4548msec
read : io=2068KiB, bw=406KiB/s, iops=16, runt= 5206msec
read : io=2080KiB, bw=412KiB/s, iops=17, runt= 5161msec
read : io=2068KiB, bw=410KiB/s, iops=18, runt= 5159msec
read : io=2064KiB, bw=320KiB/s, iops=13, runt= 6603msec
read : io=2064KiB, bw=356KiB/s, iops=13, runt= 5924msec
read : io=2052KiB, bw=565KiB/s, iops=22, runt= 3716msec
read : io=2060KiB, bw=396KiB/s, iops=18, runt= 5321msec
read : io=2048KiB, bw=507KiB/s, iops=19, runt= 4129msec
read : io=2048KiB, bw=302KiB/s, iops=12, runt= 6924msec
read : io=2060KiB, bw=497KiB/s, iops=20, runt= 4243msec
read : io=2072KiB, bw=3138KiB/s, iops=130, runt= 676msec
read : io=2048KiB, bw=3472KiB/s, iops=130, runt= 604msec
read : io=2060KiB, bw=4080KiB/s, iops=172, runt= 517msec
read : io=2052KiB, bw=4227KiB/s, iops=171, runt= 497msec
read : io=2048KiB, bw=3744KiB/s, iops=166, runt= 560msec
read : io=2076KiB, bw=4201KiB/s, iops=169, runt= 506msec
read : io=2052KiB, bw=3531KiB/s, iops=159, runt= 595msec
See Documentation/ cgroups/ memory. txt for more details.
Mathieu