我無法讓 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 之外執行它們時相同。如果我這樣做並在or cgroupecho 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device
中執行它們,我會得到相同的結果。但是,如果我在 blkio 的根目錄下使用,然後執行 stress-ng 程序,則顯示 sdc 的 tps 為 10-11。user.slice``user.slice/test1``echo 8:32 10 > /sys/fs/cgroup/blkio/blkio.throttle.{read|write}_iops_device``iostat 5
blkio 節流僅在根級別有效嗎?手冊頁似乎沒有暗示這一點。
所以我從這個問題的答案中了解到的問題是核心緩衝繞過了 blkio 系統。在沒有緩沖和方向的情況下使用
fio
我能夠將設備的 iops 限制為每秒 10 次使用echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device
我得到了和你一樣的結果,但發現如果我使用
blkio.throttle.{read|write}_bps_device
當設備用作文件系統時,這將限制吞吐量。