第24章 cgroups-v2 を使用したアプリケーションへの CPU 時間配分の制御
一部のアプリケーションが CPU 時間を多く使用し過ぎて、環境全体の健全性に悪影響を与える場合があります。アプリケーションを コントロールグループバージョン 2 (cgroups-v2
) に配置し、それらのコントロールグループの CPU 制限を設定できます。その結果、アプリケーションの CPU 消費を調整できます。
ユーザーには、コントロールグループに割り当てられる CPU 時間の配分を調整する方法が 2 つあります。
24.1. cgroups-v2 のマウント
RHEL 8 は、システムの起動プロセス中に、デフォルトで cgroup-v1
仮想ファイルシステムをマウントします。cgroup-v2
機能を使用してアプリケーションのリソースを制限するには、システムを手動で設定します。システムリソースの使用を制御するには、systemd を使用します。特別な場合にのみ、cgroups 仮想ファイルシステムを手動で設定する必要があります。たとえば、cgroup-v2 階層に同等のものがない cgroup-v1 コントローラーを使用する必要がある場合です。
前提条件
- root 権限がある。
手順
systemd
システムおよびサービスマネージャーによるシステムブート中に、デフォルトでcgroups-v2
をマウントするようにシステムを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"
これにより、必要なカーネルコマンドラインパラメーターが現在のブートエントリーに追加されます。
systemd.unified_cgroup_hierarchy=1
パラメーターをすべてのカーネルブートエントリーに追加するには、次の手順に従います。Copy to Clipboard Copied! Toggle word wrap Toggle overflow grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
# grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
- システムを再起動して、変更を有効にします。
検証
cgroups-v2
ファイルシステムがマウントされていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mount -l | grep cgroup
# mount -l | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)
cgroups-v2
ファイルシステムが/sys/fs/cgroup/
ディレクトリーに正常にマウントされました。/sys/fs/cgroup/
ディレクトリーの内容を確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ll /sys/fs/cgroup/
# ll /sys/fs/cgroup/ -r—r—r--. 1 root root 0 Apr 29 12:03 cgroup.controllers -rw-r—r--. 1 root root 0 Apr 29 12:03 cgroup.max.depth -rw-r—r--. 1 root root 0 Apr 29 12:03 cgroup.max.descendants -rw-r—r--. 1 root root 0 Apr 29 12:03 cgroup.procs -r—r—r--. 1 root root 0 Apr 29 12:03 cgroup.stat -rw-r—r--. 1 root root 0 Apr 29 12:18 cgroup.subtree_control -rw-r—r--. 1 root root 0 Apr 29 12:03 cgroup.threads -rw-r—r--. 1 root root 0 Apr 29 12:03 cpu.pressure -r—r—r--. 1 root root 0 Apr 29 12:03 cpuset.cpus.effective -r—r—r--. 1 root root 0 Apr 29 12:03 cpuset.mems.effective -r—r—r--. 1 root root 0 Apr 29 12:03 cpu.stat drwxr-xr-x. 2 root root 0 Apr 29 12:03 init.scope -rw-r—r--. 1 root root 0 Apr 29 12:03 io.pressure -r—r—r--. 1 root root 0 Apr 29 12:03 io.stat -rw-r—r--. 1 root root 0 Apr 29 12:03 memory.pressure -r—r—r--. 1 root root 0 Apr 29 12:03 memory.stat drwxr-xr-x. 69 root root 0 Apr 29 12:03 system.slice drwxr-xr-x. 3 root root 0 Apr 29 12:18 user.slice
/sys/fs/cgroup/
ディレクトリー (root control group とも呼ばれる) は、デフォルトで、インターフェイスファイル (cgroup
で始まる) とcpuset.cpus.effective
などのコントローラー固有のファイルを提供します。さらに、/sys/fs/cgroup/init.scope
、/sys/fs/cgroup/system.slice
、および/sys/fs/cgroup/user.slice
など、systemd
に関連するディレクトリーがいくつかあります。
関連情報
-
cgroups(7)
、sysfs(5)
の man ページ