]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: add the print of page size in cmd domjobinfo
authorChao Fan <fanc.fnst@cn.fujitsu.com>
Mon, 9 Oct 2017 02:00:03 +0000 (10:00 +0800)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 12 Oct 2017 15:06:07 +0000 (17:06 +0200)
The command "info migrate" of qemu outputs the dirty-pages-rate during
migration, but page size is different in different architectures. So
page size should be output to calculate dirty pages in bytes.

Page size is already implemented with commit
030ce1f8612215fcbe9d353dfeaeb2937f8e3f94 in qemu.
Now Implement the counter-part in libvirt.

Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
include/libvirt/libvirt-domain.h
src/qemu/qemu_domain.c
src/qemu/qemu_migration_cookie.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
tools/virsh-domain.c

index 030a62c436b181a5d01216d289405167612e7078..b181c0be4d1f05a786d9b36273deb41abeceb379 100644 (file)
@@ -3335,6 +3335,17 @@ typedef enum {
  */
 # define VIR_DOMAIN_JOB_MEMORY_DIRTY_RATE        "memory_dirty_rate"
 
+/**
+ * VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE:
+ *
+ * virDomainGetJobStats field: memory page size in bytes, as
+ * VIR_TYPED_PARAM_ULLONG. If present, this parameter can be used to
+ * convert other page based statistics, such as
+ * VIR_DOMAIN_JOB_MEMORY_DIRTY_RATE or VIR_DOMAIN_JOB_COMPRESSION_PAGES
+ * to bytes.
+ */
+# define VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE         "memory_page_size"
+
 /**
  * VIR_DOMAIN_JOB_MEMORY_ITERATION:
  *
index f621cf7afc4f5541c28b9b29e9717bbc29dc9616..ed27a91fa613b181733ceb718cc19d94831e6a7f 100644 (file)
@@ -570,6 +570,12 @@ qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
                                 stats->ram_iteration) < 0)
         goto error;
 
+    if (stats->ram_page_size > 0 &&
+        virTypedParamsAddULLong(&par, &npar, &maxpar,
+                                VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE,
+                                stats->ram_page_size) < 0)
+        goto error;
+
     if (virTypedParamsAddULLong(&par, &npar, &maxpar,
                                 VIR_DOMAIN_JOB_DISK_TOTAL,
                                 stats->disk_total +
index eef40a6cd055b263b559c0364ee984ae36675362..bc6a8dc552817c8b7154c0ab7eb691e3cadf8747 100644 (file)
@@ -653,6 +653,10 @@ qemuMigrationCookieStatisticsXMLFormat(virBufferPtr buf,
                       VIR_DOMAIN_JOB_MEMORY_ITERATION,
                       stats->ram_iteration);
 
+    virBufferAsprintf(buf, "<%1$s>%2$llu</%1$s>\n",
+                      VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE,
+                      stats->ram_page_size);
+
     virBufferAsprintf(buf, "<%1$s>%2$llu</%1$s>\n",
                       VIR_DOMAIN_JOB_DISK_TOTAL,
                       stats->disk_total);
@@ -1014,6 +1018,9 @@ qemuMigrationCookieStatisticsXMLParse(xmlXPathContextPtr ctxt)
     virXPathULongLong("string(./" VIR_DOMAIN_JOB_MEMORY_ITERATION "[1])",
                       ctxt, &stats->ram_iteration);
 
+    virXPathULongLong("string(./" VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE "[1])",
+                      ctxt, &stats->ram_page_size);
+
     virXPathULongLong("string(./" VIR_DOMAIN_JOB_DISK_TOTAL "[1])",
                       ctxt, &stats->disk_total);
     virXPathULongLong("string(./" VIR_DOMAIN_JOB_DISK_PROCESSED "[1])",
index d9c27acaef3793a0e3c55042554a181390789ff0..1647b46972a9c71759534ad6ea6de92be763667e 100644 (file)
@@ -677,6 +677,7 @@ struct _qemuMonitorMigrationStats {
     unsigned long long ram_normal;
     unsigned long long ram_normal_bytes;
     unsigned long long ram_dirty_rate;
+    unsigned long long ram_page_size;
     unsigned long long ram_iteration;
 
     unsigned long long disk_transferred;
index a9070fe636b998e7ef260ecc8e69fd323503e9d1..e591e85073c603a7b459209bf5faa6f543e377d2 100644 (file)
@@ -2892,6 +2892,8 @@ qemuMonitorJSONGetMigrationStatsReply(virJSONValuePtr reply,
                                                       &stats->ram_normal_bytes));
         ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-pages-rate",
                                                       &stats->ram_dirty_rate));
+        ignore_value(virJSONValueObjectGetNumberUlong(ram, "page-size",
+                                                      &stats->ram_page_size));
         ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-sync-count",
                                                       &stats->ram_iteration));
 
index a3f3b7c7bdc41f40e6b69ccd01e3ee72ed22b1c7..a50713d6e4ac2e3da812d208348f2141a5aedd77 100644 (file)
@@ -6020,6 +6020,14 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
             vshPrint(ctl, "%-17s %-12llu pages/s\n", _("Dirty rate:"), value);
         }
 
+        if ((rc = virTypedParamsGetULLong(params, nparams,
+                                          VIR_DOMAIN_JOB_MEMORY_PAGE_SIZE,
+                                          &value)) < 0) {
+            goto save_error;
+        } else if (rc) {
+            vshPrint(ctl, "%-17s %-12llu bytes\n", _("Page size:"), value);
+        }
+
         if ((rc = virTypedParamsGetULLong(params, nparams,
                                           VIR_DOMAIN_JOB_MEMORY_ITERATION,
                                           &value)) < 0) {