From: Paolo Bonzini <pbonzini@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 07/41] migration: print expected downtime in info migrate
Date: Fri, 21 Sep 2012 14:22:51 +0200 [thread overview]
Message-ID: <505C5C1B.8000608@redhat.com> (raw)
In-Reply-To: <1348217255-22441-8-git-send-email-quintela@redhat.com>
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
next prev parent reply other threads:[~2012-09-21 12:23 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-21 8:46 [Qemu-devel] [PATCH 00/41] Migration cleanups, refactorings, stats, and more Juan Quintela
2012-09-21 8:46 ` [Qemu-devel] [PATCH 01/41] buffered_file: g_realloc() can't fail Juan Quintela
2012-09-21 12:11 ` Paolo Bonzini
2012-09-25 8:08 ` Orit Wasserman
2012-09-21 8:46 ` [Qemu-devel] [PATCH 02/41] fix migration sync Juan Quintela
2012-09-21 12:17 ` Paolo Bonzini
2012-09-25 8:45 ` Paolo Bonzini
2012-10-02 10:43 ` Juan Quintela
2012-10-02 10:53 ` Paolo Bonzini
2012-09-21 8:46 ` [Qemu-devel] [PATCH 03/41] migration: store end_time in a local variable Juan Quintela
2012-09-21 12:17 ` Paolo Bonzini
2012-09-25 8:10 ` Orit Wasserman
2012-09-21 8:46 ` [Qemu-devel] [PATCH 04/41] migration: print total downtime for final phase of migration Juan Quintela
2012-09-21 12:19 ` Paolo Bonzini
2012-09-25 8:18 ` Orit Wasserman
2012-09-21 8:46 ` [Qemu-devel] [PATCH 05/41] migration: rename expected_time to expected_downtime Juan Quintela
2012-09-21 12:19 ` Paolo Bonzini
2012-09-25 8:21 ` Orit Wasserman
2012-09-21 8:47 ` [Qemu-devel] [PATCH 06/41] migration: export migrate_get_current() Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 07/41] migration: print expected downtime in info migrate Juan Quintela
2012-09-21 12:22 ` Paolo Bonzini [this message]
2012-10-02 10:47 ` Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 08/41] savevm: Factorize ram globals reset in its own function Juan Quintela
2012-09-25 8:37 ` Orit Wasserman
2012-09-21 8:47 ` [Qemu-devel] [PATCH 09/41] ram: introduce migration_bitmap_set_dirty() Juan Quintela
2012-09-25 8:38 ` Orit Wasserman
2012-09-21 8:47 ` [Qemu-devel] [PATCH 10/41] ram: Introduce migration_bitmap_test_and_reset_dirty() Juan Quintela
2012-09-25 9:35 ` Orit Wasserman
2012-09-21 8:47 ` [Qemu-devel] [PATCH 11/41] ram: Export last_ram_offset() Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 12/41] ram: introduce migration_bitmap_sync() Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 13/41] ram: create trace event for migration sync bitmap Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 14/41] Separate migration bitmap Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 15/41] migration: Add dirty_pages_rate to query migrate output Juan Quintela
2012-09-21 12:33 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 16/41] BufferedFile: append, then flush Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 17/41] buffered_file: rename opaque to migration_state Juan Quintela
2012-09-25 11:41 ` Orit Wasserman
2012-10-02 10:54 ` Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 18/41] buffered_file: opaque is MigrationState Juan Quintela
2012-09-25 11:46 ` Orit Wasserman
2012-09-28 7:33 ` Juan Quintela
2012-09-28 7:48 ` Orit Wasserman
2012-09-21 8:47 ` [Qemu-devel] [PATCH 19/41] buffered_file: unfold migrate_fd_put_buffer Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 20/41] buffered_file: unfold migrate_fd_put_ready Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 21/41] buffered_file: unfold migrate_fd_put_buffer Juan Quintela
2012-09-21 12:34 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 22/41] " Juan Quintela
2012-09-21 12:35 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 23/41] buffered_file: We can access directly to bandwidth_limit Juan Quintela
2012-09-21 12:35 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 24/41] buffered_file: callers of buffered_flush() already check for errors Juan Quintela
2012-09-21 12:39 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 25/41] buffered_file: make buffered_flush return the error code Juan Quintela
2012-09-21 12:43 ` Paolo Bonzini
2012-10-02 11:06 ` Juan Quintela
2012-10-02 11:16 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 26/41] migration: make migrate_fd_wait_for_unfreeze() return errors Juan Quintela
2012-09-21 12:44 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 27/41] savevm: unexport qemu_fflush Juan Quintela
2012-09-21 12:45 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 28/41] virtio-net: use qemu_get_buffer() in a temp buffer Juan Quintela
2012-09-21 12:45 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 29/41] savevm: Remove qemu_fseek() Juan Quintela
2012-09-21 12:46 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 30/41] savevm: make qemu_fflush() return an error code Juan Quintela
2012-09-21 12:46 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 31/41] savevm: unfold qemu_fclose_internal() Juan Quintela
2012-09-21 12:48 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 32/41] savevm: unexport qemu_ftell() Juan Quintela
2012-09-21 12:48 ` Paolo Bonzini
2012-09-21 15:42 ` Juan Quintela
2012-09-21 8:47 ` [Qemu-devel] [PATCH 33/41] savevm: make qemu_fill_buffer() be consistent Juan Quintela
2012-09-21 12:48 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 34/41] savevm: Only qemu_fflush() can generate errors Juan Quintela
2012-09-21 12:49 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 35/41] buffered_file: buffered_put_buffer() don't need to set last_error Juan Quintela
2012-09-21 12:50 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 36/41] block-migration: make flush_blks() return errors Juan Quintela
2012-09-21 12:50 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 37/41] block-migration: Switch meaning of return value Juan Quintela
2012-09-21 12:51 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 38/41] block-migration: handle errors with the return codes correctly Juan Quintela
2012-09-21 12:53 ` Paolo Bonzini
2012-09-24 18:24 ` Juan Quintela
2012-09-25 6:36 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 39/41] savevm: un-export qemu_file_set_error() Juan Quintela
2012-09-21 12:53 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 40/41] savevm: make qemu_file_put_notify() return errors Juan Quintela
2012-09-21 12:53 ` Paolo Bonzini
2012-09-21 8:47 ` [Qemu-devel] [PATCH 41/41] cpus: create qemu_cpu_is_vcpu() Juan Quintela
2012-09-21 12:54 ` Paolo Bonzini
2012-09-21 14:48 ` Andreas Färber
2012-09-21 15:36 ` Paolo Bonzini
2012-09-24 18:11 ` Juan Quintela
-- strict thread matches above, loose matches on Subject: below --
2012-10-02 11:32 [Qemu-devel] [PATCH v2 00/41] Migration cleanups, refactorings, stats, and more Juan Quintela
2012-10-02 11:33 ` [Qemu-devel] [PATCH 07/41] migration: print expected downtime in info migrate Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=505C5C1B.8000608@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.