[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for recov
From: |
Peter Xu |
Subject: |
[Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for recover |
Date: |
Fri, 28 Jul 2017 16:06:29 +0800 |
On the destination side, we cannot wake up all the threads when we got
reconnected. The first thing to do is to wake up the main load thread,
so that we can continue to receive valid messages from source again and
reply when needed.
At this point, we switch the destination VM state from postcopy-paused
back to postcopy-recover.
Now we are finally ready to do the resume logic.
Signed-off-by: Peter Xu <address@hidden>
---
migration/migration.c | 34 +++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 3aabe11..e498fa4 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -389,10 +389,38 @@ static void process_incoming_migration_co(void *opaque)
void migration_fd_process_incoming(QEMUFile *f)
{
- Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, f);
+ MigrationIncomingState *mis = migration_incoming_get_current();
+ Coroutine *co;
+
+ mis->from_src_file = f;
+
+ if (mis->state == MIGRATION_STATUS_POSTCOPY_PAUSED) {
+ /* Resumed migration to postcopy state */
+
+ /* Postcopy has standalone thread to do vm load */
+ qemu_file_set_blocking(f, true);
+
+ /* Re-configure the return path */
+ mis->to_src_file = qemu_file_get_return_path(f);
- qemu_file_set_blocking(f, false);
- qemu_coroutine_enter(co);
+ /* Reset the migration status to postcopy-active */
+ migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_PAUSED,
+ MIGRATION_STATUS_POSTCOPY_RECOVER);
+
+ /*
+ * Here, we only wake up the main loading thread (while the
+ * fault thread will still be waiting), so that we can receive
+ * commands from source now, and answer it if needed. The
+ * fault thread will be waked up afterwards until we are sure
+ * that source is ready to reply to page requests.
+ */
+ qemu_sem_post(&mis->postcopy_pause_sem_dst);
+ } else {
+ /* New incoming migration */
+ qemu_file_set_blocking(f, false);
+ co = qemu_coroutine_create(process_incoming_migration_co, f);
+ qemu_coroutine_enter(co);
+ }
}
/*
--
2.7.4
- [Qemu-devel] [RFC 10/29] migration: new property "x-postcopy-fast", (continued)
- [Qemu-devel] [RFC 10/29] migration: new property "x-postcopy-fast", Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 11/29] migration: new postcopy-pause state, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 12/29] migration: allow dst vm pause on postcopy, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 13/29] migration: allow src return path to pause, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 14/29] migration: allow send_rq to fail, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 15/29] migration: allow fault thread to pause, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 16/29] qmp: hmp: add migrate "resume" option, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 17/29] migration: rebuild channel on source, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 19/29] migration: let dst listen on port always, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 18/29] migration: new state "postcopy-recover", Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for recover,
Peter Xu <=
- [Qemu-devel] [RFC 21/29] migration: new cmd MIG_CMD_RECV_BITMAP, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 22/29] migration: new message MIG_RP_MSG_RECV_BITMAP, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 23/29] migration: new cmd MIG_CMD_POSTCOPY_RESUME, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 24/29] migration: new message MIG_RP_MSG_RESUME_ACK, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 25/29] migration: introduce SaveVMHandlers.resume_prepare, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 26/29] migration: synchronize dirty bitmap for resume, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 27/29] migration: setup ramstate for resume, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 28/29] migration: final handshake for the resume, Peter Xu, 2017/07/28
- [Qemu-devel] [RFC 29/29] migration: reset migrate thread vars when resumed, Peter Xu, 2017/07/28
- Re: [Qemu-devel] [RFC 00/29] Migration: postcopy failure recovery, Peter Xu, 2017/07/28