[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 14/23] COLO ctl: implement colo restore
From: |
Yang Hongyang |
Subject: |
[Qemu-devel] [RFC PATCH v2 14/23] COLO ctl: implement colo restore |
Date: |
Tue, 23 Sep 2014 17:23:46 +0800 |
implement colo restore
Signed-off-by: Yang Hongyang <address@hidden>
---
migration-colo.c | 46 ++++++++++++++++++++++++++++++++++++++++------
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/migration-colo.c b/migration-colo.c
index d99342a..91634d2 100644
--- a/migration-colo.c
+++ b/migration-colo.c
@@ -426,8 +426,11 @@ void colo_process_incoming_checkpoints(QEMUFile *f)
{
int fd = qemu_get_fd(f);
int dev_hotplug = qdev_hotplug;
- QEMUFile *ctl = NULL;
+ QEMUFile *ctl = NULL, *fb = NULL;
int ret;
+ uint64_t total_size;
+ uint8_t *buf;
+ QEMUSizedBuffer *colo_buffer;
if (!restore_use_colo()) {
return;
@@ -449,7 +452,8 @@ void colo_process_incoming_checkpoints(QEMUFile *f)
goto out;
}
- /* TODO: in COLO mode, slave is runing, so start the vm */
+ /* in COLO mode, slave is runing, so start the vm */
+ vm_start();
while (true) {
if (slave_wait_new_checkpoint(f)) {
@@ -458,7 +462,8 @@ void colo_process_incoming_checkpoints(QEMUFile *f)
/* start colo checkpoint */
- /* TODO: suspend guest */
+ /* suspend guest */
+ vm_stop_force_state(RUN_STATE_COLO);
ret = colo_ctl_put(ctl, COLO_CHECKPOINT_SUSPENDED);
if (ret) {
@@ -470,26 +475,55 @@ void colo_process_incoming_checkpoints(QEMUFile *f)
goto out;
}
- /* TODO: read migration data into colo buffer */
+ /* read migration data into colo buffer */
+
+ /* read the vmstate total size first */
+ ret = colo_ctl_get_value(f, &total_size);
+ if (ret) {
+ goto out;
+ }
+ buf = g_malloc(total_size);
+ qemu_get_buffer(f, buf, total_size);
+ colo_buffer = qsb_create(buf, total_size);
+ g_free(buf);
ret = colo_ctl_put(ctl, COLO_CHECKPOINT_RECEIVED);
if (ret) {
goto out;
}
- /* TODO: load vm state */
+ /* open colo buffer for read */
+ fb = qemu_bufopen("r", colo_buffer);
+ if (!fb) {
+ error_report("can't open colo buffer for read");
+ goto out;
+ }
+
+ /* load vm state */
+ if (qemu_loadvm_state(fb) < 0) {
+ error_report("COLO: loadvm failed\n");
+ goto out;
+ }
ret = colo_ctl_put(ctl, COLO_CHECKPOINT_LOADED);
if (ret) {
goto out;
}
- /* TODO: resume guest */
+ /* resume guest */
+ vm_start();
+
+ qemu_fclose(fb);
+ fb = NULL;
}
out:
colo = NULL;
+ if (fb) {
+ qemu_fclose(fb);
+ }
+
if (ctl) {
qemu_fclose(ctl);
}
--
1.9.1
- [Qemu-devel] [RFC PATCH v2 06/23] COLO save: integrate COLO checkpointed save into qemu migration, (continued)
- [Qemu-devel] [RFC PATCH v2 06/23] COLO save: integrate COLO checkpointed save into qemu migration, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 09/23] COLO ctl: implement API's that communicate with colo agent, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 07/23] COLO restore: integrate COLO checkpointed restore into qemu restore, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 08/23] COLO: disable qdev hotplug, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 10/23] COLO ctl: introduce is_slave() and is_master(), Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 03/23] COLO: introduce an api colo_supported() to indicate COLO support, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 04/23] COLO migration: add a migration capability 'colo', Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 11/23] COLO ctl: implement colo checkpoint protocol, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 12/23] COLO ctl: add a RunState RUN_STATE_COLO, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 13/23] COLO ctl: implement colo save, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 14/23] COLO ctl: implement colo restore,
Yang Hongyang <=
- [Qemu-devel] [RFC PATCH v2 16/23] COLO ram cache: implement colo ram cache on slave, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 17/23] HACK: trigger checkpoint every 500ms, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 15/23] COLO save: reuse migration bitmap under colo checkpoint, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 18/23] COLO nic: add command line switch, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 19/23] COLO nic: init/remove colo nic devices when add/cleanup tap devices, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 20/23] COLO nic: implement colo nic device interface support_colo(), Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 21/23] COLO nic: implement colo nic device interface configure(), Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 22/23] COLO nic: export colo nic APIs, Yang Hongyang, 2014/09/23
- [Qemu-devel] [RFC PATCH v2 23/23] COLO nic: setup/teardown colo nic devices, Yang Hongyang, 2014/09/23