From 229c3b692e6b340951af371e0f68484bc6a8868a Mon Sep 17 00:00:00 2001 From: Thorsten Behrens Date: Wed, 18 Dec 2013 14:42:43 +0100 Subject: [PATCH 2/3] Base mem statistics on virDomainMemoryStats if available. Attempt to query domain memory stats via virDomainMemoryStats. (crobinso: remove the broken fallback, since it's confusing) --- virtManager/domain.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) Index: virt-manager-0.10.0/virtManager/domain.py =================================================================== --- virt-manager-0.10.0.orig/virtManager/domain.py +++ virt-manager-0.10.0/virtManager/domain.py @@ -187,6 +187,8 @@ class vmmDomain(vmmLibvirtObject): self._guest = None self._guest_to_define = None + self._mem_stats_supported = True + self._enable_net_poll = False self._stats_net_supported = True self._stats_net_skip = [] @@ -1303,12 +1305,26 @@ class vmmDomain(vmmLibvirtObject): # Stats helpers ### ################### - def _sample_mem_stats(self, info): - curmem = info[2] - if not self.is_active(): - curmem = 0 + def _sample_mem_stats(self): + curmem = 0 + totalmem = 1 + + if self._mem_stats_supported and self.is_active(): + try: + stats = self._backend.memoryStats() + # did we get both required stat items back? + if set(['actual', 'rss']).issubset( + set(stats.keys())): + curmem = stats['rss'] + totalmem = stats['actual'] + except libvirt.libvirtError, err: + if support.is_error_nosupport(err): + logging.debug("Mem stats not supported: %s", err) + self._mem_stats_supported = False + else: + logging.error("Error reading mem stats: %s", err) - pcentCurrMem = curmem * 100.0 / self.maximum_memory() + pcentCurrMem = curmem * 100.0 / totalmem pcentCurrMem = max(0.0, min(pcentCurrMem, 100.0)) return pcentCurrMem, curmem @@ -1751,7 +1767,7 @@ class vmmDomain(vmmLibvirtObject): (cpuTime, cpuTimeAbs, pcentHostCpu, pcentGuestCpu) = self._sample_cpu_stats(info, now) - pcentCurrMem, curmem = self._sample_mem_stats(info) + pcentCurrMem, curmem = self._sample_mem_stats() rdBytes, wrBytes = self._sample_disk_io() rxBytes, txBytes = self._sample_network_traffic()