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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list