]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: expand domain memory statistics with 'last-update' timestamp
authorDerbyshev Dmitry <dderbyshev@virtuozzo.com>
Wed, 1 Jun 2016 17:07:07 +0000 (20:07 +0300)
committerPavel Hrdina <phrdina@redhat.com>
Tue, 26 Jul 2016 15:30:01 +0000 (17:30 +0200)
QEMU reports timestamp along with other memory statistics, but this information is not saved into domain statistics.
It could be useful to determine if the data reported is fresh or not.
Balloon statistics are not reported in hrf, so no modifications are made in qemu_monitor_text.c.

Signed-off-by: Derbyshev Dmitry <dderbyshev@virtuozzo.com>
include/libvirt/libvirt-domain.h
src/libvirt-domain.c
src/qemu/qemu_monitor_json.c
tools/virsh-domain-monitor.c

index 3fb482b3062e07ab46b3e2620909441789129e53..e0e3739b084c4f9a0590c216146d9b5e4ea7f38d 100644 (file)
@@ -609,11 +609,14 @@ typedef enum {
      */
     VIR_DOMAIN_MEMORY_STAT_USABLE          = 8,
 
+    /* Timestamp of the last update of statistics */
+    VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE     = 9,
+
     /*
      * 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              = 9,
+    VIR_DOMAIN_MEMORY_STAT_NR              = 10,
 
 # ifdef VIR_ENUM_SENTINELS
     VIR_DOMAIN_MEMORY_STAT_LAST = VIR_DOMAIN_MEMORY_STAT_NR
index 1467030db76f798af2b5a773d1f843e94167ff17..413f8af5a41fb06540983e300ae565cbd6994936 100644 (file)
@@ -5991,6 +5991,8 @@ virDomainGetInterfaceParameters(virDomainPtr domain,
  *     to swap, corresponds to 'Available' in /proc/meminfo
  * VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON:
  *     Current balloon value (in kb).
+ * VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE
+ *     Timestamp of the last statistic
  *
  * Returns: The number of stats provided or -1 in case of failure.
  */
index 7fa984741b64091ecac00664d933dad6ac3aec22..37bab949a19bca97e2f36624795b6a68bcfe9e28 100644 (file)
@@ -1633,10 +1633,10 @@ qemuMonitorJSONGetBalloonInfo(qemuMonitorPtr mon,
  * rates and/or whether data has been collected since a previous cycle.
  * It's currently unused.
  */
-#define GET_BALLOON_STATS(FIELD, TAG, DIVISOR)                                \
-    if (virJSONValueObjectHasKey(statsdata, FIELD) &&                         \
+#define GET_BALLOON_STATS(OBJECT, FIELD, TAG, DIVISOR)                        \
+    if (virJSONValueObjectHasKey(OBJECT, FIELD) &&                            \
        (got < nr_stats)) {                                                    \
-        if (virJSONValueObjectGetNumberUlong(statsdata, FIELD, &mem) < 0) {   \
+        if (virJSONValueObjectGetNumberUlong(OBJECT, FIELD, &mem) < 0) {      \
             VIR_DEBUG("Failed to get '%s' value", FIELD);                     \
         } else {                                                              \
             /* Not being collected? No point in providing bad data */         \
@@ -1707,20 +1707,22 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
         goto cleanup;
     }
 
-    GET_BALLOON_STATS("stat-swap-in",
+    GET_BALLOON_STATS(statsdata, "stat-swap-in",
                       VIR_DOMAIN_MEMORY_STAT_SWAP_IN, 1024);
-    GET_BALLOON_STATS("stat-swap-out",
+    GET_BALLOON_STATS(statsdata, "stat-swap-out",
                       VIR_DOMAIN_MEMORY_STAT_SWAP_OUT, 1024);
-    GET_BALLOON_STATS("stat-major-faults",
+    GET_BALLOON_STATS(statsdata, "stat-major-faults",
                       VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT, 1);
-    GET_BALLOON_STATS("stat-minor-faults",
+    GET_BALLOON_STATS(statsdata, "stat-minor-faults",
                       VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT, 1);
-    GET_BALLOON_STATS("stat-free-memory",
+    GET_BALLOON_STATS(statsdata, "stat-free-memory",
                       VIR_DOMAIN_MEMORY_STAT_UNUSED, 1024);
-    GET_BALLOON_STATS("stat-total-memory",
+    GET_BALLOON_STATS(statsdata, "stat-total-memory",
                       VIR_DOMAIN_MEMORY_STAT_AVAILABLE, 1024);
-    GET_BALLOON_STATS("stat-available-memory",
+    GET_BALLOON_STATS(statsdata, "stat-available-memory",
                       VIR_DOMAIN_MEMORY_STAT_USABLE, 1024);
+    GET_BALLOON_STATS(data, "last-update",
+                      VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE, 1);
     ret = got;
  cleanup:
     virJSONValueFree(cmd);
index 7f30da2188653bad6e5da0a28fb2c9c9eb7a6502..77aa272265a44db332f7c797cc63a890b6f8d7e3 100644 (file)
@@ -375,6 +375,8 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
             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);
+        if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_LAST_UPDATE)
+            vshPrint(ctl, "last_update %llu\n", stats[i].val);
     }
 
     ret = true;