Il 21/09/2012 10:47, Juan Quintela ha scritto: > Signed-off-by: Juan Quintela <quint...@redhat.com> > --- > arch_init.c | 2 ++ > hmp.c | 4 ++++ > migration.c | 2 ++ > migration.h | 1 + > qapi-schema.json | 5 +++++ > qmp-commands.hx | 6 ++++++ > 6 files changed, 20 insertions(+) > > diff --git a/arch_init.c b/arch_init.c > index 013e5e5..52ccc7b 100644 > --- a/arch_init.c > +++ b/arch_init.c > @@ -540,6 +540,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); > @@ -594,6 +595,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 40b0c05..71c9292 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -152,6 +152,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->has_expected_downtime) { > + monitor_printf(mon, "expected downtime: %" PRIu64 " > milliseconds\n", > + info->expected_downtime); > + } > if (info->has_downtime) { > monitor_printf(mon, "downtime: %" PRIu64 " milliseconds\n", > info->downtime); > diff --git a/migration.c b/migration.c > index 2827663..62c8fe9 100644 > --- a/migration.c > +++ b/migration.c > @@ -169,6 +169,8 @@ MigrationInfo *qmp_query_migrate(Error **errp) > info->has_total_time = true; > info->total_time = qemu_get_clock_ms(rt_clock) > - s->total_time; > + info->has_expected_downtime = true; > + info->expected_downtime = s->expected_downtime; > > 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 b5a4360..b8a1244 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -417,6 +417,10 @@ > # total downtime in milliseconds for the guest. > # (since 1.3) > # > +# @expected-downtime: #optional only present while migration is active > +# expected downtime in milliseconds for the guest in last walk > +# of the dirty bitmap. (since 1.3) > +# > # Since: 0.14.0 > ## > { 'type': 'MigrationInfo', > @@ -424,6 +428,7 @@ > '*disk': 'MigrationStats', > '*xbzrle-cache': 'XBZRLECacheStats', > '*total-time': 'int', > + '*expected-downtime': 'int', > '*downtime': 'int'} } > > ## > diff --git a/qmp-commands.hx b/qmp-commands.hx > index 37be613..68b6580 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -2269,6 +2269,9 @@ The main json-object contains the following: > time (json-int) > - "downtime": only present when migration has finished correctly > total amount in ms for downtime that happened (json-int) > +- "expected-downtime": only present while migration is active > + total amount in ms for downtime that was calculated on > + the last bitmap round (json-int) > - "ram": only present if "status" is "active", it is a json-object with the > following RAM information (in bytes): > - "transferred": amount transferred (json-int) > @@ -2330,6 +2333,7 @@ Examples: > "remaining":123, > "total":246, > "total-time":12345, > + "expected-downtime":12345, > "duplicate":123, > "normal":123, > "normal-bytes":123456 > @@ -2348,6 +2352,7 @@ Examples: > "remaining":1053304, > "transferred":3720, > "total-time":12345, > + "expected-downtime":12345, > "duplicate":123, > "normal":123, > "normal-bytes":123456 > @@ -2372,6 +2377,7 @@ Examples: > "remaining":1053304, > "transferred":3720, > "total-time":12345, > + "expected-downtime":12345, > "duplicate":10, > "normal":3333, > "normal-bytes":3412992 >
Consider making the save_live functions return the expected downtime in an int64_t* argument. The loop then can sum all the expected downtimes and store them in s->expected_downtime, removing the need for patch 6. Paolo