我无法让cgroup blkio来扼杀子cgroup中进程的iops

我无法让cgroup blkio来扼杀子cgroup中进程的iops。 我正在使用CentOS 7,3.10.0-229。 我创build了cgroup /sys/fs/cgroup/blkio/user.slice/test1并执行

echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/test1/blkio.throttle.read_iops_device 

同样对于write_iops_device。 8:32对应于/ dev / sdc处的HDD。 然后使用stress-ng在/ srv / hdd-c中读取和写入驱动器

 cgexec -g blkio:user.slice/test1 stress-ng --temp-path /srv/hdd-c --hdd 15 -t 180 

 cgexec -g blkio:user.slice/test1 stress-ng --temp-path /srv/hdd-c --readahead 15 -t 180 

我确认启动的30个进程正在使用ps eo pid,user,args,cgroup在blkio:user.slice / test1 cgroup中运行。

当我做iostat 5 ,sdc的tps数量是400到600,这与我在test1 cgroup之外运行时相同。 我得到相同的结果,如果我echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device并运行它们在user.sliceuser.slice/test1 cgroup。 但是,如果我使用echo 8:32 10 > /sys/fs/cgroup/blkio/blkio.throttle.{read|write}_iops_device ,然后运行stress-ng进程, iostat 5显示tps对于sdc是10-11。

blkio节stream只能在根层面上工作吗? 手册页似乎没有暗示。

所以我从这个问题的答案中学到的问题是内核缓冲绕过了blkio系统。 使用fio而没有缓冲和定向function,我可以使用echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device将每个设备的iops节制到10个设备。 echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device