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 から削除するように設定します。- 空の
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 への相対パスを記載します。 cpu
cgroup でnotify_on_release
フラグを有効にします。~]#
echo 1 > /cgroup/cpu/notify_on_release
cpu
cgroup には、使用するリリースエージェントを指定します。~]#
echo "/usr/local/bin/remove-empty-cpu-cgroup.sh" > /cgroup/cpu/release_agent
- 設定をテストして、空になった 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