Linux

我無法讓 cgroup blkio 限制子 cgroup 中程序的 iops

  • August 14, 2019

我無法讓 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 5sdc 的 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

當設備用作文件系統時,這將限制吞吐量。

引用自:https://serverfault.com/questions/842833