Systemd
如何使用 systemd 限制 IO 頻寬?
我正在嘗試限制服務(或程序/命令)的 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-run --scope -p IOWriteBandwidthMax='/dev/sda 10M' time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync
為使用者執行
systemd
限制不起作用,因為預設情況下使用者無法控制IO。Arch wiki 有一個有用的地方:https://wiki.archlinux.org/title/cgroups#As_unprivileged_user
有一個建議將委託用於使用者服務。此外,對於任何程序,都可以使用控制組(就像在這篇文章中一樣),並且使用者不能直接使用它來控制 IO 和設置限制。