无法限制 cgroup 上的 IO。当设备存在时说 "No such device"。有什么问题吗?

Can't throttle IO on cgroup. Says "No such device" when device exists. What could be wrong?

我遵循的说明:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html

脚本 I 运行:

 
 BYTES_PER_SEC=1048576;
 
 MAJOR=259
 MINOR=1
 
 echo "device name:"
 udevadm info -rq name /sys/dev/block/$MAJOR:$MINOR
 echo ""
 echo "device numbers:"
 echo $MAJOR:$MINOR;
 echo ""
 
 sudo mount -t cgroup -o blkio none /sys/fs/cgroup/blkio;
 sudo echo "COMMAND TO BE EXECUTED:";
 sudo echo "$MAJOR:$MINOR  $BYTES_PER_SEC";
 sudo echo "$MAJOR:$MINOR  $BYTES_PER_SEC" > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
 sudo echo "$MAJOR:$MINOR  $BYTES_PER_SEC" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device

输出:

~/Desktop >>> sudo ./test.sh                                                                                                                                                                                   [1]
[sudo] password for brian: 
/dev/nvme0n1p1
device name: 259:1
mount: /sys/fs/cgroup/blkio: none already mounted on /sys/fs/bpf.
COMMAND TO BE EXECUTED:
259:1  1048576
echo: write error: No such device
echo: write error: No such device

不确定哪里出了问题。我在这里也使用 NixOS,所以不确定这是否会真正影响结果。

出现此错误是因为使用 cgroups 版本 1 限制 IO 的唯一方法是使用物理设备。我上面使用的主要和次要版本号是针对一个分区的。您需要为持有分区的物理设备选择主要和次要编号。