[libvirt] [PATCH v2 10/10] Allow balloon driver collection to be adjusted dynamically
Daniel P. Berrange
berrange at redhat.com
Thu Jul 11 14:47:51 UTC 2013
On Mon, Jul 08, 2013 at 03:20:36PM -0400, John Ferlan wrote:
> Use the virDomainSetMemoryStatsPeriodFlags() to pass a period defined by
> usage of a new --period option in order to set the collection period for the
> balloon driver. This may enable or disable the collection based on the value.
>
> Add the --current, --live, & --config options to dommemstat.
> ---
> docs/formatdomain.html.in | 11 +++++++-
> tools/virsh-domain-monitor.c | 66 ++++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 73 insertions(+), 4 deletions(-)
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 93d2416..df84ed2 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -4660,7 +4660,16 @@ qemu-kvm -net nic,model=? /dev/null
> <p>
> The optional <code>period</code> allows the QEMU virtio memory
> balloon driver to provide statistics through the <code>virsh
> - dommemstat [domain]</code> command.
> + dommemstat [domain]</code> command. By default, collection is
> + not enabled. In order to enable, use the <code>virsh dommemstat
> + [domain] --period [number]</code> command or <code>virsh edit</code>
> + command to add the option to the XML definition.
> + The <code>virsh dommemstat</code> will accept the options
> + <code>--live</code>, <code>--current</code>, or <code>--config</code>.
> + If an option is not provided, the change for a running domain will
> + only be made to the active guest.
> + If the QEMU driver is not at the right
> + revision, the attempt to set the period will fail.
> <span class='since'>Since 1.1.1, requires QEMU 1.5</span>
> </p>
> </dd>
Move this chunk into the patch which changes the domaincommon.rng
file.
> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
> index 58d6d40..d2ed921 100644
> --- a/tools/virsh-domain-monitor.c
> +++ b/tools/virsh-domain-monitor.c
> @@ -314,6 +314,23 @@ static const vshCmdOptDef opts_dommemstat[] = {
> .flags = VSH_OFLAG_REQ,
> .help = N_("domain name, id or uuid")
> },
> + {.name = "period",
> + .type = VSH_OT_DATA,
> + .flags = VSH_OFLAG_EMPTY_OK,
> + .help = N_("period in seconds to set collection")
> + },
> + {.name = "config",
> + .type = VSH_OT_BOOL,
> + .help = N_("affect next boot")
> + },
> + {.name = "live",
> + .type = VSH_OT_BOOL,
> + .help = N_("affect running domain")
> + },
> + {.name = "current",
> + .type = VSH_OT_BOOL,
> + .help = N_("affect current domain")
> + },
> {.name = NULL}
> };
>
> @@ -324,15 +341,56 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
> const char *name;
> struct _virDomainMemoryStat stats[VIR_DOMAIN_MEMORY_STAT_NR];
> unsigned int nr_stats, i;
> + int ret = false;
> + int rv = 0;
> + int period = -1;
> + bool config = vshCommandOptBool(cmd, "config");
> + bool live = vshCommandOptBool(cmd, "live");
> + bool current = vshCommandOptBool(cmd, "current");
> + unsigned int flags = VIR_DOMAIN_AFFECT_CURRENT;
> +
> + VSH_EXCLUSIVE_OPTIONS_VAR(current, live);
> + VSH_EXCLUSIVE_OPTIONS_VAR(current, config);
> + if (config)
> + flags |= VIR_DOMAIN_AFFECT_CONFIG;
> + if (live)
> + flags |= VIR_DOMAIN_AFFECT_LIVE;
>
> if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
> return false;
>
> + /* If none of the options were specified and we're active
> + * then be sure to allow active modification */
> + if (!current && !live && !config && virDomainIsActive(dom) == 1)
> + flags |= VIR_DOMAIN_AFFECT_LIVE;
> +
> + /* Providing a period will adjust the balloon driver collection period.
> + * This is not really an unsigned long, but it
> + */
> + if ((rv = vshCommandOptInt(cmd, "period", &period)) < 0) {
> + vshError(ctl, "%s",
> + _("Unable to parse integer parameter."));
> + goto cleanup;
> + }
> + if (rv > 0) {
> + if (period < 0) {
> + vshError(ctl, _("Invalid collection period value '%d'"), period);
> + goto cleanup;
> + }
> +
> + if (virDomainSetMemoryStatsPeriodFlags(dom, period, flags) < 0) {
> + vshError(ctl, "%s",
> + _("Unable to change balloon collection period."));
> + } else {
> + ret = true;
> + }
> + goto cleanup;
> + }
> +
> nr_stats = virDomainMemoryStats(dom, stats, VIR_DOMAIN_MEMORY_STAT_NR, 0);
> if (nr_stats == -1) {
> vshError(ctl, _("Failed to get memory statistics for domain %s"), name);
> - virDomainFree(dom);
> - return false;
> + goto cleanup;
> }
>
> for (i = 0; i < nr_stats; i++) {
> @@ -354,8 +412,10 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
> vshPrint(ctl, "rss %llu\n", stats[i].val);
> }
>
> + ret = true;
> +cleanup:
> virDomainFree(dom);
> - return true;
> + return ret;
> }
I think the virsh.pod entry for this command could do with updating.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list