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

Gui Jianfeng guijianfeng at cn.fujitsu.com
Wed Jan 26 03:14:51 UTC 2011


Nikunj A. Dadhania wrote:
> 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.

Sure, will change.

> 
>> 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?

Will implement later, if needed.

> 
> 
>> 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.

Ok.

Will post a v2.

Thanks,
Gui

> 
> 
> Regards,
> Nikunj
> 




More information about the libvir-list mailing list