第2章 コントロールグループの使用法
cgroup を使用して作業する最も簡単な方法は、libcgroup パッケージをインストールすることです。このパッケージには、数多くの cgroup 関連のコマンドラインユーティリティとそれらに関する man ページが含まれています。任意のシステム上で利用可能なシェルコマンドとユーティリティを使用して、階層をマウントし、cgroup のパラメーターを (非永続的に) 設定することも可能ですが、libcgroup の提供するユーティリティを使用すると、プロセスが簡素化され、機能性が拡張されます。このため、本ガイドでは全体を通して、libcgroup コマンドに重点を置いています。ほとんどの場合、相当するシェルコマンドを記載し、根本的な構造がわかりやすいようにしていますが、差し支えがなければ、libcgroup コマンドを使用することを推奨します。
注記
cgroup を使用するためには、まず最初に、root として以下のコマンドを実行し、libcgroup パッケージがインストールされているかどうかを確認します。
~]# yum install libcgroup
2.1. cgconfig サービス
libcgroup パッケージとともにインストールされる
cgconfig
サービスは、階層を作成して、サブシステムを階層に接続し、それらの階層内の cgroup を管理するのに便利な方法を提供します。システム上の階層と cgroup の管理には、cgconfig を使用することを推奨します。
Red Hat Enterprise Linux 6 では、
cgconfig
サービスはデフォルトで起動しません。chkconfig
を使用してサービスを起動すると、システムは cgroup の設定ファイル /etc/cgconfig.conf
を読み取ります。そのため、cgroup はセッションからセッションへと再作成されて永続化します。cgconfig は、設定ファイルの内容に応じて、階層の作成、必要なファイルシステムのマウント、cgroup の作成、各グループ用のサブシステムパラメーターの設定を行います。
libcgroup パッケージとともにインストールされるデフォルトの
/etc/cgconfig.conf
ファイルは、各サブシステム用の個別の階層を作成およびマウントし、それらの階層にサブシステムを接続します。
cgconfig
サービスを停止 (service cgconfig stop
コマンドを使用) すると、マウントされていたすべての階層がアンマウントされます。
2.1.1. /etc/cgconfig.conf ファイル
/etc/cgconfig.conf
ファイルに含まれるエントリには、mount と group の 2 つの主要なタイプがあります。mount エントリは、仮想ファイルシステムとして階層を作成してマウントし、サブシステムをそれらの階層に接続します。mount エントリは、以下のような構文を用いて定義します。
mount { <controller> = <path>; … }
使用例については、例2.1「mount エントリの作成」 を参照してください。
例2.1 mount エントリの作成
以下の例では、
cpuset
サブシステム用の階層を作成します。
mount { cpuset = /cgroup/red; }
これに相当するシェルコマンドは以下のとおりです。
~]#mkdir /cgroup/red
~]#mount -t cgroup -o cpuset red /cgroup/red
group エントリは cgroup を作成して、サブシステムパラメーターを設定します。group エントリは、以下のような構文を使用して定義します。
group <name> {
[<permissions>]
<controller> {
<param name> = <param value>;
…
}
…
}
permissions
セクションはオプションである点に注意してください。グループエントリのパーミッションを定義するには、以下のような構文を使用します。
perm { task { uid = <task user>; gid = <task group>; } admin { uid = <admin name>; gid = <admin group>; } }
使用例については、例2.2「group エントリの作成」 を参照してください。
例2.2 group エントリの作成
以下の例は、
sqladmin
グループ内のユーザーのパーミッションで SQL デーモン用の cgroup を作成し、タスクを cgroup と root
ユーザーに追加してサブシステムのパラメーターを変更します。
group daemons/sql { perm { task { uid = root; gid = sqladmin; } admin { uid = root; gid = root; } } cpu { cpuset.mems = 0; cpuset.cpus = 0; } }
例2.1「mount エントリの作成」 の mount エントリの例と組み合わせた場合に、相当するシェルコマンドは以下のとおりです。
~]#mkdir -p /cgroup/red/daemons/sql
~]#chown root:root /cgroup/red/daemons/sql/*
~]#chown root:sqladmin /cgroup/red/daemons/sql/tasks
~]#echo 0 > /cgroup/red/daemons/sql/cpuset.mems
~]#echo 0 > /cgroup/red/daemons/sql/cpuset.cpus
注記
/etc/cgconfig.conf
への変更内容を有効にするには、cgconfig
を再起動する必要があります。ただし、このサービスを再起動すると、全 cgroup 階層が再構築され、以前に存在していた cgroup (例: libvirtd
によって使用される既存の cgroup) はいずれも削除される点に注意してください。cgconfig
サービスを再起動するには、以下のコマンドを実行します。
~]# service cgconfig restart
libcgroup パッケージをインストールすると、サンプルの設定ファイルが
/etc/cgconfig.conf
に書き込まれます。行頭にハッシュ記号 ('#
') が付いている場合、その行はコメントアウトされ、cgconfig
サービスには不可視となります。