qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/9] monitor/hmp-cmds: small improvements for migration
@ 2020-06-03  8:08 Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 1/9] tests/migration: mem leak fix Mao Zhongyi
                   ` (8 more replies)
  0 siblings, 9 replies; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, Mao Zhongyi, quintela

patch1 ~ patch4 have been r-b, here rebase to HEAD.
patch5 ~ patch9 mainly decorate some statistics
and minor logic changes of migration, because they
all involve migration, so merged into a patchset.

Cc: dgilbert@redhat.com
Cc: quintela@redhat.com

Mao Zhongyi (9):
  tests/migration: mem leak fix
  tests/migration: fix unreachable path in stress test
  monitor/hmp-cmds: add units for migrate_parameters
  monitor/hmp-cmds: don't silently output when running
    'migrate_set_downtime' fails
  monitor/hmp-cmds: delete redundant Error check before invoke
    hmp_handle_error()
  monitor/hmp-cmds: add 'goto end' to reduce duplicate code.
  monitor/hmp-cmds: improvements for the 'info migrate'
  docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs
  migration/ram: calculate un/encoded_size only when needed.

 docs/xbzrle.txt          |  8 +++++---
 migration/ram.c          |  9 +++++----
 monitor/hmp-cmds.c       | 30 ++++++++++++++++--------------
 tests/migration/stress.c | 34 +++++++---------------------------
 4 files changed, 33 insertions(+), 48 deletions(-)

-- 
2.17.1





^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/9] tests/migration: mem leak fix
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
@ 2020-06-03  8:08 ` Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 2/9] tests/migration: fix unreachable path in stress test Mao Zhongyi
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

‘data’ has the possibility of memory leaks, so use the
glib macros g_autofree recommended by CODING_STYLE.rst
to automatically release the memory that returned from
g_malloc().

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
 tests/migration/stress.c | 21 ++-------------------
 1 file changed, 2 insertions(+), 19 deletions(-)

diff --git a/tests/migration/stress.c b/tests/migration/stress.c
index 0c23964693..f9626d50ee 100644
--- a/tests/migration/stress.c
+++ b/tests/migration/stress.c
@@ -170,26 +170,14 @@ static unsigned long long now(void)
 static int stressone(unsigned long long ramsizeMB)
 {
     size_t pagesPerMB = 1024 * 1024 / PAGE_SIZE;
-    char *ram = malloc(ramsizeMB * 1024 * 1024);
+    g_autofree char *ram = g_malloc(ramsizeMB * 1024 * 1024);
     char *ramptr;
     size_t i, j, k;
-    char *data = malloc(PAGE_SIZE);
+    g_autofree char *data = g_malloc(PAGE_SIZE);
     char *dataptr;
     size_t nMB = 0;
     unsigned long long before, after;
 
-    if (!ram) {
-        fprintf(stderr, "%s (%05d): ERROR: cannot allocate %llu MB of RAM: %s\n",
-                argv0, gettid(), ramsizeMB, strerror(errno));
-        return -1;
-    }
-    if (!data) {
-        fprintf(stderr, "%s (%d): ERROR: cannot allocate %d bytes of RAM: %s\n",
-                argv0, gettid(), PAGE_SIZE, strerror(errno));
-        free(ram);
-        return -1;
-    }
-
     /* We don't care about initial state, but we do want
      * to fault it all into RAM, otherwise the first iter
      * of the loop below will be quite slow. We can't use
@@ -198,8 +186,6 @@ static int stressone(unsigned long long ramsizeMB)
     memset(ram, 0xfe, ramsizeMB * 1024 * 1024);
 
     if (random_bytes(data, PAGE_SIZE) < 0) {
-        free(ram);
-        free(data);
         return -1;
     }
 
@@ -227,9 +213,6 @@ static int stressone(unsigned long long ramsizeMB)
             }
         }
     }
-
-    free(data);
-    free(ram);
 }
 
 
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/9] tests/migration: fix unreachable path in stress test
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 1/9] tests/migration: mem leak fix Mao Zhongyi
@ 2020-06-03  8:08 ` Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 3/9] monitor/hmp-cmds: add units for migrate_parameters Mao Zhongyi
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

If stressone() or stress() exits it's because of a failure
because the test runs forever otherwise, so change stressone
and stress type to void to make the exit_failure() as the exit
function of main().

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
 tests/migration/stress.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/tests/migration/stress.c b/tests/migration/stress.c
index f9626d50ee..a062ef6b55 100644
--- a/tests/migration/stress.c
+++ b/tests/migration/stress.c
@@ -167,7 +167,7 @@ static unsigned long long now(void)
     return (tv.tv_sec * 1000ull) + (tv.tv_usec / 1000ull);
 }
 
-static int stressone(unsigned long long ramsizeMB)
+static void stressone(unsigned long long ramsizeMB)
 {
     size_t pagesPerMB = 1024 * 1024 / PAGE_SIZE;
     g_autofree char *ram = g_malloc(ramsizeMB * 1024 * 1024);
@@ -186,7 +186,7 @@ static int stressone(unsigned long long ramsizeMB)
     memset(ram, 0xfe, ramsizeMB * 1024 * 1024);
 
     if (random_bytes(data, PAGE_SIZE) < 0) {
-        return -1;
+        return;
     }
 
     before = now();
@@ -225,7 +225,7 @@ static void *stressthread(void *arg)
     return NULL;
 }
 
-static int stress(unsigned long long ramsizeGB, int ncpus)
+static void stress(unsigned long long ramsizeGB, int ncpus)
 {
     size_t i;
     unsigned long long ramsizeMB = ramsizeGB * 1024 / ncpus;
@@ -238,8 +238,6 @@ static int stress(unsigned long long ramsizeGB, int ncpus)
     }
 
     stressone(ramsizeMB);
-
-    return 0;
 }
 
 
@@ -335,8 +333,7 @@ int main(int argc, char **argv)
     fprintf(stdout, "%s (%05d): INFO: RAM %llu GiB across %d CPUs\n",
             argv0, gettid(), ramsizeGB, ncpus);
 
-    if (stress(ramsizeGB, ncpus) < 0)
-        exit_failure();
+    stress(ramsizeGB, ncpus);
 
-    exit_success();
+    exit_failure();
 }
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/9] monitor/hmp-cmds: add units for migrate_parameters
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 1/9] tests/migration: mem leak fix Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 2/9] tests/migration: fix unreachable path in stress test Mao Zhongyi
@ 2020-06-03  8:08 ` Mao Zhongyi
  2020-06-03  8:08 ` [PATCH 4/9] monitor/hmp-cmds: don't silently output when running 'migrate_set_downtime' fails Mao Zhongyi
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

When running:
(qemu) info migrate_parameters
announce-initial: 50 ms
announce-max: 550 ms
announce-step: 100 ms
compress-wait-thread: on
...
max-bandwidth: 33554432 bytes/second
downtime-limit: 300 milliseconds
x-checkpoint-delay: 20000
...
xbzrle-cache-size: 67108864

add units for the parameters 'x-checkpoint-delay' and
'xbzrle-cache-size', it's easier to read, also move
milliseconds to ms to keep the same style.

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
---
 monitor/hmp-cmds.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 9c61e769ca..8c3e436b39 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -443,11 +443,11 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
             MigrationParameter_str(MIGRATION_PARAMETER_MAX_BANDWIDTH),
             params->max_bandwidth);
         assert(params->has_downtime_limit);
-        monitor_printf(mon, "%s: %" PRIu64 " milliseconds\n",
+        monitor_printf(mon, "%s: %" PRIu64 " ms\n",
             MigrationParameter_str(MIGRATION_PARAMETER_DOWNTIME_LIMIT),
             params->downtime_limit);
         assert(params->has_x_checkpoint_delay);
-        monitor_printf(mon, "%s: %u\n",
+        monitor_printf(mon, "%s: %u ms\n",
             MigrationParameter_str(MIGRATION_PARAMETER_X_CHECKPOINT_DELAY),
             params->x_checkpoint_delay);
         assert(params->has_block_incremental);
@@ -460,7 +460,7 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
         monitor_printf(mon, "%s: %s\n",
             MigrationParameter_str(MIGRATION_PARAMETER_MULTIFD_COMPRESSION),
             MultiFDCompression_str(params->multifd_compression));
-        monitor_printf(mon, "%s: %" PRIu64 "\n",
+        monitor_printf(mon, "%s: %" PRIu64 " bytes\n",
             MigrationParameter_str(MIGRATION_PARAMETER_XBZRLE_CACHE_SIZE),
             params->xbzrle_cache_size);
         monitor_printf(mon, "%s: %" PRIu64 "\n",
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/9] monitor/hmp-cmds: don't silently output when running 'migrate_set_downtime' fails
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (2 preceding siblings ...)
  2020-06-03  8:08 ` [PATCH 3/9] monitor/hmp-cmds: add units for migrate_parameters Mao Zhongyi
@ 2020-06-03  8:08 ` Mao Zhongyi
  2020-06-03  8:09 ` [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error() Mao Zhongyi
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:08 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

Although 'migrate_set_downtime' has been deprecated and replaced
with 'migrate_set_parameter downtime_limit', it has not been
completely eliminated, possibly due to compatibility with older
versions. I think as long as this old parameter is running, we
should report appropriate message when something goes wrong, not
be silent.

before:
(qemu) migrate_set_downtime -1
(qemu)

after:
(qemu) migrate_set_downtime -1
Error: Parameter 'downtime_limit' expects an integer in the range of 0 to 2000 seconds

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 monitor/hmp-cmds.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 8c3e436b39..6938f1060e 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1188,8 +1188,11 @@ void hmp_migrate_pause(Monitor *mon, const QDict *qdict)
 /* Kept for backwards compatibility */
 void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict)
 {
+    Error *err = NULL;
+
     double value = qdict_get_double(qdict, "value");
-    qmp_migrate_set_downtime(value, NULL);
+    qmp_migrate_set_downtime(value, &err);
+    hmp_handle_error(mon, err);
 }
 
 void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict)
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error()
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (3 preceding siblings ...)
  2020-06-03  8:08 ` [PATCH 4/9] monitor/hmp-cmds: don't silently output when running 'migrate_set_downtime' fails Mao Zhongyi
@ 2020-06-03  8:09 ` Mao Zhongyi
  2020-06-11 18:52   ` Dr. David Alan Gilbert
  2020-06-03  8:09 ` [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code Mao Zhongyi
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

hmp_handle_error() does Error check internally.

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
---
 monitor/hmp-cmds.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 6938f1060e..acdd6baff3 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1636,9 +1636,8 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
     obj = user_creatable_add_opts(opts, &err);
     qemu_opts_del(opts);
 
-    if (err) {
-        hmp_handle_error(mon, err);
-    }
+    hmp_handle_error(mon, err);
+
     if (obj) {
         object_unref(obj);
     }
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code.
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (4 preceding siblings ...)
  2020-06-03  8:09 ` [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error() Mao Zhongyi
@ 2020-06-03  8:09 ` Mao Zhongyi
  2020-06-11 18:56   ` Dr. David Alan Gilbert
  2020-06-03  8:09 ` [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate' Mao Zhongyi
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
---
 monitor/hmp-cmds.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index acdd6baff3..e8cf72eb3a 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1501,8 +1501,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
                                 read_only,
                                 BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN, &err);
             if (err) {
-                hmp_handle_error(mon, err);
-                return;
+                goto end;
             }
         }
 
@@ -1511,6 +1510,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
                                    &err);
     }
 
+end:
     hmp_handle_error(mon, err);
 }
 
@@ -1629,13 +1629,13 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
 
     opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err);
     if (err) {
-        hmp_handle_error(mon, err);
-        return;
+        goto end;
     }
 
     obj = user_creatable_add_opts(opts, &err);
     qemu_opts_del(opts);
 
+end:
     hmp_handle_error(mon, err);
 
     if (obj) {
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate'
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (5 preceding siblings ...)
  2020-06-03  8:09 ` [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code Mao Zhongyi
@ 2020-06-03  8:09 ` Mao Zhongyi
  2020-06-11 18:57   ` Dr. David Alan Gilbert
  2020-06-03  8:09 ` [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs Mao Zhongyi
  2020-06-03  8:09 ` [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed Mao Zhongyi
  8 siblings, 1 reply; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

When running:

(qemu) info migrate
globals:
store-global-state: on
only-migratable: off
...
xbzrle transferred: 640892 kbytes
xbzrle pages: 16645936 pages
xbzrle cache miss: 1525426
xbzrle cache miss rate: 0.09
xbzrle encoding rate: 91.42
xbzrle overflow: 40896
...
compression pages: 377710 pages
compression busy: 0
compression busy rate: 0.00
compressed size: 463169457
compression rate: 3.33

Add units for 'xbzrle cache miss' and 'compressed size',
make it easier to read.

Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
---
 docs/xbzrle.txt    | 2 +-
 monitor/hmp-cmds.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/docs/xbzrle.txt b/docs/xbzrle.txt
index b431bdaf0f..385b4993f8 100644
--- a/docs/xbzrle.txt
+++ b/docs/xbzrle.txt
@@ -112,7 +112,7 @@ is recommended.
     cache size: H bytes
     xbzrle transferred: I kbytes
     xbzrle pages: J pages
-    xbzrle cache miss: K
+    xbzrle cache miss: K pages
     xbzrle overflow: L
 
 xbzrle cache-miss: the number of cache misses to date - high cache-miss rate
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index e8cf72eb3a..24f3e8e44d 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -299,7 +299,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
                        info->xbzrle_cache->bytes >> 10);
         monitor_printf(mon, "xbzrle pages: %" PRIu64 " pages\n",
                        info->xbzrle_cache->pages);
-        monitor_printf(mon, "xbzrle cache miss: %" PRIu64 "\n",
+        monitor_printf(mon, "xbzrle cache miss: %" PRIu64 " pages\n",
                        info->xbzrle_cache->cache_miss);
         monitor_printf(mon, "xbzrle cache miss rate: %0.2f\n",
                        info->xbzrle_cache->cache_miss_rate);
@@ -316,8 +316,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
                        info->compression->busy);
         monitor_printf(mon, "compression busy rate: %0.2f\n",
                        info->compression->busy_rate);
-        monitor_printf(mon, "compressed size: %" PRIu64 "\n",
-                       info->compression->compressed_size);
+        monitor_printf(mon, "compressed size: %" PRIu64 " kbytes\n",
+                       info->compression->compressed_size >> 10);
         monitor_printf(mon, "compression rate: %0.2f\n",
                        info->compression->compression_rate);
     }
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (6 preceding siblings ...)
  2020-06-03  8:09 ` [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate' Mao Zhongyi
@ 2020-06-03  8:09 ` Mao Zhongyi
  2020-06-11 19:00   ` Dr. David Alan Gilbert
  2020-06-03  8:09 ` [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed Mao Zhongyi
  8 siblings, 1 reply; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
---
 docs/xbzrle.txt | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/docs/xbzrle.txt b/docs/xbzrle.txt
index 385b4993f8..6bd1828f34 100644
--- a/docs/xbzrle.txt
+++ b/docs/xbzrle.txt
@@ -113,9 +113,11 @@ is recommended.
     xbzrle transferred: I kbytes
     xbzrle pages: J pages
     xbzrle cache miss: K pages
-    xbzrle overflow: L
+    xbzrle cache miss rate: L
+    xbzrle encoding rate: M
+    xbzrle overflow: N
 
-xbzrle cache-miss: the number of cache misses to date - high cache-miss rate
+xbzrle cache miss: the number of cache misses to date - high cache-miss rate
 indicates that the cache size is set too low.
 xbzrle overflow: the number of overflows in the decoding which where the delta
 could not be compressed. This can happen if the changes in the pages are too
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed.
  2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
                   ` (7 preceding siblings ...)
  2020-06-03  8:09 ` [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs Mao Zhongyi
@ 2020-06-03  8:09 ` Mao Zhongyi
  2020-06-11 19:05   ` Dr. David Alan Gilbert
  8 siblings, 1 reply; 16+ messages in thread
From: Mao Zhongyi @ 2020-06-03  8:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Mao Zhongyi

Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
---
 migration/ram.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/migration/ram.c b/migration/ram.c
index 41cc530d9d..ca20030b64 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -910,14 +910,15 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
         xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
             rs->xbzrle_cache_miss_prev) / page_count;
         rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
-        unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
-                         TARGET_PAGE_SIZE;
-        encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
         if (xbzrle_counters.pages == rs->xbzrle_pages_prev) {
             xbzrle_counters.encoding_rate = 0;
-        } else if (!encoded_size) {
+        } else if (xbzrle_counters.bytes == rs->xbzrle_bytes_prev) {
             xbzrle_counters.encoding_rate = UINT64_MAX;
         } else {
+            unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
+                             TARGET_PAGE_SIZE;
+            encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
+
             xbzrle_counters.encoding_rate = unencoded_size / encoded_size;
         }
         rs->xbzrle_pages_prev = xbzrle_counters.pages;
-- 
2.17.1





^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error()
  2020-06-03  8:09 ` [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error() Mao Zhongyi
@ 2020-06-11 18:52   ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 16+ messages in thread
From: Dr. David Alan Gilbert @ 2020-06-11 18:52 UTC (permalink / raw)
  To: Mao Zhongyi; +Cc: qemu-devel

* Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
> hmp_handle_error() does Error check internally.
> 
> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  monitor/hmp-cmds.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index 6938f1060e..acdd6baff3 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -1636,9 +1636,8 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
>      obj = user_creatable_add_opts(opts, &err);
>      qemu_opts_del(opts);
>  
> -    if (err) {
> -        hmp_handle_error(mon, err);
> -    }
> +    hmp_handle_error(mon, err);
> +
>      if (obj) {
>          object_unref(obj);
>      }
> -- 
> 2.17.1
> 
> 
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code.
  2020-06-03  8:09 ` [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code Mao Zhongyi
@ 2020-06-11 18:56   ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 16+ messages in thread
From: Dr. David Alan Gilbert @ 2020-06-11 18:56 UTC (permalink / raw)
  To: Mao Zhongyi; +Cc: qemu-devel

* Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>

Yes OK; I don't particularly like goto's; especially in these simpler
cases, but it's OK.


Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  monitor/hmp-cmds.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index acdd6baff3..e8cf72eb3a 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -1501,8 +1501,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
>                                  read_only,
>                                  BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN, &err);
>              if (err) {
> -                hmp_handle_error(mon, err);
> -                return;
> +                goto end;
>              }
>          }
>  
> @@ -1511,6 +1510,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
>                                     &err);
>      }
>  
> +end:
>      hmp_handle_error(mon, err);
>  }
>  
> @@ -1629,13 +1629,13 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
>  
>      opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err);
>      if (err) {
> -        hmp_handle_error(mon, err);
> -        return;
> +        goto end;
>      }
>  
>      obj = user_creatable_add_opts(opts, &err);
>      qemu_opts_del(opts);
>  
> +end:
>      hmp_handle_error(mon, err);
>  
>      if (obj) {
> -- 
> 2.17.1
> 
> 
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate'
  2020-06-03  8:09 ` [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate' Mao Zhongyi
@ 2020-06-11 18:57   ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 16+ messages in thread
From: Dr. David Alan Gilbert @ 2020-06-11 18:57 UTC (permalink / raw)
  To: Mao Zhongyi; +Cc: qemu-devel

* Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
> When running:
> 
> (qemu) info migrate
> globals:
> store-global-state: on
> only-migratable: off
> ...
> xbzrle transferred: 640892 kbytes
> xbzrle pages: 16645936 pages
> xbzrle cache miss: 1525426
> xbzrle cache miss rate: 0.09
> xbzrle encoding rate: 91.42
> xbzrle overflow: 40896
> ...
> compression pages: 377710 pages
> compression busy: 0
> compression busy rate: 0.00
> compressed size: 463169457
> compression rate: 3.33
> 
> Add units for 'xbzrle cache miss' and 'compressed size',
> make it easier to read.
> 
> Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  docs/xbzrle.txt    | 2 +-
>  monitor/hmp-cmds.c | 6 +++---
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/docs/xbzrle.txt b/docs/xbzrle.txt
> index b431bdaf0f..385b4993f8 100644
> --- a/docs/xbzrle.txt
> +++ b/docs/xbzrle.txt
> @@ -112,7 +112,7 @@ is recommended.
>      cache size: H bytes
>      xbzrle transferred: I kbytes
>      xbzrle pages: J pages
> -    xbzrle cache miss: K
> +    xbzrle cache miss: K pages
>      xbzrle overflow: L
>  
>  xbzrle cache-miss: the number of cache misses to date - high cache-miss rate
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index e8cf72eb3a..24f3e8e44d 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -299,7 +299,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>                         info->xbzrle_cache->bytes >> 10);
>          monitor_printf(mon, "xbzrle pages: %" PRIu64 " pages\n",
>                         info->xbzrle_cache->pages);
> -        monitor_printf(mon, "xbzrle cache miss: %" PRIu64 "\n",
> +        monitor_printf(mon, "xbzrle cache miss: %" PRIu64 " pages\n",
>                         info->xbzrle_cache->cache_miss);
>          monitor_printf(mon, "xbzrle cache miss rate: %0.2f\n",
>                         info->xbzrle_cache->cache_miss_rate);
> @@ -316,8 +316,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
>                         info->compression->busy);
>          monitor_printf(mon, "compression busy rate: %0.2f\n",
>                         info->compression->busy_rate);
> -        monitor_printf(mon, "compressed size: %" PRIu64 "\n",
> -                       info->compression->compressed_size);
> +        monitor_printf(mon, "compressed size: %" PRIu64 " kbytes\n",
> +                       info->compression->compressed_size >> 10);
>          monitor_printf(mon, "compression rate: %0.2f\n",
>                         info->compression->compression_rate);
>      }
> -- 
> 2.17.1
> 
> 
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs
  2020-06-03  8:09 ` [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs Mao Zhongyi
@ 2020-06-11 19:00   ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 16+ messages in thread
From: Dr. David Alan Gilbert @ 2020-06-11 19:00 UTC (permalink / raw)
  To: Mao Zhongyi; +Cc: qemu-devel

* Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  docs/xbzrle.txt | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/docs/xbzrle.txt b/docs/xbzrle.txt
> index 385b4993f8..6bd1828f34 100644
> --- a/docs/xbzrle.txt
> +++ b/docs/xbzrle.txt
> @@ -113,9 +113,11 @@ is recommended.
>      xbzrle transferred: I kbytes
>      xbzrle pages: J pages
>      xbzrle cache miss: K pages
> -    xbzrle overflow: L
> +    xbzrle cache miss rate: L
> +    xbzrle encoding rate: M
> +    xbzrle overflow: N
>  
> -xbzrle cache-miss: the number of cache misses to date - high cache-miss rate
> +xbzrle cache miss: the number of cache misses to date - high cache-miss rate
>  indicates that the cache size is set too low.
>  xbzrle overflow: the number of overflows in the decoding which where the delta
>  could not be compressed. This can happen if the changes in the pages are too
> -- 
> 2.17.1
> 
> 
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed.
  2020-06-03  8:09 ` [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed Mao Zhongyi
@ 2020-06-11 19:05   ` Dr. David Alan Gilbert
  2020-06-12  3:06     ` [PATCH 9/9] migration/ram: calculate un/encoded_size only whenneeded maozy
  0 siblings, 1 reply; 16+ messages in thread
From: Dr. David Alan Gilbert @ 2020-06-11 19:05 UTC (permalink / raw)
  To: Mao Zhongyi; +Cc: qemu-devel

* Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
> ---
>  migration/ram.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/migration/ram.c b/migration/ram.c
> index 41cc530d9d..ca20030b64 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -910,14 +910,15 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
>          xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
>              rs->xbzrle_cache_miss_prev) / page_count;
>          rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
> -        unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
> -                         TARGET_PAGE_SIZE;
> -        encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
>          if (xbzrle_counters.pages == rs->xbzrle_pages_prev) {
>              xbzrle_counters.encoding_rate = 0;
> -        } else if (!encoded_size) {
> +        } else if (xbzrle_counters.bytes == rs->xbzrle_bytes_prev) {

No, I don't think this change is worth it - this is really just the same
as 'encoded_size', and then we may as well keep the two together.

Dave

>              xbzrle_counters.encoding_rate = UINT64_MAX;
>          } else {
> +            unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
> +                             TARGET_PAGE_SIZE;
> +            encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
> +
>              xbzrle_counters.encoding_rate = unencoded_size / encoded_size;
>          }
>          rs->xbzrle_pages_prev = xbzrle_counters.pages;
> -- 
> 2.17.1
> 
> 
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] migration/ram: calculate un/encoded_size only whenneeded.
  2020-06-11 19:05   ` Dr. David Alan Gilbert
@ 2020-06-12  3:06     ` maozy
  0 siblings, 0 replies; 16+ messages in thread
From: maozy @ 2020-06-12  3:06 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: qemu-devel, maozhongyi



On 6/12/20 3:05 AM, Dr. David Alan Gilbert wrote:
> * Mao Zhongyi (maozhongyi@cmss.chinamobile.com) wrote:
>> Signed-off-by: Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
>> ---
>>   migration/ram.c | 9 +++++----
>>   1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/migration/ram.c b/migration/ram.c
>> index 41cc530d9d..ca20030b64 100644
>> --- a/migration/ram.c
>> +++ b/migration/ram.c
>> @@ -910,14 +910,15 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
>>           xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
>>               rs->xbzrle_cache_miss_prev) / page_count;
>>           rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
>> -        encoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
>> -                         TARGET_PAGE_SIZE;
>> -        encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
>>           if (xbzrle_counters.pages == rs->xbzrle_pages_prev) {
>>               xbzrle_counters.encoding_rate = 0;
>> -        } else if (!encoded_size) {
>> +        } else if (xbzrle_counters.bytes == rs->xbzrle_bytes_prev) {
> 
> No, I don't think this change is worth it - this is really just the same
> as 'encoded_size', and then we may as well keep the two together.

ok, thanks, let's keep 'encode_size' here.

BTW, this change borrows from the behavior of comppressed:

...
         compressed_size = compression_counters.compressed_size -
                           rs->compressed_size_prev;
         if (compressed_size) {
             double uncompressed_size = (compression_counters.pages -
                                     rs->compress_pages_prev) * 
TARGET_PAGE_SIZE;

             /* Compression-Ratio = Uncompressed-size / Compressed-size */
             compression_counters.compression_rate =
                                         uncompressed_size / 
compressed_size;
...


It splits 'compressed_size' and 'uncompressed_size', and calculates
'uncompressed_size' only when needed. Although 'unencoded_size' is
calculated, it is not necessarily used. if you think this split is
unnecessary, just discard it, so do I need to drop this patch and
resend the v2?

Thanks,
Mao

> 
> Dave
> 
>>               xbzrle_counters.encoding_rate = UINT64_MAX;
>>           } else {
>> +            unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
>> +                             TARGET_PAGE_SIZE;
>> +            encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
>> +
>>               xbzrle_counters.encoding_rate = unencoded_size / encoded_size;
>>           }
>>           rs->xbzrle_pages_prev = xbzrle_counters.pages;
>> -- 
>> 2.17.1
>>
>>
>>
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> 
> 




^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2020-06-12  3:07 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-03  8:08 [PATCH 0/9] monitor/hmp-cmds: small improvements for migration Mao Zhongyi
2020-06-03  8:08 ` [PATCH 1/9] tests/migration: mem leak fix Mao Zhongyi
2020-06-03  8:08 ` [PATCH 2/9] tests/migration: fix unreachable path in stress test Mao Zhongyi
2020-06-03  8:08 ` [PATCH 3/9] monitor/hmp-cmds: add units for migrate_parameters Mao Zhongyi
2020-06-03  8:08 ` [PATCH 4/9] monitor/hmp-cmds: don't silently output when running 'migrate_set_downtime' fails Mao Zhongyi
2020-06-03  8:09 ` [PATCH 5/9] monitor/hmp-cmds: delete redundant Error check before invoke hmp_handle_error() Mao Zhongyi
2020-06-11 18:52   ` Dr. David Alan Gilbert
2020-06-03  8:09 ` [PATCH 6/9] monitor/hmp-cmds: add 'goto end' to reduce duplicate code Mao Zhongyi
2020-06-11 18:56   ` Dr. David Alan Gilbert
2020-06-03  8:09 ` [PATCH 7/9] monitor/hmp-cmds: improvements for the 'info migrate' Mao Zhongyi
2020-06-11 18:57   ` Dr. David Alan Gilbert
2020-06-03  8:09 ` [PATCH 8/9] docs/xbzrle: update 'cache miss rate' and 'encoding rate' to docs Mao Zhongyi
2020-06-11 19:00   ` Dr. David Alan Gilbert
2020-06-03  8:09 ` [PATCH 9/9] migration/ram: calculate un/encoded_size only when needed Mao Zhongyi
2020-06-11 19:05   ` Dr. David Alan Gilbert
2020-06-12  3:06     ` [PATCH 9/9] migration/ram: calculate un/encoded_size only whenneeded maozy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).