mirror of https://github.com/xemu-project/xemu.git
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
|
- "compress": use multiple compression threads to accelerate live migration
|
||||||
- "events": generate events for each migration state change
|
- "events": generate events for each migration state change
|
||||||
- "postcopy-ram": postcopy mode for live migration
|
- "postcopy-ram": postcopy mode for live migration
|
||||||
|
- "x-colo": COarse-Grain LOck Stepping (COLO) for Non-stop Service
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
|
@ -2882,6 +2883,7 @@ Query current migration capabilities
|
||||||
- "compress": Multiple compression threads state (json-bool)
|
- "compress": Multiple compression threads state (json-bool)
|
||||||
- "events": Migration state change event state (json-bool)
|
- "events": Migration state change event state (json-bool)
|
||||||
- "postcopy-ram": postcopy ram state (json-bool)
|
- "postcopy-ram": postcopy ram state (json-bool)
|
||||||
|
- "x-colo": COarse-Grain LOck Stepping for Non-stop Service (json-bool)
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
|
@ -2895,7 +2897,8 @@ Example:
|
||||||
{"state": false, "capability": "zero-blocks"},
|
{"state": false, "capability": "zero-blocks"},
|
||||||
{"state": false, "capability": "compress"},
|
{"state": false, "capability": "compress"},
|
||||||
{"state": true, "capability": "events"},
|
{"state": true, "capability": "events"},
|
||||||
{"state": false, "capability": "postcopy-ram"}
|
{"state": false, "capability": "postcopy-ram"},
|
||||||
|
{"state": false, "capability": "x-colo"}
|
||||||
]}
|
]}
|
||||||
|
|
||||||
migrate-set-parameters
|
migrate-set-parameters
|
||||||
|
|
|
@ -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);
|
int migrate_use_xbzrle(void);
|
||||||
int64_t migrate_xbzrle_cache_size(void);
|
int64_t migrate_xbzrle_cache_size(void);
|
||||||
|
bool migrate_colo_enabled(void);
|
||||||
|
|
||||||
int64_t xbzrle_cache_resize(int64_t new_size);
|
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 += migration.o socket.o fd.o exec.o
|
||||||
common-obj-y += tls.o
|
common-obj-y += tls.o
|
||||||
|
common-obj-$(CONFIG_COLO) += colo.o
|
||||||
common-obj-y += vmstate.o
|
common-obj-y += vmstate.o
|
||||||
common-obj-y += qemu-file.o
|
common-obj-y += qemu-file.o
|
||||||
common-obj-y += qemu-file-channel.o
|
common-obj-y += qemu-file-channel.o
|
||||||
|
|
|
@ -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 "exec/address-spaces.h"
|
||||||
#include "io/channel-buffer.h"
|
#include "io/channel-buffer.h"
|
||||||
#include "io/channel-tls.h"
|
#include "io/channel-tls.h"
|
||||||
|
#include "migration/colo.h"
|
||||||
|
|
||||||
#define MAX_THROTTLE (32 << 20) /* Migration transfer speed throttling */
|
#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 */
|
caps = NULL; /* silence compiler warning */
|
||||||
for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
|
for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
|
||||||
|
if (i == MIGRATION_CAPABILITY_X_COLO && !colo_supported()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (head == NULL) {
|
if (head == NULL) {
|
||||||
head = g_malloc0(sizeof(*caps));
|
head = g_malloc0(sizeof(*caps));
|
||||||
caps = head;
|
caps = head;
|
||||||
|
@ -733,6 +737,14 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (cap = params; cap; cap = cap->next) {
|
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;
|
s->enabled_capabilities[cap->value->capability] = cap->value->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,6 +1725,12 @@ fail:
|
||||||
MIGRATION_STATUS_FAILED);
|
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.
|
* Master migration thread on the source VM.
|
||||||
* It drives the migration and pumps the data down the outgoing channel.
|
* 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
|
# been migrated, pulling the remaining pages along as needed. NOTE: If
|
||||||
# the migration fails during postcopy the VM will fail. (since 2.6)
|
# 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
|
# Since: 1.2
|
||||||
##
|
##
|
||||||
{ 'enum': 'MigrationCapability',
|
{ 'enum': 'MigrationCapability',
|
||||||
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
|
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
|
||||||
'compress', 'events', 'postcopy-ram'] }
|
'compress', 'events', 'postcopy-ram', 'x-colo'] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @MigrationCapabilityStatus
|
# @MigrationCapabilityStatus
|
||||||
|
|
|
@ -48,3 +48,4 @@ stub-obj-y += iohandler.o
|
||||||
stub-obj-y += smbios_type_38.o
|
stub-obj-y += smbios_type_38.o
|
||||||
stub-obj-y += ipmi.o
|
stub-obj-y += ipmi.o
|
||||||
stub-obj-y += pc_madt_cpu_entry.o
|
stub-obj-y += pc_madt_cpu_entry.o
|
||||||
|
stub-obj-y += migration-colo.o
|
||||||
|
|
|
@ -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