Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.8. コントロールグループへのプロセス移動

cgclassify コマンドを実行して、プロセスを cgroup に移動します。
~]# cgclassify -g cpu,memory:group1 1701
cgclassify の構文は以下のとおりです。
cgclassify -g subsystems:path_to_cgroup pidlist
ここで、
  • subsystems は、コンマ区切りのサブシステム一覧、または、利用可能なすべてのサブシステムに関連付けられた階層内のプロセスを起動するための * とします。同じ名前の cgroup が複数の階層に存在する場合には、-g オプションを指定すると、それらの各グループ内にプロセスが移動される点に注意してください。ここで指定するサブシステムの各階層内に cgroup が存在していることを確認してください。
  • path_to_cgroup は、その階層内の cgroup へのパスです
  • pidlist は、プロセス識別子 (PID) のスペースで区切られた一覧です。
pid の前に --sticky オプションを追加すると、同じ cgroup 内の任意の子プロセスを維持することもできます。このオプションを設定せず、かつ cgred サービスが稼働中の場合、子プロセスは /etc/cgrules.conf の設定に基づいて cgroup に割り当てられます。そのプロセス自体は、それを起動した cgroup に残ります。
cgclassify を使用すると、いくつかのプロセスを同時に移動することができます。たとえば、以下のコマンドは 17011138 の PID を持つプロセスを cgroup group1/ に移動します:
~]# cgclassify -g cpu,memory:group1 1701 1138
移動する PID は、スペースで区切り、また指定したグループは異なる階層内にある必要がある点に注意してください。

その他の方法

プロセスを cgroup のディレクトリに移動するには、その PID を cgroup の tasks ファイルに 書き込みます。たとえば、PID 1701 の付いたプロセスを /cgroup/lab1/group1/ にある cgroup に 移動する場合は、以下のコマンドを実行します。
~]# echo 1701 > /cgroup/lab1/group1/tasks

2.8.1. cgred サービス

cgred は、/etc/cgrules.conf ファイルに設定されているパラメータセットにしたがってタスクを cgroup に移動するサービスです (このサービスが cgrulesengd デーモンを起動します)。/etc/cgrules.conf ファイル内のエントリは、次の 2 つの形式のいずれかとなります。
  • user subsystems control_group
  • user:command subsystems control_group
例:
maria			devices		/usergroup/staff
このエントリは、maria というユーザーに属するプロセスはいずれも /usergroup/staff cgroup 内に指定されたパラメーターにしたがって devices サブシステムにアクセスすることを指定します。特定のコマンドを特定の cgroup に関連付けるには、以下のようにして command パラメーターを追加します。
maria:ftp		devices		/usergroup/staff/ftp
このエントリにより、maria という名前のユーザーが ftp コマンドを使用する時には、devices サブシステムが入っている階層の /usergroup/staff/ftp cgroup へプロセスが自動的に移動するように指定されるようになります。 ただし、このデーモンは、該当する条件が満たされている場合にのみ、プロセスを cgroup に移動する点に注意してください。このため、ftp プロセスが、誤ったグループで短時間実行される可能性があります。また、そのプロセスが誤ったグループ内にある間に子プロセスが急速に発生した場合には、それらは移動されない可能性があります。
/etc/cgrules.conf ファイル内のエントリには、以下のような注記を追加することが可能です。
  • @user にプレフィックスを付けた場合には、個別のユーザーではなくグループを示します。 たとえば、@adminsadmins グループ内のすべてのユーザーです。
  • * — 「すべて」を示します。たとえば、subsystem フィールド内の * は全サブシステムを示します。
  • % — その上の行の項目と同じ項目を示します。以下はその例です。
    @adminstaff		devices		/admingroup
    @labstaff		%		%