We can know if we should go into COLO mode by the info that has been migrated from PVM.
Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com> Signed-off-by: Yang Hongyang <yan...@cn.fujitsu.com> Signed-off-by: Lai Jiangshan <la...@cn.fujitsu.com> Signed-off-by: Gonglei <arei.gong...@huawei.com> --- include/migration/migration-colo.h | 21 ++++++++++++++ migration/Makefile.objs | 1 + migration/colo-comm.c | 56 ++++++++++++++++++++++++++++++++++++++ vl.c | 5 +++- 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 include/migration/migration-colo.h create mode 100644 migration/colo-comm.c diff --git a/include/migration/migration-colo.h b/include/migration/migration-colo.h new file mode 100644 index 0000000..d52ebd0 --- /dev/null +++ b/include/migration/migration-colo.h @@ -0,0 +1,21 @@ +/* + * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO) + * (a.k.a. Fault Tolerance or Continuous Replication) + * + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO.,LTD. + * Copyright (c) 2015 FUJITSU LIMITED + * Copyright (c) 2015 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. + */ + +#ifndef QEMU_MIGRATION_COLO_H +#define QEMU_MIGRATION_COLO_H + +#include "qemu-common.h" +#include "migration/migration.h" + +void colo_info_mig_init(void); + +#endif diff --git a/migration/Makefile.objs b/migration/Makefile.objs index d929e96..97b72ad 100644 --- a/migration/Makefile.objs +++ b/migration/Makefile.objs @@ -1,4 +1,5 @@ common-obj-y += migration.o tcp.o +common-obj-y += colo-comm.o common-obj-y += vmstate.o common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o common-obj-y += xbzrle.o diff --git a/migration/colo-comm.c b/migration/colo-comm.c new file mode 100644 index 0000000..8caa948 --- /dev/null +++ b/migration/colo-comm.c @@ -0,0 +1,56 @@ +/* + * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO) + * (a.k.a. Fault Tolerance or Continuous Replication) + * + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO.,LTD. + * Copyright (c) 2015 FUJITSU LIMITED + * Copyright (c) 2015 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 <migration/migration-colo.h> + +/* #define DEBUG_COLO */ + +#ifdef DEBUG_COLO +#define DPRINTF(fmt, ...) \ + do { fprintf(stdout, "COLO: " fmt, ## __VA_ARGS__); } while (0) +#else +#define DPRINTF(fmt, ...) \ + do { } while (0) +#endif + +static bool colo_requested; + +/* save */ +static void colo_info_save(QEMUFile *f, void *opaque) +{ + qemu_put_byte(f, migrate_enable_colo()); +} + +/* restore */ +static int colo_info_load(QEMUFile *f, void *opaque, int version_id) +{ + int value = qemu_get_byte(f); + + if (value && !colo_requested) { + DPRINTF("COLO requested!\n"); + } + colo_requested = value; + + return 0; +} + +static SaveVMHandlers savevm_colo_info_handlers = { + .save_state = colo_info_save, + .load_state = colo_info_load, +}; + +void colo_info_mig_init(void) +{ + register_savevm_live(NULL, "colo", -1, 1, + &savevm_colo_info_handlers, NULL); +} diff --git a/vl.c b/vl.c index 8c8f142..40badc4 100644 --- a/vl.c +++ b/vl.c @@ -89,6 +89,7 @@ int main(int argc, char **argv) #include "sysemu/dma.h" #include "audio/audio.h" #include "migration/migration.h" +#include "migration/migration-colo.h" #include "sysemu/kvm.h" #include "qapi/qmp/qjson.h" #include "qemu/option.h" @@ -4147,7 +4148,9 @@ int main(int argc, char **argv, char **envp) blk_mig_init(); ram_mig_init(); - +#ifdef CONFIG_COLO + colo_info_mig_init(); +#endif /* If the currently selected machine wishes to override the units-per-bus * property of its default HBA interface type, do so now. */ if (machine_class->units_per_default_bus) { -- 1.7.12.4