From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: dgilbert@redhat.com, lvivier@redhat.com, peterx@redhat.com
Subject: [Qemu-devel] [PULL 25/40] migration: new cmd MIG_CMD_POSTCOPY_RESUME
Date: Wed, 16 May 2018 01:40:02 +0200 [thread overview]
Message-ID: <20180515234017.2277-26-quintela@redhat.com> (raw)
In-Reply-To: <20180515234017.2277-1-quintela@redhat.com>
From: Peter Xu <peterx@redhat.com>
Introducing this new command to be sent when the source VM is ready to
resume the paused migration. What the destination does here is
basically release the fault thread to continue service page faults.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20180502104740.12123-14-peterx@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/savevm.c | 35 +++++++++++++++++++++++++++++++++++
migration/savevm.h | 1 +
migration/trace-events | 2 ++
3 files changed, 38 insertions(+)
diff --git a/migration/savevm.c b/migration/savevm.c
index 7176b350d5..a7e793eef7 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -80,6 +80,7 @@ enum qemu_vm_cmd {
MIG_CMD_POSTCOPY_RAM_DISCARD, /* A list of pages to discard that
were previously sent during
precopy but are dirty. */
+ MIG_CMD_POSTCOPY_RESUME, /* resume postcopy on dest */
MIG_CMD_PACKAGED, /* Send a wrapped stream within this stream */
MIG_CMD_RECV_BITMAP, /* Request for recved bitmap on dst */
MIG_CMD_MAX
@@ -98,6 +99,7 @@ static struct mig_cmd_args {
[MIG_CMD_POSTCOPY_RUN] = { .len = 0, .name = "POSTCOPY_RUN" },
[MIG_CMD_POSTCOPY_RAM_DISCARD] = {
.len = -1, .name = "POSTCOPY_RAM_DISCARD" },
+ [MIG_CMD_POSTCOPY_RESUME] = { .len = 0, .name = "POSTCOPY_RESUME" },
[MIG_CMD_PACKAGED] = { .len = 4, .name = "PACKAGED" },
[MIG_CMD_RECV_BITMAP] = { .len = -1, .name = "RECV_BITMAP" },
[MIG_CMD_MAX] = { .len = -1, .name = "MAX" },
@@ -958,6 +960,12 @@ void qemu_savevm_send_postcopy_run(QEMUFile *f)
qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RUN, 0, NULL);
}
+void qemu_savevm_send_postcopy_resume(QEMUFile *f)
+{
+ trace_savevm_send_postcopy_resume();
+ qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RESUME, 0, NULL);
+}
+
void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name)
{
size_t len;
@@ -1768,6 +1776,30 @@ static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)
return LOADVM_QUIT;
}
+static int loadvm_postcopy_handle_resume(MigrationIncomingState *mis)
+{
+ if (mis->state != MIGRATION_STATUS_POSTCOPY_RECOVER) {
+ error_report("%s: illegal resume received", __func__);
+ /* Don't fail the load, only for this. */
+ return 0;
+ }
+
+ /*
+ * This means source VM is ready to resume the postcopy migration.
+ * It's time to switch state and release the fault thread to
+ * continue service page faults.
+ */
+ migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_RECOVER,
+ MIGRATION_STATUS_POSTCOPY_ACTIVE);
+ qemu_sem_post(&mis->postcopy_pause_sem_fault);
+
+ trace_loadvm_postcopy_handle_resume();
+
+ /* TODO: Tell source that "we are ready" */
+
+ return 0;
+}
+
/**
* Immediately following this command is a blob of data containing an embedded
* chunk of migration stream; read it and load it.
@@ -1933,6 +1965,9 @@ static int loadvm_process_command(QEMUFile *f)
case MIG_CMD_POSTCOPY_RAM_DISCARD:
return loadvm_postcopy_ram_handle_discard(mis, len);
+ case MIG_CMD_POSTCOPY_RESUME:
+ return loadvm_postcopy_handle_resume(mis);
+
case MIG_CMD_RECV_BITMAP:
return loadvm_handle_recv_bitmap(mis, len);
}
diff --git a/migration/savevm.h b/migration/savevm.h
index b8cee00d41..b24ff073ad 100644
--- a/migration/savevm.h
+++ b/migration/savevm.h
@@ -47,6 +47,7 @@ int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);
void qemu_savevm_send_postcopy_advise(QEMUFile *f);
void qemu_savevm_send_postcopy_listen(QEMUFile *f);
void qemu_savevm_send_postcopy_run(QEMUFile *f);
+void qemu_savevm_send_postcopy_resume(QEMUFile *f);
void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name);
void qemu_savevm_send_postcopy_ram_discard(QEMUFile *f, const char *name,
diff --git a/migration/trace-events b/migration/trace-events
index 72e57089f3..29cc10f299 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -18,6 +18,7 @@ loadvm_postcopy_handle_listen(void) ""
loadvm_postcopy_handle_run(void) ""
loadvm_postcopy_handle_run_cpu_sync(void) ""
loadvm_postcopy_handle_run_vmstart(void) ""
+loadvm_postcopy_handle_resume(void) ""
loadvm_postcopy_ram_handle_discard(void) ""
loadvm_postcopy_ram_handle_discard_end(void) ""
loadvm_postcopy_ram_handle_discard_header(const char *ramid, uint16_t len) "%s: %ud"
@@ -35,6 +36,7 @@ savevm_send_open_return_path(void) ""
savevm_send_ping(uint32_t val) "0x%x"
savevm_send_postcopy_listen(void) ""
savevm_send_postcopy_run(void) ""
+savevm_send_postcopy_resume(void) ""
savevm_send_recv_bitmap(char *name) "%s"
savevm_state_setup(void) ""
savevm_state_header(void) ""
--
2.17.0
next prev parent reply other threads:[~2018-05-15 23:40 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-15 23:39 [Qemu-devel] [PULL 00/40] Migration PULL requset (take 2) Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 01/40] migration: fix saving normal page even if it's been compressed Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 02/40] tests: Add migration precopy test Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 03/40] tests: Migration ppc now inlines its program Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 04/40] migration: Set error state in case of error Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 05/40] migration: Introduce multifd_recv_new_channel() Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 06/40] migration: terminate_* can be called for other threads Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 07/40] migration: Be sure all recv channels are created Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 08/40] migration: Export functions to create send channels Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 09/40] migration: Create multifd channels Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 10/40] migration: Delay start of migration main routines Juan Quintela
2018-05-18 8:59 ` Kevin Wolf
2018-05-18 10:34 ` Dr. David Alan Gilbert
2018-05-18 12:14 ` Kevin Wolf
2018-05-22 16:20 ` Kevin Wolf
2018-05-23 6:29 ` Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 11/40] migration: Transmit initial package through the multifd channels Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 12/40] migration: Define MultifdRecvParams sooner Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 13/40] migration: let incoming side use thread context Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 14/40] migration: new postcopy-pause state Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 15/40] migration: implement "postcopy-pause" src logic Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 16/40] migration: allow dst vm pause on postcopy Juan Quintela
2018-06-04 13:49 ` Peter Maydell
2018-06-05 7:48 ` Peter Xu
2018-06-05 10:45 ` Peter Xu
2018-05-15 23:39 ` [Qemu-devel] [PULL 17/40] migration: allow src return path to pause Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 18/40] migration: allow fault thread " Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 19/40] qmp: hmp: add migrate "resume" option Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 20/40] migration: rebuild channel on source Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 21/40] migration: new state "postcopy-recover" Juan Quintela
2018-05-15 23:39 ` [Qemu-devel] [PULL 22/40] migration: wakeup dst ram-load-thread for recover Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 23/40] migration: new cmd MIG_CMD_RECV_BITMAP Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 24/40] migration: new message MIG_RP_MSG_RECV_BITMAP Juan Quintela
2018-05-15 23:40 ` Juan Quintela [this message]
2018-05-15 23:40 ` [Qemu-devel] [PULL 26/40] migration: new message MIG_RP_MSG_RESUME_ACK Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 27/40] migration: introduce SaveVMHandlers.resume_prepare Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 28/40] migration: synchronize dirty bitmap for resume Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 29/40] migration: setup ramstate " Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 30/40] migration: final handshake for the resume Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 31/40] migration: init dst in migration_object_init too Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 32/40] qmp/migration: new command migrate-recover Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 33/40] hmp/migration: add migrate_recover command Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 34/40] migration: introduce lock for to_dst_file Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 35/40] migration/qmp: add command migrate-pause Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 36/40] migration/hmp: add migrate_pause command Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 37/40] migration: update docs Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 38/40] migration: update index field when delete or qsort RDMALocalBlock Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 39/40] migration: Textual fixups for blocktime Juan Quintela
2018-05-15 23:40 ` [Qemu-devel] [PULL 40/40] Migration+TLS: Fix crash due to double cleanup Juan Quintela
2018-05-17 10:59 ` [Qemu-devel] [PULL 00/40] Migration PULL requset (take 2) Peter Maydell
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=20180515234017.2277-26-quintela@redhat.com \
--to=quintela@redhat.com \
--cc=dgilbert@redhat.com \
--cc=lvivier@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).