]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Added RSS reporting
authorMartin Kletzander <mkletzan@redhat.com>
Tue, 24 Jan 2012 13:25:05 +0000 (14:25 +0100)
committerDaniel Veillard <veillard@redhat.com>
Fri, 3 Feb 2012 12:54:58 +0000 (20:54 +0800)
Added RSS information gathering into qemuMemoryStats into qemu driver
and the reporting into virsh dommemstat.

include/libvirt/libvirt.h.in
src/qemu/qemu_driver.c
tools/virsh.c

index 2b4adda6dcb478785bb447b7f7ff587adc15b6f1..cca6a5ddc0f3b026640091e292bf72fcf581eab6 100644 (file)
@@ -884,11 +884,16 @@ typedef enum {
 
     /* Current balloon value (in KB). */
     VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON  = 6,
+
+    /* Resident Set Size of the process running the domain. This value
+     * is in kB */
+    VIR_DOMAIN_MEMORY_STAT_RSS             = 7,
+
     /*
      * The number of statistics supported by this version of the interface.
      * To add new statistics, add them to the enum and increase this value.
      */
-    VIR_DOMAIN_MEMORY_STAT_NR              = 7,
+    VIR_DOMAIN_MEMORY_STAT_NR              = 8,
 
 #ifdef VIR_ENUM_SENTINELS
     VIR_DOMAIN_MEMORY_STAT_LAST = VIR_DOMAIN_MEMORY_STAT_NR
index 40bcba4dca148d312b78f0b0a391e082b4ede4bc..1daf4fca7cf272c67944bbf234d01b8ee5512180 100644 (file)
@@ -8035,7 +8035,7 @@ qemudDomainMemoryStats (virDomainPtr dom,
 {
     struct qemud_driver *driver = dom->conn->privateData;
     virDomainObjPtr vm;
-    unsigned int ret = -1;
+    int ret = -1;
 
     virCheckFlags(0, -1);
 
@@ -8054,14 +8054,27 @@ qemudDomainMemoryStats (virDomainPtr dom,
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
         goto cleanup;
 
-    if (virDomainObjIsActive(vm)) {
+    if (!virDomainObjIsActive(vm)) {
+        qemuReportError(VIR_ERR_OPERATION_INVALID,
+                        "%s", _("domain is not running"));
+    } else {
         qemuDomainObjPrivatePtr priv = vm->privateData;
         qemuDomainObjEnterMonitor(driver, vm);
         ret = qemuMonitorGetMemoryStats(priv->mon, stats, nr_stats);
         qemuDomainObjExitMonitor(driver, vm);
-    } else {
-        qemuReportError(VIR_ERR_OPERATION_INVALID,
-                        "%s", _("domain is not running"));
+
+        if (ret >= 0 && ret < nr_stats) {
+            long rss;
+            if (qemudGetProcessInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {
+                qemuReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                            _("cannot get RSS for domain"));
+            } else {
+                stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;
+                stats[ret].val = rss;
+                ret++;
+            }
+
+        }
     }
 
     if (qemuDomainObjEndJob(driver, vm) == 0)
index af781025ebcda0315a5d16af5138d292276cdd66..73c1ebe845973d18d88a36960dfc522ca5fb5cda 100644 (file)
@@ -2052,6 +2052,8 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
             vshPrint (ctl, "available %llu\n", stats[i].val);
         if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON)
             vshPrint (ctl, "actual %llu\n", stats[i].val);
+        if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_RSS)
+            vshPrint (ctl, "rss %llu\n", stats[i].val);
     }
 
     virDomainFree(dom);