Red Hat Training

A Red Hat training course is available for RHEL 8

第24章 cgroups-v2 を使用したアプリケーションへの CPU 時間配分の制御

一部のアプリケーションが CPU 時間を多く使用し過ぎて、環境全体の健全性に悪影響を与える場合があります。アプリケーションを コントロールグループバージョン 2 (cgroups-v2) に配置し、それらのコントロールグループの CPU 制限を設定できます。その結果、アプリケーションの CPU 消費を調整できます。

ユーザーには、コントロールグループに割り当てられる CPU 時間の配分を調整する方法が 2 つあります。

  • CPU 帯域幅 の設定 (cpu.max コントローラーファイルの編集)
  • CPU の重み の設定 (cpu.weight コントローラーファイルの編集)

24.1. cgroups-v2 のマウント

RHEL 8 は、システムの起動プロセス中に、デフォルトで cgroup-v1 仮想ファイルシステムをマウントします。cgroup-v2 機能を使用してアプリケーションのリソースを制限するには、システムを手動で設定します。

前提条件

  • root 権限がある。

手順

  1. systemd システムおよびサービスマネージャーによるシステムブート中に、デフォルトで cgroups-v2 をマウントするようにシステムを設定します。

    # grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"

    これにより、必要なカーネルコマンドラインパラメーターが現在のブートエントリーに追加されます。

    systemd.unified_cgroup_hierarchy=1 パラメーターをすべてのカーネルブートエントリーに追加するには、次の手順に従います。

    # grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
  2. システムを再起動して、変更を有効にします。

検証手順

  1. 必要に応じて、cgroups-v2 ファイルシステムがマウントされていることを確認します。

    # mount -l | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)

    cgroups-v2 ファイルシステムが /sys/fs/cgroup/ ディレクトリーに正常にマウントされました。

  2. 必要に応じて、/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/ ディレクトリーはルートコントロールグループとも呼ばれ、デフォルトでは、インターフェイスファイル (cgroup で始まる) と、cpuset.cpus.effective などのコントローラー固有のファイルが含まれます。さらに、/sys/fs/cgroup/init.scope/sys/fs/cgroup/system.slice、および /sys/fs/cgroup/user.slice など、systemd に関連するディレクトリーがいくつかあります。