ユーザー間でリソースを公平に共有するようにcgroups v2を構成する

ユーザー間でリソースを公平に共有するようにcgroups v2を構成する

ユーザーのシステムリソースを制限する方法はありますか?ここで説明されているように、cgredサービスと/etc/cgconfig.confファイルを使用して、ユーザーの新しく作成された各プロセスを指定されたcgroupに強制する方法が過去にあったことがわかります。ユーザー間でリソースを公平に共有するようにcgroupをどのように設定しますか?

しかし、この方法は廃止されており、私が見つけた唯一の方法は、systemctl set-propertyユーティリティを使用して/sys/fs/cgroup/user.slice/user-${UID}.sliceでcgroup属性を変更することです。です。問題は、systemdがユーザーがログインしたときにのみこのcgroupを作成し、ユーザーがログアウトすると削除されることです。ログアウトしてもユーザーリソースを制限する方法を探しています。

答え1

私は解決策を見つけました。

  1. 各ユーザーのスライスプロファイルを作成します。

    sudo mkdir /etc/systemd/system/user-<ユーザーID>。一部
    sudo touch /etc/systemd/system/user-<ユーザーID>.slice.d/override.conf

  2. たとえば、次のようにリソース制御を構成します。

    echo "[Slice]
    Slice=user.slice
    MemoryHigh=2G
    CPUWeight=20" |  sudo tee /etc/systemd/system/user-<uid>.slice.d/override.conf
    
  1. 変更承認:
    systemctl daemon-reload
    

適切なユーザースライスcgroupプロパティを読み、選択した値と一致することを確認して有効であることを確認できます。たとえば、次のようになります。

cd /sys/fs/cgroup/user.slice/user-<uid>.slice
cat memory.low
cat cpu.weight

関連情報