サービス(またはプロセス/コマンド)の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を直接制御し、制限を設定することはできません。