multifd: Add multifd-compression parameter
This will store the compression method to use. We start with none. Signed-off-by: Juan Quintela <quintela@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> --- Rename multifd-method to multifd-compression
This commit is contained in:
parent
8b6b68e05b
commit
96eef04238
@ -8,6 +8,7 @@
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qemu/ctype.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/qapi-types-migration.h"
|
||||
#include "hw/block/block.h"
|
||||
#include "net/hub.h"
|
||||
#include "qapi/visitor.h"
|
||||
@ -639,6 +640,18 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
|
||||
.set_default_value = set_default_value_enum,
|
||||
};
|
||||
|
||||
/* --- MultiFDCompression --- */
|
||||
|
||||
const PropertyInfo qdev_prop_multifd_compression = {
|
||||
.name = "MultiFDCompression",
|
||||
.description = "multifd_compression values, "
|
||||
"none",
|
||||
.enum_table = &MultiFDCompression_lookup,
|
||||
.get = get_enum,
|
||||
.set = set_enum,
|
||||
.set_default_value = set_default_value_enum,
|
||||
};
|
||||
|
||||
/* --- pci address --- */
|
||||
|
||||
/*
|
||||
|
@ -20,6 +20,7 @@ extern const PropertyInfo qdev_prop_chr;
|
||||
extern const PropertyInfo qdev_prop_tpm;
|
||||
extern const PropertyInfo qdev_prop_macaddr;
|
||||
extern const PropertyInfo qdev_prop_on_off_auto;
|
||||
extern const PropertyInfo qdev_prop_multifd_compression;
|
||||
extern const PropertyInfo qdev_prop_losttickpolicy;
|
||||
extern const PropertyInfo qdev_prop_blockdev_on_error;
|
||||
extern const PropertyInfo qdev_prop_bios_chs_trans;
|
||||
@ -184,6 +185,9 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
|
||||
DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
|
||||
#define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \
|
||||
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto)
|
||||
#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
|
||||
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
|
||||
MultiFDCompression)
|
||||
#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
|
||||
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
|
||||
LostTickPolicy)
|
||||
|
@ -88,6 +88,7 @@
|
||||
/* The delay time (in ms) between two COLO checkpoints */
|
||||
#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
|
||||
#define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
|
||||
#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
|
||||
|
||||
/* Background transfer rate for postcopy, 0 means unlimited, note
|
||||
* that page requests can still exceed this limit.
|
||||
@ -798,6 +799,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
|
||||
params->block_incremental = s->parameters.block_incremental;
|
||||
params->has_multifd_channels = true;
|
||||
params->multifd_channels = s->parameters.multifd_channels;
|
||||
params->has_multifd_compression = true;
|
||||
params->multifd_compression = s->parameters.multifd_compression;
|
||||
params->has_xbzrle_cache_size = true;
|
||||
params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
|
||||
params->has_max_postcopy_bandwidth = true;
|
||||
@ -1315,6 +1318,9 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
|
||||
if (params->has_multifd_channels) {
|
||||
dest->multifd_channels = params->multifd_channels;
|
||||
}
|
||||
if (params->has_multifd_compression) {
|
||||
dest->multifd_compression = params->multifd_compression;
|
||||
}
|
||||
if (params->has_xbzrle_cache_size) {
|
||||
dest->xbzrle_cache_size = params->xbzrle_cache_size;
|
||||
}
|
||||
@ -1411,6 +1417,9 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
||||
if (params->has_multifd_channels) {
|
||||
s->parameters.multifd_channels = params->multifd_channels;
|
||||
}
|
||||
if (params->has_multifd_compression) {
|
||||
s->parameters.multifd_compression = params->multifd_compression;
|
||||
}
|
||||
if (params->has_xbzrle_cache_size) {
|
||||
s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
|
||||
xbzrle_cache_resize(params->xbzrle_cache_size, errp);
|
||||
@ -3523,6 +3532,9 @@ static Property migration_properties[] = {
|
||||
DEFINE_PROP_UINT8("multifd-channels", MigrationState,
|
||||
parameters.multifd_channels,
|
||||
DEFAULT_MIGRATE_MULTIFD_CHANNELS),
|
||||
DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
|
||||
parameters.multifd_compression,
|
||||
DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
|
||||
DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
|
||||
parameters.xbzrle_cache_size,
|
||||
DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
|
||||
@ -3613,6 +3625,7 @@ static void migration_instance_init(Object *obj)
|
||||
params->has_x_checkpoint_delay = true;
|
||||
params->has_block_incremental = true;
|
||||
params->has_multifd_channels = true;
|
||||
params->has_multifd_compression = true;
|
||||
params->has_xbzrle_cache_size = true;
|
||||
params->has_max_postcopy_bandwidth = true;
|
||||
params->has_max_cpu_throttle = true;
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "qapi/qapi-commands-tpm.h"
|
||||
#include "qapi/qapi-commands-ui.h"
|
||||
#include "qapi/qapi-visit-net.h"
|
||||
#include "qapi/qapi-visit-migration.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/string-input-visitor.h"
|
||||
@ -448,6 +449,9 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, "%s: %u\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_MULTIFD_CHANNELS),
|
||||
params->multifd_channels);
|
||||
monitor_printf(mon, "%s: %s\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_MULTIFD_COMPRESSION),
|
||||
MultiFDCompression_str(params->multifd_compression));
|
||||
monitor_printf(mon, "%s: %" PRIu64 "\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_XBZRLE_CACHE_SIZE),
|
||||
params->xbzrle_cache_size);
|
||||
@ -1739,6 +1743,7 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
|
||||
MigrateSetParameters *p = g_new0(MigrateSetParameters, 1);
|
||||
uint64_t valuebw = 0;
|
||||
uint64_t cache_size;
|
||||
MultiFDCompression compress_type;
|
||||
Error *err = NULL;
|
||||
int val, ret;
|
||||
|
||||
@ -1824,6 +1829,14 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
|
||||
p->has_multifd_channels = true;
|
||||
visit_type_int(v, param, &p->multifd_channels, &err);
|
||||
break;
|
||||
case MIGRATION_PARAMETER_MULTIFD_COMPRESSION:
|
||||
p->has_multifd_compression = true;
|
||||
visit_type_MultiFDCompression(v, param, &compress_type, &err);
|
||||
if (err) {
|
||||
break;
|
||||
}
|
||||
p->multifd_compression = compress_type;
|
||||
break;
|
||||
case MIGRATION_PARAMETER_XBZRLE_CACHE_SIZE:
|
||||
p->has_xbzrle_cache_size = true;
|
||||
visit_type_size(v, param, &cache_size, &err);
|
||||
|
@ -488,6 +488,19 @@
|
||||
##
|
||||
{ 'command': 'query-migrate-capabilities', 'returns': ['MigrationCapabilityStatus']}
|
||||
|
||||
##
|
||||
# @MultiFDCompression:
|
||||
#
|
||||
# An enumeration of multifd compression methods.
|
||||
#
|
||||
# @none: no compression.
|
||||
#
|
||||
# Since: 5.0
|
||||
#
|
||||
##
|
||||
{ 'enum': 'MultiFDCompression',
|
||||
'data': [ 'none' ] }
|
||||
|
||||
##
|
||||
# @MigrationParameter:
|
||||
#
|
||||
@ -586,6 +599,9 @@
|
||||
# @max-cpu-throttle: maximum cpu throttle percentage.
|
||||
# Defaults to 99. (Since 3.1)
|
||||
#
|
||||
# @multifd-compression: Which compression method to use.
|
||||
# Defaults to none. (Since 5.0)
|
||||
#
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'enum': 'MigrationParameter',
|
||||
@ -598,7 +614,7 @@
|
||||
'downtime-limit', 'x-checkpoint-delay', 'block-incremental',
|
||||
'multifd-channels',
|
||||
'xbzrle-cache-size', 'max-postcopy-bandwidth',
|
||||
'max-cpu-throttle' ] }
|
||||
'max-cpu-throttle', 'multifd-compression' ] }
|
||||
|
||||
##
|
||||
# @MigrateSetParameters:
|
||||
@ -688,6 +704,9 @@
|
||||
# @max-cpu-throttle: maximum cpu throttle percentage.
|
||||
# The default value is 99. (Since 3.1)
|
||||
#
|
||||
# @multifd-compression: Which compression method to use.
|
||||
# Defaults to none. (Since 5.0)
|
||||
#
|
||||
# Since: 2.4
|
||||
##
|
||||
# TODO either fuse back into MigrationParameters, or make
|
||||
@ -713,7 +732,8 @@
|
||||
'*multifd-channels': 'int',
|
||||
'*xbzrle-cache-size': 'size',
|
||||
'*max-postcopy-bandwidth': 'size',
|
||||
'*max-cpu-throttle': 'int' } }
|
||||
'*max-cpu-throttle': 'int',
|
||||
'*multifd-compression': 'MultiFDCompression' } }
|
||||
|
||||
##
|
||||
# @migrate-set-parameters:
|
||||
@ -823,6 +843,9 @@
|
||||
# Defaults to 99.
|
||||
# (Since 3.1)
|
||||
#
|
||||
# @multifd-compression: Which compression method to use.
|
||||
# Defaults to none. (Since 5.0)
|
||||
#
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'struct': 'MigrationParameters',
|
||||
@ -846,7 +869,8 @@
|
||||
'*multifd-channels': 'uint8',
|
||||
'*xbzrle-cache-size': 'size',
|
||||
'*max-postcopy-bandwidth': 'size',
|
||||
'*max-cpu-throttle':'uint8'} }
|
||||
'*max-cpu-throttle': 'uint8',
|
||||
'*multifd-compression': 'MultiFDCompression' } }
|
||||
|
||||
##
|
||||
# @query-migrate-parameters:
|
||||
|
@ -378,7 +378,6 @@ static void migrate_check_parameter_str(QTestState *who, const char *parameter,
|
||||
g_free(result);
|
||||
}
|
||||
|
||||
__attribute__((unused))
|
||||
static void migrate_set_parameter_str(QTestState *who, const char *parameter,
|
||||
const char *value)
|
||||
{
|
||||
@ -1261,7 +1260,7 @@ static void test_migrate_auto_converge(void)
|
||||
test_migrate_end(from, to, true);
|
||||
}
|
||||
|
||||
static void test_multifd_tcp(void)
|
||||
static void test_multifd_tcp(const char *method)
|
||||
{
|
||||
MigrateStart *args = migrate_start_new();
|
||||
QTestState *from, *to;
|
||||
@ -1285,6 +1284,9 @@ static void test_multifd_tcp(void)
|
||||
migrate_set_parameter_int(from, "multifd-channels", 16);
|
||||
migrate_set_parameter_int(to, "multifd-channels", 16);
|
||||
|
||||
migrate_set_parameter_str(from, "multifd-compression", method);
|
||||
migrate_set_parameter_str(to, "multifd-compression", method);
|
||||
|
||||
migrate_set_capability(from, "multifd", "true");
|
||||
migrate_set_capability(to, "multifd", "true");
|
||||
|
||||
@ -1316,6 +1318,11 @@ static void test_multifd_tcp(void)
|
||||
g_free(uri);
|
||||
}
|
||||
|
||||
static void test_multifd_tcp_none(void)
|
||||
{
|
||||
test_multifd_tcp("none");
|
||||
}
|
||||
|
||||
/*
|
||||
* This test does:
|
||||
* source target
|
||||
@ -1327,7 +1334,6 @@ static void test_multifd_tcp(void)
|
||||
*
|
||||
* And see that it works
|
||||
*/
|
||||
|
||||
static void test_multifd_tcp_cancel(void)
|
||||
{
|
||||
MigrateStart *args = migrate_start_new();
|
||||
@ -1478,7 +1484,7 @@ int main(int argc, char **argv)
|
||||
test_validate_uuid_dst_not_set);
|
||||
|
||||
qtest_add_func("/migration/auto_converge", test_migrate_auto_converge);
|
||||
qtest_add_func("/migration/multifd/tcp", test_multifd_tcp);
|
||||
qtest_add_func("/migration/multifd/tcp/none", test_multifd_tcp_none);
|
||||
qtest_add_func("/migration/multifd/tcp/cancel", test_multifd_tcp_cancel);
|
||||
|
||||
ret = g_test_run();
|
||||
|
Loading…
x
Reference in New Issue
Block a user