[libvirt] [PATCH] qemu: Don't ignore CPU tuning config if required cgroups are missing
Daniel Veillard
veillard at redhat.com
Fri Aug 31 06:50:32 UTC 2012
A bit of context would be nice
On Fri, Aug 31, 2012 at 08:23:15AM +0200, Jiri Denemark wrote:
> ---
> src/qemu/qemu_cgroup.c | 29 ++++++++++++++++++++---------
> 1 file changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
> index df67ff3..7298e28 100644
> --- a/src/qemu/qemu_cgroup.c
> +++ b/src/qemu/qemu_cgroup.c
> @@ -546,16 +546,21 @@ int qemuSetupCgroupForVcpu(struct qemud_driver *driver, virDomainObjPtr vm)
> unsigned long long period = vm->def->cputune.period;
> long long quota = vm->def->cputune.quota;
>
> - if (driver->cgroup == NULL)
> - return 0; /* Not supported, so claim success */
> -
> if ((period || quota) &&
> - !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
> - virReportError(VIR_ERR_SYSTEM_ERROR, "%s",
> - _("cgroup cpu is not active"));
> + (!driver->cgroup ||
> + !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU))) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("cgroup cpu is required for scheduler tuning"));
> return -1;
> }
>
> + /* We are trying to setup cgroups for CPU pinning, which can also be done
> + * with virProcessInfoSetAffinity, thus the lack of cgroups is not fatal
> + * here.
> + */
> + if (driver->cgroup == NULL)
> + return 0;
> +
> rc = virCgroupForDomain(driver->cgroup, vm->def->name, &cgroup, 0);
> if (rc != 0) {
> virReportSystemError(-rc,
> @@ -636,6 +641,14 @@ int qemuSetupCgroupForEmulator(struct qemud_driver *driver,
> long long quota = vm->def->cputune.emulator_quota;
> int rc, i;
>
> + if ((period || quota) &&
> + (!driver->cgroup ||
> + !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU))) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("cgroup cpu is required for scheduler tuning"));
> + return -1;
> + }
> +
> if (driver->cgroup == NULL)
> return 0; /* Not supported, so claim success */
>
> @@ -656,10 +669,8 @@ int qemuSetupCgroupForEmulator(struct qemud_driver *driver,
> }
>
> for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
> - if (!qemuCgroupControllerActive(driver, i)) {
> - VIR_WARN("cgroup %d is not active", i);
> + if (!qemuCgroupControllerActive(driver, i))
> continue;
> - }
> rc = virCgroupMoveTask(cgroup, cgroup_emulator, i);
> if (rc < 0) {
> virReportSystemError(-rc,
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list