A.12. 常用可调参数
无论 cgroup 使用哪个子系统,下列参数都将出现在每一个被创建的 cgroup 中。
- tasks
- 包含一系列在 cgroup 中运行的进程(由它们的 PID 表示)。PID 列表不一定是有序的,也不一定是特有的(也就是说,可能包含重复条目)。将 PID 写入一个 cgroup 的
tasks
文件,可将此进程移至该 cgroup。 - cgroup.procs
- 包含在 cgroup 中运行的线程群组列表(由它们的 TGID 表示)。TGID 列表不一定是有序的,也不一定是特有的(也就是说,可能包含重复条目)。将 TGID 写入 cgroup 的
cgroup.procs
文件,可将此线程组群移至该 cgroup。 - cgroup.event_control
- 与 cgroup 的通知 API 一起,允许 cgroup 的变更状态通知被发送。
- notify_on_release
- 包含 Boolean 值,
1
或者0
,分别可以启动和禁用释放代理的指令。如果notify_on_release
启用,当 cgroup 不再包含任何任务时(即,cgroup 的tasks
文件包含 PID,而 PID 被移除,致使文件变空),kernel 会执行release_agent
文件的内容。通向此空 cgroup 的路径会作为释放代理的参数被提供。notify_on_release
参数的默认值在 root cgroup 中是0
。所有非 root cgroup 从其父 cgroup 处继承notify_on_release
的值。 - release_agent (仅在 root group 中出现)
- 当 “notify on release” 被触发,它包含要执行的指令。一旦 cgroup 的所有进程被清空,并且
notify_on_release
标记被启用,kernel 会运行release_agent
文件中的指令,并且提供通向被清空 cgroup 的相关路径(与 root cgroup 相关)作为参数。例如,释放代理可以用来自动移除空 cgroup,更多信息,请参阅例 A.4 “自动移除空 cgroup”。例 A.4. 自动移除空 cgroup
参照以下步骤,可将空 cgroup 从cpu
cgroup 中自动移除:- 例如,创建一个 shell 脚本用来移除空
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