[libvirt] [PATCH 3/3] qemu: Implement blkio tunable XML configuration and parsing.

Nikunj A. Dadhania nikunj at linux.vnet.ibm.com
Tue Jan 25 04:36:20 UTC 2011


On Sun, 23 Jan 2011 14:19:44 +0800, Gui Jianfeng <guijianfeng at cn.fujitsu.com> wrote:
> Implement blkio tunable XML configuration and parsing.
> 
> Signed-off-by: Gui Jianfeng <guijianfeng at cn.fujitsu.com>
> ---
>  src/conf/domain_conf.c |   17 ++++++++++++++++-
>  src/conf/domain_conf.h |    4 ++++
>  src/qemu/qemu_cgroup.c |   16 +++++++++++++++-
>  src/qemu/qemu_conf.c   |    3 ++-
>  4 files changed, 37 insertions(+), 3 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 645767e..a05ada5 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -4810,7 +4810,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
>  {
>      xmlNodePtr *nodes = NULL, node = NULL;
>      char *tmp = NULL;
> -    int i, n;
> +    int i, n, w;
>      long id = -1;
>      virDomainDefPtr def;
>      unsigned long count;
> @@ -4887,6 +4887,13 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
>      if (node)
>          def->mem.hugepage_backed = 1;
> 
> +    /* Extract blkio cgroup tunables */
> +    w = virXPathULong("string(./blkiotune/weight)", ctxt,
> +                      &def->blkio.weight);
> +    if (w < 0 || def->blkio.weight > 1000 || def->blkio.weight < 100)
> +        virDomainReportError(VIR_ERR_XML_ERROR, "%s",
> +                             _("I/O weight should fall in [100, 1000]"));
> +

The weight limit [100, 1000] is cgroup specific and should not come at
this layer as there would be other HVs that will support Block IO
paramters and would not have such limits. So should be better taken care
at the cgroup layer than here.

> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index cf7bdc0..b117869 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -969,6 +969,10 @@ struct _virDomainDef {
>      char *description;
> 
>      struct {
> +        unsigned long weight;
> +    } blkio;
> +

How about the throttle parameters?


> index e5536c0..a3e8e6a 100644
> --- a/src/qemu/qemu_cgroup.c
> +++ b/src/qemu/qemu_cgroup.c
> @@ -54,7 +54,6 @@ int qemuCgroupControllerActive(struct qemud_driver *driver,
>      return 0;
>  }
> 
> -
>  int qemuSetupDiskPathAllow(virDomainDiskDefPtr disk ATTRIBUTE_UNUSED,
>                             const char *path,
>                             size_t depth ATTRIBUTE_UNUSED,
> @@ -270,6 +269,21 @@ int qemuSetupCgroup(struct qemud_driver *driver,
>          }
>      }
> 
> +    if (qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_BLKIO)) {
> +        if (vm->def->blkio.weight != 0) {
> +            rc = virCgroupSetWeight(cgroup, vm->def->blkio.weight);
> +            if(rc != 0) {
> +                virReportSystemError(-rc,
> +                                     _("Unable to set io weight for domain %s"),
> +                                     vm->def->name);
> +                goto cleanup;
> +            }
> +        }
> +    } else {
> +        VIR_WARN("Blkio cgroup is disabled in qemu configuration file: %s",
> +                 vm->def->name);
> +    }
> +
>
Similar changes would be needed for LXC as well which uses cgroup apis.


Regards,
Nikunj




More information about the libvir-list mailing list