Red Hat Training

A Red Hat training course is available for Red Hat Linux

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 中自动移除:
  1. 例如,创建一个 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 的相对路径。
  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