第10章 cgroupfs を使用して cgroup を手動で管理する


cgroupfs 仮想ファイルシステムにディレクトリーを作成することにより、システム上の cgroup 階層を管理できます。ファイルシステムはデフォルトで /sys/fs/cgroup/ ディレクトリーにマウントされ、専用の制御ファイルで必要な設定を指定できます。

重要

一般に、Red Hat では、システムリソースの使用を制御するために systemd を使用することを推奨します。cgroups 仮想ファイルシステムを手動で設定する必要があるのは、特別な場合のみです。たとえば、cgroup-v2 階層に同等のコントローラーが存在しない cgroup-v1 コントローラーを使用する必要がある場合などです。

10.1. cgroups-v2 ファイルシステムでの cgroup の作成とコントローラーの有効化

コントロールグループ (cgroups) を管理するには、cgroups 仮想ファイルシステム (通常は /sys/fs/cgroup/) にディレクトリーを作成または削除します。コントローラーの設定を使用するには、子 cgroups に対してその設定を有効にします。ファイルを整理し、コントローラーの使用を最適化するために、少なくとも 2 階層の子 cgroups を作成してください。

前提条件

  • システムの root 権限がある。

手順

  1. /sys/fs/cgroup/Example/ ディレクトリーを作成します。

    # mkdir /sys/fs/cgroup/Example/

    /sys/fs/cgroup/Example/ ディレクトリーはサブグループを定義します。/sys/fs/cgroup/Example/ ディレクトリーを作成すると、一部の cgroups-v2 インターフェイスファイルがディレクトリーに自動的に作成されます。/sys/fs/cgroup/Example/ ディレクトリーには、メモリーコントローラープロセス ID コントローラー用のコントローラー固有のファイルも含まれています。

  2. オプション: 新しく作成された子コントロールグループを確認します。

    # ll /sys/fs/cgroup/Example/
    -r--r--r--. 1 root root 0 Jun  1 10:33 cgroup.controllers
    -r--r--r--. 1 root root 0 Jun  1 10:33 cgroup.events
    -rw-r--r--. 1 root root 0 Jun  1 10:33 cgroup.freeze
    -rw-r--r--. 1 root root 0 Jun  1 10:33 cgroup.procs
    ...
    -rw-r--r--. 1 root root 0 Jun  1 10:33 cgroup.subtree_control
    -r--r--r--. 1 root root 0 Jun  1 10:33 memory.events.local
    -rw-r--r--. 1 root root 0 Jun  1 10:33 memory.high
    -rw-r--r--. 1 root root 0 Jun  1 10:33 memory.low
    ...
    -r--r--r--. 1 root root 0 Jun  1 10:33 pids.current
    -r--r--r--. 1 root root 0 Jun  1 10:33 pids.events
    -rw-r--r--. 1 root root 0 Jun  1 10:33 pids.max

    この出力例には、cgroup.procscgroup.controllers などの一般的な cgroup 制御インターフェイスファイルが表示されています。これらのファイルは、有効なコントローラーに関係なく、すべてのコントロールグループに共通です。

    memory.highpids.max などのファイルは、ルートコントロールグループ (/sys/fs/cgroup/) にある memory および pids コントローラーに関連しており、systemd によってデフォルトで有効になります。

    デフォルトでは、新しく作成された子グループは、親の cgroup からすべての設定を継承します。この場合、ルート cgroup からの制限はありません。

  3. 必要なコントローラーが /sys/fs/cgroup/cgroup.controllers ファイルで使用可能であることを確認します。

    # cat /sys/fs/cgroup/cgroup.controllers
    cpuset cpu io memory hugetlb pids rdma
  4. 必要なコントローラーを有効にします。この例では、cpu および cpuset コントローラーです。

    # echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control
    # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control

    これらのコマンドにより、/sys/fs/cgroup/ ルートコントロールグループ直下のサブグループに対して cpu および cpuset コントローラーが有効になります。これには、新しく作成された Example コントロールグループが含まれます。サブグループ で指定した各プロセスに対して、基準に基づいてコントロールチェックを適用できます。

    ユーザーは、任意のレベルで cgroup.subtree_control を読み取ることで、直下の子グループで有効化できるコントローラーを把握できます。

    注記

    デフォルトでは、ルートコントロールグループの /sys/fs/cgroup/cgroup.subtree_control ファイルには memorypids コントローラーが含まれます。

  5. Example コントロールグループの子 cgroups に必要なコントローラーを有効にします。

    # echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control

    このコマンドにより、直下のサブコントロールグループに、(memory または pids コントローラーではなく) CPU 時間の配分の調整に関係するコントローラー だけ が設定されるようになります。

  6. /sys/fs/cgroup/Example/tasks/ ディレクトリーを作成します。

    # mkdir /sys/fs/cgroup/Example/tasks/

    /sys/fs/cgroup/Example/tasks/ ディレクトリーは、cpu および cpuset コントローラーにのみ関連するファイルを持つサブグループを定義します。これで、このコントロールグループにプロセスを割り当て、プロセスに対して cpu および cpuset コントローラーオプションを使用できるようになります。

  7. オプション: 子コントロールグループを確認します。

    # ll /sys/fs/cgroup/Example/tasks
    -r--r--r--. 1 root root 0 Jun  1 11:45 cgroup.controllers
    -r--r--r--. 1 root root 0 Jun  1 11:45 cgroup.events
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.freeze
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.max.depth
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.max.descendants
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.procs
    -r--r--r--. 1 root root 0 Jun  1 11:45 cgroup.stat
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.subtree_control
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.threads
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cgroup.type
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpu.max
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpu.pressure
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpuset.cpus
    -r--r--r--. 1 root root 0 Jun  1 11:45 cpuset.cpus.effective
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpuset.cpus.partition
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpuset.mems
    -r--r--r--. 1 root root 0 Jun  1 11:45 cpuset.mems.effective
    -r--r--r--. 1 root root 0 Jun  1 11:45 cpu.stat
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpu.weight
    -rw-r--r--. 1 root root 0 Jun  1 11:45 cpu.weight.nice
    -rw-r--r--. 1 root root 0 Jun  1 11:45 io.pressure
    -rw-r--r--. 1 root root 0 Jun  1 11:45 memory.pressure
    重要

    cpu コントローラーは、該当のサブコントロールグループに、同じ CPU の CPU 時間を取り合うプロセスが 2 つ以上ある場合にのみ、有効になります。

検証

  • オプション: 必要なコントローラーのみがアクティブになっている新しい cgroup が作成されたことを確認します。

    # cat /sys/fs/cgroup/Example/tasks/cgroup.controllers
    cpuset cpu
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る