
On Tue, Jul 02, 2013 at 09:39:25AM -0400, John Ferlan wrote:
In the 'virsh dommemstats <domain>' qemu driver code, if we have a balloonpath and we hadn't already collected the data (somehow) from the "query-balloon" command, then use qom-get to attempt to fill in the domain memory stats data from the balloon driver. --- src/qemu/qemu_driver.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f51e766..c9a66ff 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9499,6 +9499,7 @@ qemuDomainMemoryStats(virDomainPtr dom, virQEMUDriverPtr driver = dom->conn->privateData; virDomainObjPtr vm; int ret = -1; + qemuMonitorObjectProperty prop;
virCheckFlags(0, -1);
@@ -9518,6 +9519,22 @@ qemuDomainMemoryStats(virDomainPtr dom, qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjEnterMonitor(driver, vm); ret = qemuMonitorGetMemoryStats(priv->mon, stats, nr_stats); + + /* The above call should only return the 'actual' memory due to + * changes that disabled statistics gathering from query-balloon. + * If so, let's check if we have a path to the balloon device + * and then try to gather more stats from there if possible + */ + if ((ret == 0 || ret == 1) && priv->balloonpath) { + memset(&prop, 0, sizeof(qemuMonitorObjectProperty)); + prop.type = QEMU_MONITOR_OBJECT_PROPERTY_BALLOON_STATS; + prop.curelems = ret; + prop.maxelems = nr_stats; + prop.val.ptr = (void **)stats; + if (qemuMonitorGetObjectProperty(priv->mon, priv->balloonpath, + "guest-stats", &prop) == 0) + ret = prop.curelems; + }
If we hide all the QOM stuff inside the existing qemuMonitorGetMemoryStats() API, then this patch just goes away entirely. 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 :|