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