qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 07/41] migration: print expected downtime in inf


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 07/41] migration: print expected downtime in info migrate
Date: Fri, 21 Sep 2012 14:22:51 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

Il 21/09/2012 10:47, Juan Quintela ha scritto:
> Signed-off-by: Juan Quintela <address@hidden>
> ---
>  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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]