Nikunj A. Dadhania wrote:
On Sun, 23 Jan 2011 14:19:44 +0800, Gui Jianfeng
<guijianfeng(a)cn.fujitsu.com> wrote:
> Implement blkio tunable XML configuration and parsing.
>
> Signed-off-by: Gui Jianfeng <guijianfeng(a)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