3.12. 共通の調整可能なパラメーター

以下のパラメーターは、使用するサブシステムを問わず、作成されたすべての cgroup に存在します。
tasks
cgroup で実行中のプロセスの一覧が含まれ、PID で表示されます。PID の一覧が順位付けされていることや、一意であることは保証されません (つまり、重複したエントリが含まれている可能性があります)。PID を cgroup の tasks ファイルに書き込むと、そのプロセスは cgroup に移動します。
cgroup.procs
cgroup で実行中のスレッドグループの一覧が含まれ、TGID で表示されます。TGID の一覧が順位付けされていることや、一意であることは保証されません (つまり、重複したエントリが含まれている可能性があります)。TGID を cgroup の tasks ファイルに書き込むと、そのスレッドグループは cgroup に移動します。
cgroup.event_control
cgroup 通知 API とともに、cgroup のステータス変更についての通知を送付できるようにします。
notify_on_release
ブール値が含まれ、1 または 0 でリリースエージェントの実行を有効化または無効化します。notify_on_release が有効化されると、cgroup にタスクがなくなった時にカーネルが release_agent ファイルの内容を実行します (つまり、cgroup の tasks ファイルにいくつかの PID が含まれ、それらの PID が削除されてファイルが空の状態となっています)。空の cgroup へのパスは、空の cgroup へのパスは、引数としてリリースエージェントに提供されます。
root cgroup 内の notify_on_release パラメーターのデフォルト値は 0 です。root 以外の cgroups はすべて、親 cgroup からnotify_on_release 内の値を継承します。
release_agent (root cgroup のみに存在)
notify on release がトリガーされた時に実行されるコマンドが含まれます。cgroup の全プロセスが空となると、notify_on_release フラグが有効化され、カーネルがrelease_agent ファイル内のコマンドを実行して、相対パス(root cgroup に相対) で空の cgroup に引数として提供します。リリースエージェントは、たとえば、空の cgroup を自動的に削除するのに使用することができます。詳しくは、例3.4「空の cgroup の自動削除」 を参照してください。

例3.4 空の cgroup の自動削除

以下の手順にしたがって、空になった cgroup を自動的に cpu cgroup から削除するように設定します。
  1. 空の cpu cgroups を削除するシェルスクリプトを作成して /usr/local/bin などに配置し、実行できるようにします。
    ~]# cat /usr/local/bin/remove-empty-cpu-cgroup.sh
    #!/bin/sh
    rmdir /cgroup/cpu/$1
    ~]# chmod +x /usr/local/bin/remove-empty-cpu-cgroup.sh
    $1 の変数には空になった cgroup への相対パスを記載します。
  2. cpu cgroup で notify_on_release フラグを有効にします。
    ~]# echo 1 > /cgroup/cpu/notify_on_release
  3. cpu cgroup には、使用するリリースエージェントを指定します。
    ~]# echo "/usr/local/bin/remove-empty-cpu-cgroup.sh" > /cgroup/cpu/release_agent
  4. 設定をテストして、空になった cgroup が適切に削除されることを確認します。
    cpu]# pwd; ls
    /cgroup/cpu
    cgroup.event_control  cgroup.procs  cpu.cfs_period_us  cpu.cfs_quota_us  cpu.rt_period_us  cpu.rt_runtime_us  cpu.shares  cpu.stat  libvirt  notify_on_release  release_agent  tasks
    cpu]# cat notify_on_release 
    1
    cpu]# cat release_agent 
    /usr/local/bin/remove-empty-cpu-cgroup.sh
    cpu]# mkdir blue; ls
    blue  cgroup.event_control  cgroup.procs  cpu.cfs_period_us  cpu.cfs_quota_us  cpu.rt_period_us  cpu.rt_runtime_us  cpu.shares  cpu.stat  libvirt  notify_on_release  release_agent  tasks
    cpu]# cat blue/notify_on_release 
    1
    cpu]# cgexec -g cpu:blue dd if=/dev/zero of=/dev/null bs=1024k &
    [1] 8623
    cpu]# cat blue/tasks 
    8623
    cpu]# kill -9 8623
    cpu]# ls
    cgroup.event_control  cgroup.procs  cpu.cfs_period_us  cpu.cfs_quota_us  cpu.rt_period_us  cpu.rt_runtime_us  cpu.shares  cpu.stat  libvirt  notify_on_release  release_agent  tasks