We add helper function colo_supported() to indicate whether colo is supported or not, with which we use to control whether or not showing 'colo' string to users, they can use qmp command 'query-migrate-capabilities' or hmp command 'info migrate_capabilities' to learn if colo is supported.
Cc: Juan Quintela <quint...@redhat.com> Cc: Amit Shah <amit.s...@redhat.com> Cc: Eric Blake <ebl...@redhat.com> Cc: Markus Armbruster <arm...@redhat.com> Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com> Signed-off-by: Yang Hongyang <yan...@cn.fujitsu.com> Signed-off-by: Gonglei <arei.gong...@huawei.com> --- include/migration/colo.h | 20 ++++++++++++++++++++ include/migration/migration.h | 1 + migration/Makefile.objs | 1 + migration/colo.c | 18 ++++++++++++++++++ migration/migration.c | 17 +++++++++++++++++ qapi-schema.json | 6 +++++- qmp-commands.hx | 1 + stubs/Makefile.objs | 1 + stubs/migration-colo.c | 18 ++++++++++++++++++ 9 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 include/migration/colo.h create mode 100644 migration/colo.c create mode 100644 stubs/migration-colo.c diff --git a/include/migration/colo.h b/include/migration/colo.h new file mode 100644 index 0000000..c60a590 --- /dev/null +++ b/include/migration/colo.h @@ -0,0 +1,20 @@ +/* + * 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_COLO_H +#define QEMU_COLO_H + +#include "qemu-common.h" + +bool colo_supported(void); + +#endif diff --git a/include/migration/migration.h b/include/migration/migration.h index 8334621..05de3a1 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -170,6 +170,7 @@ int xbzrle_decode_buffer(uint8_t *src, int slen, uint8_t *dst, int dlen); int migrate_use_xbzrle(void); int64_t migrate_xbzrle_cache_size(void); +bool migrate_enable_colo(void); int64_t xbzrle_cache_resize(int64_t new_size); diff --git a/migration/Makefile.objs b/migration/Makefile.objs index d929e96..5a25d39 100644 --- a/migration/Makefile.objs +++ b/migration/Makefile.objs @@ -1,4 +1,5 @@ common-obj-y += migration.o tcp.o +common-obj-$(CONFIG_COLO) += colo.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.c b/migration/colo.c new file mode 100644 index 0000000..2c40d2e --- /dev/null +++ b/migration/colo.c @@ -0,0 +1,18 @@ +/* + * 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/colo.h" + +bool colo_supported(void) +{ + return true; +} diff --git a/migration/migration.c b/migration/migration.c index 662e77e..593cac0 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -29,6 +29,7 @@ #include "trace.h" #include "qapi/util.h" #include "qapi-event.h" +#include "migration/colo.h" #define MAX_THROTTLE (32 << 20) /* Migration speed throttling */ @@ -345,6 +346,9 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp) caps = NULL; /* silence compiler warning */ for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) { + if (i == MIGRATION_CAPABILITY_COLO && !colo_supported()) { + continue; + } if (head == NULL) { head = g_malloc0(sizeof(*caps)); caps = head; @@ -485,6 +489,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, } for (cap = params; cap; cap = cap->next) { + if (cap->value->capability == MIGRATION_CAPABILITY_COLO && + !colo_supported()) { + error_setg(errp, "COLO is not currently supported, please" + " configure with --enable-colo option in order to" + " support COLO feature"); + continue; + } s->enabled_capabilities[cap->value->capability] = cap->value->state; } } @@ -913,6 +924,12 @@ int64_t migrate_xbzrle_cache_size(void) return s->xbzrle_cache_size; } +bool migrate_enable_colo(void) +{ + MigrationState *s = migrate_get_current(); + return s->enabled_capabilities[MIGRATION_CAPABILITY_COLO]; +} + /* migration thread support */ static void *migration_thread(void *opaque) diff --git a/qapi-schema.json b/qapi-schema.json index 5f45571..b14d1f4 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -529,11 +529,15 @@ # @auto-converge: If enabled, QEMU will automatically throttle down the guest # to speed up convergence of RAM migration. (since 1.6) # +# @colo: If enabled, migration will never end, and the state of the VM on the +# primary side will be migrated continuously to the VM on secondary +# side. (since 2.5) +# # Since: 1.2 ## { 'enum': 'MigrationCapability', 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks', - 'compress', 'events'] } + 'compress', 'events', 'colo'] } ## # @MigrationCapabilityStatus diff --git a/qmp-commands.hx b/qmp-commands.hx index e6ed580..b06c09c 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -3489,6 +3489,7 @@ Query current migration capabilities - "rdma-pin-all" : RDMA Pin Page state (json-bool) - "auto-converge" : Auto Converge state (json-bool) - "zero-blocks" : Zero Blocks state (json-bool) + - "colo" : COarse-Grain LOck Stepping for Non-stop Service (json-bool) Arguments: diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 9937a12..5b124a9 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -38,3 +38,4 @@ stub-obj-$(CONFIG_WIN32) += fd-register.o stub-obj-y += cpus.o stub-obj-y += kvm.o stub-obj-y += qmp_pc_dimm_device_list.o +stub-obj-y += migration-colo.o diff --git a/stubs/migration-colo.c b/stubs/migration-colo.c new file mode 100644 index 0000000..3d817df --- /dev/null +++ b/stubs/migration-colo.c @@ -0,0 +1,18 @@ +/* + * 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/colo.h" + +bool colo_supported(void) +{ + return false; +} -- 1.8.3.1