]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: Refactor 'virResctrlMonitorStats'
authorWang Huaqiang <huaqiang.wang@intel.com>
Tue, 11 Jun 2019 03:31:13 +0000 (11:31 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 5 Aug 2019 17:41:12 +0000 (19:41 +0200)
Refactor 'virResctrlMonitorStats' to track multiple statistical
records.

Signed-off-by: Wang Huaqiang <huaqiang.wang@intel.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_driver.c
src/util/virresctrl.c
src/util/virresctrl.h

index 98a4f7eaf7ca1612e17d8c0ce54ac19b29ea42b5..ab92f4ab735cd3ec5b2dc3f62a6996e2d6f0390f 100644 (file)
@@ -20842,7 +20842,7 @@ qemuDomainGetStatsCpuCache(virDomainObjPtr dom,
                      "cpu.cache.monitor.%zu.bank.%zu.bytes", i, j);
             if (virTypedParamsAddUInt(&record->params, &record->nparams,
                                       maxparams, param_name,
-                                      resdata[i]->stats[j]->val) < 0)
+                                      resdata[i]->stats[j]->vals[0]) < 0)
                 goto cleanup;
         }
     }
index af0e5c094553102c2141ac45b5e6417f89baab97..0117b8f60d5e624c93751373f7df6a10e08c4893 100644 (file)
@@ -2687,6 +2687,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
 {
     int rv = -1;
     int ret = -1;
+    unsigned int val = 0;
     DIR *dirp = NULL;
     char *datapath = NULL;
     char *filepath = NULL;
@@ -2743,7 +2744,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
         if (virStrToLong_uip(node_id, NULL, 0, &stat->id) < 0)
             goto cleanup;
 
-        rv = virFileReadValueUint(&stat->val, "%s/%s/%s", datapath,
+        rv = virFileReadValueUint(&val, "%s/%s/%s", datapath,
                                   ent->d_name, resource);
         if (rv == -2) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -2753,6 +2754,12 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
         if (rv < 0)
             goto cleanup;
 
+        if (VIR_APPEND_ELEMENT(stat->vals, stat->nvals, val) < 0)
+            goto cleanup;
+
+        if (virStringListAdd(&stat->features, resource) < 0)
+            goto cleanup;
+
         if (VIR_APPEND_ELEMENT(*stats, *nstats, stat) < 0)
             goto cleanup;
     }
@@ -2777,6 +2784,8 @@ virResctrlMonitorStatsFree(virResctrlMonitorStatsPtr stat)
     if (!stat)
         return;
 
+    virStringListFree(stat->features);
+    VIR_FREE(stat->vals);
     VIR_FREE(stat);
 }
 
index d92f24827817e23a7bb2185d475ac287e806a992..4c5f9f854d1984eace5898086d9983f96e294d30 100644 (file)
@@ -193,8 +193,16 @@ typedef virResctrlMonitor *virResctrlMonitorPtr;
 typedef struct _virResctrlMonitorStats virResctrlMonitorStats;
 typedef virResctrlMonitorStats *virResctrlMonitorStatsPtr;
 struct _virResctrlMonitorStats {
-    unsigned int id;
-    unsigned int val;
+    /* The system assigned cache ID associated with statistical record */
+     unsigned int id;
+    /* @features is a NULL terminal string list tracking the statistical record
+     * name.*/
+    char **features;
+    /* @vals store the statistical record values and @val[0] is the value for
+     * @features[0], @val[1] for@features[1] ... respectively */
+    unsigned int *vals;
+    /* The length of @vals array */
+    size_t nvals;
 };
 
 virResctrlMonitorPtr