Adding memtunables to qemuSetupCgroup

QEmu startup will pick up the memory tunables specified in the domain
configuration file
This commit is contained in:
Nikunj A. Dadhania 2010-10-12 18:12:31 +02:00 committed by Daniel Veillard
parent 013fe4b848
commit 261ad74e52
3 changed files with 38 additions and 3 deletions

View File

@ -111,13 +111,13 @@
# the adminsitrator has mounted cgroups. eg
#
# mkdir /dev/cgroup
# mount -t cgroup -o devices,cpu none /dev/cgroup
# mount -t cgroup -o devices,cpu,memory none /dev/cgroup
#
# They can be mounted anywhere, and different controlers
# can be mounted in different locations. libvirt will detect
# where they are located.
#
# cgroup_controllers = [ "cpu", "devices" ]
# cgroup_controllers = [ "cpu", "devices", "memory" ]
# This is the basic set of devices allowed / required by
# all virtual machines.

View File

@ -275,7 +275,8 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
} else {
driver->cgroupControllers =
(1 << VIR_CGROUP_CONTROLLER_CPU) |
(1 << VIR_CGROUP_CONTROLLER_DEVICES);
(1 << VIR_CGROUP_CONTROLLER_DEVICES) |
(1 << VIR_CGROUP_CONTROLLER_MEMORY);
}
for (i = 0 ; i < VIR_CGROUP_CONTROLLER_LAST ; i++) {
if (driver->cgroupControllers & (1 << i)) {

View File

@ -3497,6 +3497,40 @@ static int qemuSetupCgroup(struct qemud_driver *driver,
goto cleanup;
}
if ((rc = qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_MEMORY))) {
if (vm->def->mem.hard_limit != 0) {
rc = virCgroupSetMemoryHardLimit(cgroup, vm->def->mem.hard_limit);
if (rc != 0) {
virReportSystemError(-rc,
_("Unable to set memory hard limit for domain %s"),
vm->def->name);
goto cleanup;
}
}
if (vm->def->mem.soft_limit != 0) {
rc = virCgroupSetMemorySoftLimit(cgroup, vm->def->mem.soft_limit);
if (rc != 0) {
virReportSystemError(-rc,
_("Unable to set memory soft limit for domain %s"),
vm->def->name);
goto cleanup;
}
}
if (vm->def->mem.swap_hard_limit != 0) {
rc = virCgroupSetSwapHardLimit(cgroup, vm->def->mem.swap_hard_limit);
if (rc != 0) {
virReportSystemError(-rc,
_("Unable to set swap hard limit for domain %s"),
vm->def->name);
goto cleanup;
}
}
} else {
VIR_WARN("Memory cgroup is disabled in qemu configuration file: %s",
vm->def->name);
}
done:
virCgroupFree(&cgroup);
return 0;