我无法让 cgroup blkio 限制子 cgroup 中进程的 iops

我无法让 cgroup blkio 限制子 cgroup 中进程的 iops

我无法让 cgroup blkio 限制子 cgroup 中进程的 iops。我使用的是 CentOS 7,3.10.0-229。我创建了 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 个进程正在使用 blkio:user.slice/test1 cgroup 中运行ps eo pid,user,args,cgroup

当我执行此操作时iostat 5,sdc 的 tps 数量为 400 到 600,这与我在 test1 cgroup 之外运行它们时的结果相同。如果我在或cgroup 中执行此操作echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device并运行它们,我会得到相同的结果。但是,如果我使用 blkio 的根节点进行节流,然后运行 ​​stress-ng 进程,则显示 sdc 的 tps 为 10-11。user.sliceuser.slice/test1echo 8:32 10 > /sys/fs/cgroup/blkio/blkio.throttle.{read|write}_iops_deviceiostat 5

blkio 节流是否仅在根级别起作用?手册页似乎没有提到这一点。

答案1

我从这个问题的答案中了解到问题,内核缓冲绕过了 blkio 系统。使用fio无缓冲和 directio,我能够将设备的 iops 限制为每秒 10 次,使用echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device

答案2

我得到了和你相同的结果,但发现如果我使用

blkio.throttle.{读取|写入}_bps_device

当设备用作文件系统时,这将限制吞吐量。

相关内容