[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