Message ID | 1348217255-22441-8-git-send-email-quintela@redhat.com |
---|---|
State | New |
Headers | show |
Il 21/09/2012 10:47, Juan Quintela ha scritto: > Signed-off-by: Juan Quintela <quintela@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
Paolo Bonzini <pbonzini@redhat.com> wrote: > Il 21/09/2012 10:47, Juan Quintela ha scritto: >> Signed-off-by: Juan Quintela <quintela@redhat.com> > > 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. If you look at the migration thread patches, I change the functions to return the "pending amount". And the migration thread does the bandwidth calculations. It is just impossible to do the right bandwidth calculation locally. Later, Juan.
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
Signed-off-by: Juan Quintela <quintela@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(+)