[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH COLO-Frame (Base) v23 02/18] COLO: migrate COLO rela
From: |
zhanghailiang |
Subject: |
[Qemu-devel] [PATCH COLO-Frame (Base) v23 02/18] COLO: migrate COLO related info to secondary node |
Date: |
Thu, 27 Oct 2016 14:42:53 +0800 |
We can determine whether or not VM in destination should go into COLO mode
by referring to the info that was migrated.
We skip this section if COLO is not enabled (i.e.
migrate_set_capability colo off), so that, It doesn't break compatibility
with migration no matter whether users configure the --enable-colo/disable-colo
on the source/destination side or not;
Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Li Zhijian <address@hidden>
Signed-off-by: Gonglei <address@hidden>
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
Reviewed-by: Amit Shah <address@hidden>
---
v22:
- Add Reviewed-by tag
v19:
- fix title and comment
v16:
- Fix compile broken due to missing osdep.h
v14:
- Adjust the place of calling colo_info_init()
v11:
- Add Reviewed-by tag
v10:
- Use VMSTATE_BOOL instead of VMSTATE_UNIT32 for 'colo_requested' (Dave's
suggestion)
---
include/migration/colo.h | 2 ++
migration/Makefile.objs | 1 +
migration/colo-comm.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
vl.c | 3 +++
4 files changed, 57 insertions(+)
create mode 100644 migration/colo-comm.c
diff --git a/include/migration/colo.h b/include/migration/colo.h
index 59a632a..1c899a0 100644
--- a/include/migration/colo.h
+++ b/include/migration/colo.h
@@ -14,7 +14,9 @@
#define QEMU_COLO_H
#include "qemu-common.h"
+#include "migration/migration.h"
bool colo_supported(void);
+void colo_info_init(void);
#endif
diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index cff96f0..4bbe9ab 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -1,6 +1,7 @@
common-obj-y += migration.o socket.o fd.o exec.o
common-obj-y += tls.o
common-obj-$(CONFIG_COLO) += colo.o
+common-obj-y += colo-comm.o
common-obj-y += vmstate.o
common-obj-y += qemu-file.o
common-obj-y += qemu-file-channel.o
diff --git a/migration/colo-comm.c b/migration/colo-comm.c
new file mode 100644
index 0000000..a2d5185
--- /dev/null
+++ b/migration/colo-comm.c
@@ -0,0 +1,51 @@
+/*
+ * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
+ * (a.k.a. Fault Tolerance or Continuous Replication)
+ *
+ * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
+ * Copyright (c) 2016 FUJITSU LIMITED
+ * Copyright (c) 2016 Intel Corporation
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later. See the COPYING file in the top-level directory.
+ *
+ */
+
+#include "qemu/osdep.h"
+#include <migration/colo.h>
+#include "trace.h"
+
+typedef struct {
+ bool colo_requested;
+} COLOInfo;
+
+static COLOInfo colo_info;
+
+static void colo_info_pre_save(void *opaque)
+{
+ COLOInfo *s = opaque;
+
+ s->colo_requested = migrate_colo_enabled();
+}
+
+static bool colo_info_need(void *opaque)
+{
+ return migrate_colo_enabled();
+}
+
+static const VMStateDescription colo_state = {
+ .name = "COLOState",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .pre_save = colo_info_pre_save,
+ .needed = colo_info_need,
+ .fields = (VMStateField[]) {
+ VMSTATE_BOOL(colo_requested, COLOInfo),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
+void colo_info_init(void)
+{
+ vmstate_register(NULL, 0, &colo_state, &colo_info);
+}
diff --git a/vl.c b/vl.c
index 4ec8120..fcb3d69 100644
--- a/vl.c
+++ b/vl.c
@@ -90,6 +90,7 @@ int main(int argc, char **argv)
#include "audio/audio.h"
#include "migration/migration.h"
#include "sysemu/cpus.h"
+#include "migration/colo.h"
#include "sysemu/kvm.h"
#include "qapi/qmp/qjson.h"
#include "qemu/option.h"
@@ -4425,6 +4426,8 @@ int main(int argc, char **argv, char **envp)
#endif
}
+ colo_info_init();
+
if (net_init_clients() < 0) {
exit(1);
}
--
1.8.3.1
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 00/18] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT), zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 01/18] migration: Introduce capability 'x-colo' to migration, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 11/18] COLO: Synchronize PVM's state to SVM periodically, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 10/18] COLO: Add checkpoint-delay parameter for migrate-set-parameters, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 15/18] COLO: Implement failover work for secondary VM, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 03/18] migration: Enter into COLO mode after migration if COLO is enabled, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 07/18] COLO: Add a new RunState RUN_STATE_COLO, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 02/18] COLO: migrate COLO related info to secondary node,
zhanghailiang <=
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 17/18] configure: Support enable/disable COLO feature, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 06/18] COLO: Introduce checkpointing protocol, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 18/18] MAINTAINERS: Add maintainer for COLO framework related files, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 09/18] COLO: Load VMState into QIOChannelBuffer before restore it, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 13/18] COLO: Introduce state to record failover process, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 05/18] COLO: Establish a new communicating path for COLO, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 04/18] migration: Switch to COLO process after finishing loadvm, zhanghailiang, 2016/10/27
- [Qemu-devel] [PATCH COLO-Frame (Base) v23 08/18] COLO: Send PVM state to secondary side when do checkpoint, zhanghailiang, 2016/10/27