第3章 libcgroup ツールの使用

以前のバージョンの Red Hat Enterprise Linux において cgroup 管理用の主なツールであった libcgroup パッケージは現在非推奨になっています。競合を避けるために、現在 systemd の排他的なドメインになっているデフォルトリソースコントローラー (Red Hat Enterprise Linux 7 で利用可能なコントローラー に記載) に libcgroup ツールは使用しないでください。libcgroup ツールを適用するための限られたスペースはありますが、このスペースは net_prio などの現在 systemd でサポートされていないコントローラーを管理する必要がある場合にのみ使用してください。
以下のセクションでは、デフォルトの階層のシステムとの競合を生じさせず関連するシナリオで libcgroup ツールを使用する方法について説明します。

注記

libcgroup ツールを使用するには、まず libcgroup および libcgroup-tools パッケージがシステム上にインストールされていることを確認します。これらをインストールするには root として以下を実行します。
~]# yum install libcgroup
~]# yum install libcgroup-tools

注記

net_prio コントローラーは、他のコントローラーのようにカーネルにコンパイルされません。これは、マウントを試行する前に読み込まれている必要のあるモジュールです。このモジュールを読み込むには、root として以下を入力します。
modprobe netprio_cgroup

3.1. 階層のマウント

自動的にマウントされないカーネルのリソースコントローラーを使用するには、このコントローラーを含む階層を作成する必要があります。/etc/cgconfig.conf 設定ファイルの mount セクションを編集することにより階層を追加したり、分離させたりします。この方法はコントローラーの接続を永続化します。つまり設定がシステムの起動後も保持されることを意味します。代替方法として、mount コマンドを使用して、現行セッション用にのみ一時的なマウントを作成することもできます。

cgconfig サービスの使用

libcgroup-tools パッケージと共にインストールされる cgconfig サービスは、追加のリソースコントローラーの階層をマウントする方法を提供します。デフォルトで、このサービスは自動的に起動しません。cgconfig を起動すると、これは /etc/cgconfig.conf 設定ファイルの設定を適用します。したがって、設定はセッションごとに再作成され、永続化します。cgconfig を停止する場合、これがマウントしたすべての階層がアンマウントすることに注意してください。
libcgroup パッケージと共にインストールされるデフォルトの /etc/cgconfig.conf ファイルにはいずれの設定内容も記載されておらず、systemd が主なリソースコントローラーを自動的にマウントするという情報のみが含まれます。
mountgroup および template の 3 つのタイプのエントリーを /etc/cgconfig.conf に作成できます。マウントエントリーは仮想ファイルシステムとして階層を作成し、マウントするために使用され、コントローラーをそれらの階層に割り当てます。Red Hat Enterprise Linux 7 では、デフォルトの階層が /sys/fs/cgroup/ ディレクトリーに自動的にマウントされるため、cgconfig はデフォルト以外のコントローラーを割り当てるためにのみ使用されます。mount エントリーは以下の構文を使用して定義されます。
mount {
    controller_name = /sys/fs/cgroup/controller_name;
    …
}
controller_name を階層にマウントするカーネルリソースコントローラーの名前に置き換えます。例については、例3.1「mount エントリーの作成」 を参照してください。

例3.1 mount エントリーの作成

net_prio コントローラーをデフォルトの cgroup ツリーに割り当てるには、以下のテキストを /etc/cgconfig.conf 設定ファイルに追加します。
mount {
    net_prio = /sys/fs/cgroup/net_prio;
}
次に、設定を適用するために cgconfig サービスを再起動します。
systemctl restart cgconfig.service
/etc/cgconfig.conf のグループエントリーは、リソースコントローラーのパラメーターを設定するために使用できます。グループエントリーの詳細は、「cgroup パラメーターの設定」 を参照してください。
/etc/cgconfig.conf のテンプレートエントリーは、すべてのプロセスに適用されるグループ定義を作成するために使用できます。

mount コマンドの使用

mount コマンドを使用して、階層を一時的にマウントします。これを実行するには、まずマウントポイントを /sys/fs/cgroup/ ディレクトリーに作成します。このディレクトリーで systemd は主なリソースコントローラーをマウントします。root として以下を入力します。
mkdir /sys/fs/cgroup/name
name を新規のマウント先の名前に置き換えます。この名前には通常コントローラーの名前が使用されます。次に、mount コマンドを実行し、階層をマウントして、1 つ以上のサブシステムを同時に割り当てます。root として以下を入力します。
mount -t cgroup -o controller_name none /sys/fs/cgroup/controller_name
controller_name をコントローラーの名前に置き換え、マウントされるデバイスを宛先フォルダーと共に指定します。-t cgroup パラメーターはマウントのタイプを指定します。

例3.2 コントローラーを割り当てる mount コマンドの使用

mount コマンドを使用して net_prio コントローラーの階層をマウントするには、まずマウントポイントを作成します。
~]# mkdir /sys/fs/cgroup/net_prio
次に、net_prio を直前のステップで作成したマウント先にマウントします。
~]# mount -t cgroup -o net_prio none /sys/fs/cgroup/net_prio
lssubsys コマンドを使用し、現在のマウントポイントと共にすべての利用可能な階層を一覧表示することで、階層を正しく割り当てたかどうかを確認できます (「コントローラーの一覧表示」 を参照)。
~]# lssubsys -am
cpuset /sys/fs/cgroup/cpuset
cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls /sys/fs/cgroup/net_cls
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb
net_prio /sys/fs/cgroup/net_prio