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(a)cn.fujitsu.com>
---
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