migration: Introduce capability 'x-colo' to migration
We add helper function colo_supported() to indicate whether colo is supported or not, with which we use to control whether or not showing 'x-colo' string to users, they can use qmp command 'query-migrate-capabilities' or hmp command 'info migrate_capabilities' to learn if colo is supported. The default value for COLO (COarse-Grain LOck Stepping) is disabled. Cc: Juan Quintela <quintela@redhat.com> Cc: Amit Shah <amit.shah@redhat.com> Cc: Eric Blake <eblake@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Amit Shah <amit@amitshah.net>
This commit is contained in:
parent
5b2ecabaea
commit
35a6ed4f71
@ -2861,6 +2861,7 @@ Enable/Disable migration capabilities
|
||||
- "compress": use multiple compression threads to accelerate live migration
|
||||
- "events": generate events for each migration state change
|
||||
- "postcopy-ram": postcopy mode for live migration
|
||||
- "x-colo": COarse-Grain LOck Stepping (COLO) for Non-stop Service
|
||||
|
||||
Arguments:
|
||||
|
||||
@ -2882,6 +2883,7 @@ Query current migration capabilities
|
||||
- "compress": Multiple compression threads state (json-bool)
|
||||
- "events": Migration state change event state (json-bool)
|
||||
- "postcopy-ram": postcopy ram state (json-bool)
|
||||
- "x-colo": COarse-Grain LOck Stepping for Non-stop Service (json-bool)
|
||||
|
||||
Arguments:
|
||||
|
||||
@ -2895,7 +2897,8 @@ Example:
|
||||
{"state": false, "capability": "zero-blocks"},
|
||||
{"state": false, "capability": "compress"},
|
||||
{"state": true, "capability": "events"},
|
||||
{"state": false, "capability": "postcopy-ram"}
|
||||
{"state": false, "capability": "postcopy-ram"},
|
||||
{"state": false, "capability": "x-colo"}
|
||||
]}
|
||||
|
||||
migrate-set-parameters
|
||||
|
20
include/migration/colo.h
Normal file
20
include/migration/colo.h
Normal file
@ -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) 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.
|
||||
*/
|
||||
|
||||
#ifndef QEMU_COLO_H
|
||||
#define QEMU_COLO_H
|
||||
|
||||
#include "qemu-common.h"
|
||||
|
||||
bool colo_supported(void);
|
||||
|
||||
#endif
|
@ -298,6 +298,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_colo_enabled(void);
|
||||
|
||||
int64_t xbzrle_cache_resize(int64_t new_size);
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
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 += vmstate.o
|
||||
common-obj-y += qemu-file.o
|
||||
common-obj-y += qemu-file-channel.o
|
||||
|
19
migration/colo.c
Normal file
19
migration/colo.c
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* 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"
|
||||
|
||||
bool colo_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
@ -36,6 +36,7 @@
|
||||
#include "exec/address-spaces.h"
|
||||
#include "io/channel-buffer.h"
|
||||
#include "io/channel-tls.h"
|
||||
#include "migration/colo.h"
|
||||
|
||||
#define MAX_THROTTLE (32 << 20) /* Migration transfer speed throttling */
|
||||
|
||||
@ -531,6 +532,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_X_COLO && !colo_supported()) {
|
||||
continue;
|
||||
}
|
||||
if (head == NULL) {
|
||||
head = g_malloc0(sizeof(*caps));
|
||||
caps = head;
|
||||
@ -733,6 +737,14 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
|
||||
}
|
||||
|
||||
for (cap = params; cap; cap = cap->next) {
|
||||
if (cap->value->capability == MIGRATION_CAPABILITY_X_COLO) {
|
||||
if (!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;
|
||||
}
|
||||
|
||||
@ -1713,6 +1725,12 @@ fail:
|
||||
MIGRATION_STATUS_FAILED);
|
||||
}
|
||||
|
||||
bool migrate_colo_enabled(void)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
return s->enabled_capabilities[MIGRATION_CAPABILITY_X_COLO];
|
||||
}
|
||||
|
||||
/*
|
||||
* Master migration thread on the source VM.
|
||||
* It drives the migration and pumps the data down the outgoing channel.
|
||||
|
@ -574,11 +574,16 @@
|
||||
# been migrated, pulling the remaining pages along as needed. NOTE: If
|
||||
# the migration fails during postcopy the VM will fail. (since 2.6)
|
||||
#
|
||||
# @x-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, this process is called COarse-Grain LOck Stepping (COLO) for
|
||||
# Non-stop Service. (since 2.8)
|
||||
#
|
||||
# Since: 1.2
|
||||
##
|
||||
{ 'enum': 'MigrationCapability',
|
||||
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
|
||||
'compress', 'events', 'postcopy-ram'] }
|
||||
'compress', 'events', 'postcopy-ram', 'x-colo'] }
|
||||
|
||||
##
|
||||
# @MigrationCapabilityStatus
|
||||
|
@ -48,3 +48,4 @@ stub-obj-y += iohandler.o
|
||||
stub-obj-y += smbios_type_38.o
|
||||
stub-obj-y += ipmi.o
|
||||
stub-obj-y += pc_madt_cpu_entry.o
|
||||
stub-obj-y += migration-colo.o
|
||||
|
19
stubs/migration-colo.c
Normal file
19
stubs/migration-colo.c
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* 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"
|
||||
|
||||
bool colo_supported(void)
|
||||
{
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue
Block a user