diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
index 1e51c354793bc95c30597159630bcc7f67766221..59994cd29cbbe777d78986a99082e7cdedf3d50f 100644
--- a/lib/hypervisor/hv_kvm.py
+++ b/lib/hypervisor/hv_kvm.py
@@ -202,6 +202,8 @@ class QmpConnection:
   _FIRST_MESSAGE_KEY = "QMP"
   _EVENT_KEY = "event"
   _ERROR_KEY = "error"
+  _RETURN_KEY = RETURN_KEY = "return"
+  _ACTUAL_KEY = ACTUAL_KEY = "actual"
   _ERROR_CLASS_KEY = "class"
   _ERROR_DATA_KEY = "data"
   _ERROR_DESC_KEY = "desc"
@@ -916,6 +918,17 @@ class KVMHypervisor(hv_base.BaseHypervisor):
     istat = "---b-"
     times = "0"
 
+    try:
+      qmp = QmpConnection(self._InstanceQmpMonitor(instance_name))
+      qmp.connect()
+      vcpus = len(qmp.Execute("query-cpus")[qmp.RETURN_KEY])
+      # Will fail if ballooning is not enabled, but we can then just resort to
+      # the value above.
+      mem_bytes = qmp.Execute("query-balloon")[qmp.RETURN_KEY][qmp.ACTUAL_KEY]
+      memory = mem_bytes / 1048576
+    except errors.HypervisorError:
+      pass
+
     return (instance_name, pid, memory, vcpus, istat, times)
 
   def GetAllInstancesInfo(self):