When a cpu or memory is offlined and onlined again, cgroup will not recover any corresponding values. This is a problem in kernel. Do not use CPUSET cgroup to limit threads using cpu and memory until the problem is fixed in kernel. Signed-off-by: Tang Chen <tangchen@xxxxxxxxxxxxxx> --- src/qemu/qemu.conf | 5 ++++- src/qemu/qemu_conf.c | 7 ++++++- src/util/cgroup.c | 3 +-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf index 18105ca..6bf7290 100644 --- a/src/qemu/qemu.conf +++ b/src/qemu/qemu.conf @@ -211,7 +211,10 @@ # can be mounted in different locations. libvirt will detect # where they are located. # -#cgroup_controllers = [ "cpu", "devices", "memory", "blkio", "cpuset", "cpuacct" ] +# When a cpu or memory is offlined and onlined again, cgroup will not +# recover any corresponding values. This is a problem in kernel. +# So DO NOT use cpuset cgroup until this problem is fixed in kernel. +#cgroup_controllers = [ "cpu", "devices", "memory", "blkio", "cpuacct" ] # This is the basic set of devices allowed / required by # all virtual machines. diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 91a56f1..80b0787 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -397,12 +397,17 @@ int qemudLoadDriverConfig(struct qemud_driver *driver, driver->cgroupControllers |= (1 << ctl); } } else { + /* + * When a cpu or memory is offlined and onlined again, cgroup will not + * recover any corresponding values. This is a problem in kernel. + * Do not use CPUSET cgroup to limit threads using cpu and memory until + * the problem is fixed in kernel. + */ driver->cgroupControllers = (1 << VIR_CGROUP_CONTROLLER_CPU) | (1 << VIR_CGROUP_CONTROLLER_DEVICES) | (1 << VIR_CGROUP_CONTROLLER_MEMORY) | (1 << VIR_CGROUP_CONTROLLER_BLKIO) | - (1 << VIR_CGROUP_CONTROLLER_CPUSET) | (1 << VIR_CGROUP_CONTROLLER_CPUACCT); } for (i = 0 ; i < VIR_CGROUP_CONTROLLER_LAST ; i++) { diff --git a/src/util/cgroup.c b/src/util/cgroup.c index 5dc0764..cd7d3fe 100644 --- a/src/util/cgroup.c +++ b/src/util/cgroup.c @@ -543,8 +543,7 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group, /* We need to control cpu bandwidth for each vcpu now */ if ((flags & VIR_CGROUP_VCPU) && (i != VIR_CGROUP_CONTROLLER_CPU && - i != VIR_CGROUP_CONTROLLER_CPUACCT && - i != VIR_CGROUP_CONTROLLER_CPUSET)) { + i != VIR_CGROUP_CONTROLLER_CPUACCT)) { /* treat it as unmounted and we can use virCgroupAddTask */ VIR_FREE(group->controllers[i].mountPoint); continue; -- 1.7.10.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list