From: zhanghailiang <zhang.zhanghailiang@huawei.com>
To: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>,
qemu-devel@nongnu.org
Cc: amit.shah@redhat.com, peter.huangpeng@huawei.com, quintela@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/5] Split out end of migration code from migration_thread
Date: Thu, 13 Aug 2015 20:14:17 +0800 [thread overview]
Message-ID: <55CC8A19.2070505@huawei.com> (raw)
In-Reply-To: <1439463094-5394-3-git-send-email-dgilbert@redhat.com>
On 2015/8/13 18:51, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> The code that gets run at the end of the migration process
> is getting large, and I'm about to add more for postcopy.
> Split it into a separate function.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
Reviewed-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> migration/migration.c | 75 ++++++++++++++++++++++++++++++++-------------------
> trace-events | 2 ++
> 2 files changed, 49 insertions(+), 28 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 662e77e..46bb410 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -913,6 +913,50 @@ int64_t migrate_xbzrle_cache_size(void)
> return s->xbzrle_cache_size;
> }
>
> +/**
> + * migration_completion: Used by migration_thread when there's not much left.
> + * The caller 'breaks' the loop when this returns.
> + *
> + * @s: Current migration state
> + * @*old_vm_running: Pointer to old_vm_running flag
> + * @*start_time: Pointer to time to update
> + */
> +static void migration_completion(MigrationState *s, bool *old_vm_running,
> + int64_t *start_time)
> +{
> + int ret;
> +
> + qemu_mutex_lock_iothread();
> + *start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
> + *old_vm_running = runstate_is_running();
> +
> + ret = global_state_store();
> + if (!ret) {
> + ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> + if (ret >= 0) {
> + qemu_file_set_rate_limit(s->file, INT64_MAX);
> + qemu_savevm_state_complete(s->file);
> + }
> + }
> + qemu_mutex_unlock_iothread();
> +
> + if (ret < 0) {
> + goto fail;
> + }
> +
> + if (qemu_file_get_error(s->file)) {
> + trace_migration_completion_file_err();
> + goto fail;
> + }
> +
> + migrate_set_state(s, MIGRATION_STATUS_ACTIVE, MIGRATION_STATUS_COMPLETED);
> + return;
> +
> +fail:
> + migrate_set_state(s, MIGRATION_STATUS_ACTIVE, MIGRATION_STATUS_FAILED);
> +}
> +
> /* migration thread support */
>
> static void *migration_thread(void *opaque)
> @@ -943,34 +987,9 @@ static void *migration_thread(void *opaque)
> if (pending_size && pending_size >= max_size) {
> qemu_savevm_state_iterate(s->file);
> } else {
> - int ret;
> -
> - qemu_mutex_lock_iothread();
> - start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> - qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
> - old_vm_running = runstate_is_running();
> -
> - ret = global_state_store();
> - if (!ret) {
> - ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> - if (ret >= 0) {
> - qemu_file_set_rate_limit(s->file, INT64_MAX);
> - qemu_savevm_state_complete(s->file);
> - }
> - }
> - qemu_mutex_unlock_iothread();
> -
> - if (ret < 0) {
> - migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
> - MIGRATION_STATUS_FAILED);
> - break;
> - }
> -
> - if (!qemu_file_get_error(s->file)) {
> - migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
> - MIGRATION_STATUS_COMPLETED);
> - break;
> - }
> + trace_migration_thread_low_pending(pending_size);
> + migration_completion(s, &old_vm_running, &start_time);
> + break;
> }
> }
>
> diff --git a/trace-events b/trace-events
> index 94bf3bb..1509e5b 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -1406,6 +1406,8 @@ migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth,
> migrate_state_too_big(void) ""
> migrate_global_state_post_load(const char *state) "loaded state: %s"
> migrate_global_state_pre_save(const char *state) "saved state: %s"
> +migration_completion_file_err(void) ""
> +migration_thread_low_pending(uint64_t pending) "%" PRIu64
>
> # migration/rdma.c
> qemu_rdma_accept_incoming_migration(void) ""
>
next prev parent reply other threads:[~2015-08-13 12:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-13 10:51 [Qemu-devel] [PATCH 0/5] Migration cleanups Dr. David Alan Gilbert (git)
2015-08-13 10:51 ` [Qemu-devel] [PATCH 1/5] migration/ram.c: Use RAMBlock rather than MemoryRegion Dr. David Alan Gilbert (git)
2015-08-13 12:46 ` Paolo Bonzini
2015-09-15 10:43 ` Amit Shah
2015-08-13 10:51 ` [Qemu-devel] [PATCH 2/5] Split out end of migration code from migration_thread Dr. David Alan Gilbert (git)
2015-08-13 12:14 ` zhanghailiang [this message]
2015-09-15 11:12 ` Amit Shah
2015-08-13 10:51 ` [Qemu-devel] [PATCH 3/5] Init page sizes in qtest Dr. David Alan Gilbert (git)
2015-08-13 10:51 ` [Qemu-devel] [PATCH 4/5] migration: size_t'ify some of qemu-file Dr. David Alan Gilbert (git)
2015-08-13 12:15 ` zhanghailiang
2015-09-15 11:39 ` Amit Shah
2015-08-13 10:51 ` [Qemu-devel] [PATCH 5/5] migration: qemu-file more size_t'ifying Dr. David Alan Gilbert (git)
2015-08-13 12:15 ` zhanghailiang
2015-09-15 11:42 ` Amit Shah
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=55CC8A19.2070505@huawei.com \
--to=zhang.zhanghailiang@huawei.com \
--cc=amit.shah@redhat.com \
--cc=dgilbert@redhat.com \
--cc=peter.huangpeng@huawei.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.