[libvirt] [PATCH 8/8] Allow balloon driver collection to be adjusted dynamically
Michal Privoznik
mprivozn at redhat.com
Wed Jul 3 12:03:16 UTC 2013
On 02.07.2013 15:39, John Ferlan wrote:
> Extend the virDomainSetMemeoryFlags() to accept a 'VIR_DOMAIN_MEM_PERIOD'
> which will be used to dynamically set the collection period for the balloon
> driver via a 'virsh dommemstat <domain> --period <value>' command. Add
> the --current, --live, & --config options to dommemstat.
> ---
> docs/formatdomain.html.in | 14 +++++++++
> include/libvirt/libvirt.h.in | 1 +
> src/libvirt.c | 8 ++++-
> src/qemu/qemu_driver.c | 44 +++++++++++++++++++++++++++-
> tools/virsh-domain-monitor.c | 70 ++++++++++++++++++++++++++++++++++++++++++--
> 5 files changed, 132 insertions(+), 5 deletions(-)
> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
> index 3ba829c..f123247 100644
> --- a/tools/virsh-domain-monitor.c
> +++ b/tools/virsh-domain-monitor.c
> @@ -306,6 +306,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}
> };
>
> @@ -316,15 +333,60 @@ 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;
>
> + /* none of the options were specified - choose defaults based on state */
> + if (!current && !live && !config) {
> + if (virDomainIsActive(dom) == 1)
> + flags |= VIR_DOMAIN_AFFECT_LIVE;
> + else
> + flags |= VIR_DOMAIN_AFFECT_CONFIG;
This should not be needed as qemu driver will the proper option for
VIR_DOMAIN_AFFECT_CURRENT. Client can't make such decision as domain is
not locked and may translate into different state.
> + }
> +
> + /* 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;
> + }
> +
> + flags |= VIR_DOMAIN_MEM_PERIOD;
> + if (virDomainSetMemoryFlags(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++) {
> @@ -346,8 +408,10 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
> vshPrint(ctl, "rss %llu\n", stats[i].val);
> }
>
> + ret = true;
> +cleanup:
> virDomainFree(dom);
> - return true;
> + return ret;
> }
>
> /*
>
Michal
More information about the libvir-list
mailing list