Systemd

如何使用 systemd 限制 IO 頻寬?

  • May 20, 2022

我正在嘗試限制服務(或程序/命令)的 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 和設置限制。

引用自:https://unix.stackexchange.com/questions/702902