Patchwork [6/7] migration: print expected downtime in info migrate

login
register
mail settings
Submitter Juan Quintela
Date Aug. 13, 2012, 10:50 a.m.
Message ID <1344855057-32509-7-git-send-email-quintela@redhat.com>
Download mbox | patch
Permalink /patch/176916/
State New
Headers show

Comments

Juan Quintela - Aug. 13, 2012, 10:50 a.m.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 arch_init.c      | 2 ++
 hmp.c            | 4 ++++
 migration.c      | 2 ++
 migration.h      | 1 +
 qapi-schema.json | 4 ++++
 5 files changed, 13 insertions(+)
Eric Blake - Aug. 13, 2012, 3:08 p.m.
On 08/13/2012 04:50 AM, Juan Quintela wrote:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  arch_init.c      | 2 ++
>  hmp.c            | 4 ++++
>  migration.c      | 2 ++
>  migration.h      | 1 +
>  qapi-schema.json | 4 ++++
>  5 files changed, 13 insertions(+)
> 

> +++ b/qapi-schema.json
> @@ -322,6 +322,9 @@
>  # @downtime: total downtime in milliseconds for the guest.
>  #        (since 1.2)
>  #
> +# @expected-downtime: expected downtime in milliseconds for the
> +#        guest in last walk of the dirty bitmap. (sincte 1.2)

s/sincte/since/

Should this field be marked optional?  That is, it makes sense to expose
the field while migration is ongoing, but when reporting the stats after
migration is complete, there is no longer any expected downtime.

Patch

diff --git a/arch_init.c b/arch_init.c
index 5559d68..b150852 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -538,6 +538,7 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
     int ret;
     int i;
     uint64_t expected_downtime;
+    MigrationState *s = migrate_get_current();

     bytes_transferred_last = bytes_transferred;
     bwidth = qemu_get_clock_ns(rt_clock);
@@ -593,6 +594,7 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
     if (expected_downtime <= migrate_max_downtime()) {
         memory_global_sync_dirty_bitmap(get_system_memory());
         expected_downtime = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
+        s->expected_downtime = expected_downtime / 1000000; /* ns -> ms */

         return expected_downtime <= migrate_max_downtime();
     }
diff --git a/hmp.c b/hmp.c
index 10fee1b..fc75ec3 100644
--- a/hmp.c
+++ b/hmp.c
@@ -151,6 +151,10 @@  void hmp_info_migrate(Monitor *mon)
         monitor_printf(mon, "Migration status: %s\n", info->status);
         monitor_printf(mon, "total time: %" PRIu64 " milliseconds\n",
                        info->total_time);
+        if (info->expected_downtime) {
+            monitor_printf(mon, "expected downtime: %" PRIu64 " milliseconds\n",
+                           info->expected_downtime);
+        }
         if (strcmp(info->status, "completed") == 0) {
             monitor_printf(mon, "downtime: %" PRIu64 " milliseconds\n",
                            info->downtime);
diff --git a/migration.c b/migration.c
index 12de941..28e23db 100644
--- a/migration.c
+++ b/migration.c
@@ -168,6 +168,7 @@  MigrationInfo *qmp_query_migrate(Error **errp)
         info->status = g_strdup("active");
         info->total_time = qemu_get_clock_ms(rt_clock)
             - s->total_time;
+        info->expected_downtime = s->expected_downtime;

         info->has_ram = true;
         info->ram = g_malloc0(sizeof(*info->ram));
@@ -195,6 +196,7 @@  MigrationInfo *qmp_query_migrate(Error **errp)
         info->status = g_strdup("completed");
         info->total_time = s->total_time;
         info->downtime = s->downtime;
+        info->expected_downtime = 0;

         info->has_ram = true;
         info->ram = g_malloc0(sizeof(*info->ram));
diff --git a/migration.h b/migration.h
index dabc333..552200c 100644
--- a/migration.h
+++ b/migration.h
@@ -41,6 +41,7 @@  struct MigrationState
     MigrationParams params;
     int64_t total_time;
     int64_t downtime;
+    int64_t expected_downtime;
     bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
     int64_t xbzrle_cache_size;
 };
diff --git a/qapi-schema.json b/qapi-schema.json
index 6df1ce3..3dcc12f 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -322,6 +322,9 @@ 
 # @downtime: total downtime in milliseconds for the guest.
 #        (since 1.2)
 #
+# @expected-downtime: expected downtime in milliseconds for the
+#        guest in last walk of the dirty bitmap. (sincte 1.2)
+#
 # Since: 0.14.0
 ##
 { 'type': 'MigrationInfo',
@@ -329,6 +332,7 @@ 
            '*disk': 'MigrationStats',
            '*xbzrle-cache': 'XBZRLECacheStats',
            'total-time': 'int',
+           'expected-downtime': 'int',
            'downtime': 'int'} }

 ##