我正在尝试限制服务(或进程/命令)的 IO 使用。(硬件设备上的 IO 读/写限制,不适用于网络。)
我从 systemd 找到了 IOAccounting:
systemd-run --scope --user -p "IOReadBandwidthMax=/dev/zero 1M" -p "IOAccounting=true" \
time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync
systemd-run --scope --user -p "IOWriteBandwidthMax=/dev/sdd 1M" -p "IOAccounting=true" \
time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync
该命令快速结束并报告 200/300 MB/s。当我运行命令时,结果完全相同,没有 systemd-run 包装器。
我还尝试编写没有 systemd-run 的 systemd 服务:IO 带宽限制不起作用。
你有什么建议吗?
运行系统测试
systemd
(需要 root 身份验证)表明 IO 限制有效,需要 10 秒:为用户运行
systemd
限制不起作用,因为默认情况下用户无法控制IO。Arch wiki 有一个有用的地方:https://wiki.archlinux.org/title/cgroups#As_unprivileged_user
有一个建议将委托用于用户服务。此外,对于任何进程,都可以使用控制组(就像在这篇文章中一样),并且用户不能直接使用它来控制 IO 和设置限制。