我在这个问题上徘徊了很长时间 - cgroups 只是不想在再次重新加载配置文件时工作(挂起挂载),每次都必须重新启动才能使更改生效。
这是我的步骤:
(1.)操作系统的全新启动。(2.)cgsnapshot -s
# Configuration file generated by cgsnapshot
mount {
cpuset = /sys/fs/cgroup/cpuset;
cpu = /sys/fs/cgroup/cpu;
cpuacct = /sys/fs/cgroup/cpuacct;
memory = /sys/fs/cgroup/memory;
devices = /sys/fs/cgroup/devices;
freezer = /sys/fs/cgroup/freezer;
net_cls = /sys/fs/cgroup/net_cls;
blkio = /sys/fs/cgroup/blkio;
perf_event = /sys/fs/cgroup/perf_event;
}
(3.) cgclear
(4.)cgsnapshot -s
# Configuration file generated by cgsnapshot
(5.) cgconfigparser -l /etc/cgconfig.conf
(6.)cgsnapshot -s
mount {
cpu = /cgroup/cpu_mem_blkio;
cpuacct = /cgroup/cpu_mem_blkio;
memory = /cgroup/cpu_mem_blkio;
blkio = /cgroup/cpu_mem_blkio;
}
group hello1 {
...
group hello2 {
...
(7.)bash 脚本/etc/rc.d/rc.cgred start
现在一切正常,但是当我这样做时(相同的配置):
(8.) cgclear
(9.)cgconfigparser -l /etc/cgconfig.conf
它永远挂起,当我使用 strace 时,它停在:
mount("cgroup", "/cgroup/cpu_mem_blkio", "cgroup", 0, "cpu,cpuacct,blkio,memory") = ? ERESTARTNOINTR(待重新启动)
有人可以指出我有什么问题吗?如何在不重新启动的情况下添加新组?这是 cgroups 的正常行为吗?
我什至尝试从这里添加这个补丁:
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
<at> <at> -1909,7 +1909,7 <at> <at> static void cgroup_kill_sb(struct super_block *sb)
*
* And don't kill the default root.
*/
- if (css_has_online_children(&root->cgrp.self) ||
+ if (!list_empty(&root->cgrp.self.children) ||
root == &cgrp_dfl_root)
cgroup_put(&root->cgrp);
else
仍在测试,但看起来一样。