[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