systemdを使用してIO帯域幅を制限する方法は?

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/300MB/s を報告します。コマンドを実行すると、systemd-runラッパーなしで結果がまったく同じになります。

また、systemd-runを使用せずにsystemdサービスを作成しようとしました。 IO帯域幅制限は機能しません。

おすすめメニューとは何ですか?

答え1

システムテストsystemd(ルート認証が必要)を実行すると、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を直接制御し、制限を設定することはできません。

関連情報