On 05/22/2012 09:32 PM, Juan Quintela wrote: > We add time spent for migration to the output of "info migrate" > command. 'total_time' means time since the start fo migration if > migration is 'active', and total time of migration if migration is > completed. As we are also interested in transferred ram when > migration completes, adding all ram statistics > > Signed-off-by: Juan Quintela <quint...@redhat.com> > --- > hmp.c | 2 ++ > migration.c | 11 +++++++++++ > migration.h | 1 + > qapi-schema.json | 12 +++++++++--- > 4 files changed, 23 insertions(+), 3 deletions(-) > > diff --git a/hmp.c b/hmp.c > index bb0952e..25a128b 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -142,6 +142,8 @@ void hmp_info_migrate(Monitor *mon) > info->ram->remaining >> 10); > monitor_printf(mon, "total ram: %" PRIu64 " kbytes\n", > info->ram->total >> 10); > + monitor_printf(mon, "total time: %" PRIu64 " milliseconds\n", > + info->ram->total_time); > } > > if (info->has_disk) { > diff --git a/migration.c b/migration.c > index 3f485d3..599bb6c 100644 > --- a/migration.c > +++ b/migration.c > @@ -131,6 +131,8 @@ MigrationInfo *qmp_query_migrate(Error **errp) > info->ram->transferred = ram_bytes_transferred(); > info->ram->remaining = ram_bytes_remaining(); > info->ram->total = ram_bytes_total(); > + info->ram->total_time = qemu_get_clock_ms(rt_clock) > + - s->total_time; > > if (blk_mig_active()) { > info->has_disk = true; > @@ -143,6 +145,13 @@ MigrationInfo *qmp_query_migrate(Error **errp) > case MIG_STATE_COMPLETED: > info->has_status = true; > info->status = g_strdup("completed"); > + > + info->has_ram = true; > + info->ram = g_malloc0(sizeof(*info->ram)); > + info->ram->transferred = ram_bytes_transferred(); > + info->ram->remaining = 0; > + info->ram->total = ram_bytes_total(); > + info->ram->total_time = s->total_time; > break; > case MIG_STATE_ERROR: > info->has_status = true; > @@ -260,6 +269,7 @@ static void migrate_fd_put_ready(void *opaque) > } else { > migrate_fd_completed(s); > } > + s->total_time = qemu_get_clock_ms(rt_clock) - s->total_time; > if (s->state != MIG_STATE_COMPLETED) { > if (old_vm_running) { > vm_start(); > @@ -373,6 +383,7 @@ static MigrationState *migrate_init(int blk, int inc) > > s->bandwidth_limit = bandwidth_limit; > s->state = MIG_STATE_SETUP; > + s->total_time = qemu_get_clock_ms(rt_clock); > > return s; > } > diff --git a/migration.h b/migration.h > index 2e9ca2e..165b27b 100644 > --- a/migration.h > +++ b/migration.h > @@ -33,6 +33,7 @@ struct MigrationState > void *opaque; > int blk; > int shared; > + int64_t total_time; > }; > > void process_incoming_migration(QEMUFile *f); > diff --git a/qapi-schema.json b/qapi-schema.json > index 2ca7195..c5a2e99 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -238,10 +238,15 @@ > # > # @total: total amount of bytes involved in the migration process > # > +# @total_time: tota0l amount of ms since migration started. If > +# migration has ended, it returns the total migration > +# time. (since 1.2) > +# > # Since: 0.14.0. > ## > { 'type': 'MigrationStats', > - 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' } } > + 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' , > + 'total_time': 'int' } } > > ## > # @MigrationInfo > @@ -253,8 +258,9 @@ > # 'cancelled'. If this field is not returned, no migration process > # has been initiated > # > -# @ram: #optional @MigrationStats containing detailed migration status, > -# only returned if status is 'active' > +# @ram: #optional @MigrationStats containing detailed migration > +# status, only returned if status is 'active' or > +# 'completed'. 'comppleted' (since 1.2) > # > # @disk: #optional @MigrationStats containing detailed disk migration > # status, only returned if status is 'active' and it is a block
Reviewed-by: Orit Wasserman <owass...@redhat.com>