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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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