Skip to content

Commit

Permalink
migration: mode parameter
Browse files Browse the repository at this point in the history
Create a mode migration parameter that can be used to select alternate
migration algorithms.  The default mode is normal, representing the
current migration algorithm, and does not need to be explicitly set.

No functional change until a new mode is added, except that the mode is
shown by the 'info migrate' command.

Signed-off-by: Steve Sistare <[email protected]>
Reviewed-by: Juan Quintela <[email protected]>
Signed-off-by: Juan Quintela <[email protected]>
Message-ID: <[email protected]>
  • Loading branch information
Steve Sistare authored and Juan Quintela committed Nov 1, 2023
1 parent 3e5f3bc commit eea1e5c
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 3 deletions.
14 changes: 14 additions & 0 deletions hw/core/qdev-properties-system.c
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,20 @@ const PropertyInfo qdev_prop_multifd_compression = {
.set_default_value = qdev_propinfo_set_default_value_enum,
};

/* --- MigMode --- */

QEMU_BUILD_BUG_ON(sizeof(MigMode) != sizeof(int));

const PropertyInfo qdev_prop_mig_mode = {
.name = "MigMode",
.description = "mig_mode values, "
"normal",
.enum_table = &MigMode_lookup,
.get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum,
.set_default_value = qdev_propinfo_set_default_value_enum,
};

/* --- Reserved Region --- */

/*
Expand Down
4 changes: 4 additions & 0 deletions include/hw/qdev-properties-system.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ extern const PropertyInfo qdev_prop_chr;
extern const PropertyInfo qdev_prop_macaddr;
extern const PropertyInfo qdev_prop_reserved_region;
extern const PropertyInfo qdev_prop_multifd_compression;
extern const PropertyInfo qdev_prop_mig_mode;
extern const PropertyInfo qdev_prop_losttickpolicy;
extern const PropertyInfo qdev_prop_blockdev_on_error;
extern const PropertyInfo qdev_prop_bios_chs_trans;
Expand Down Expand Up @@ -42,6 +43,9 @@ extern const PropertyInfo qdev_prop_cpus390entitlement;
#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
MultiFDCompression)
#define DEFINE_PROP_MIG_MODE(_n, _s, _f, _d) \
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_mig_mode, \
MigMode)
#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
LostTickPolicy)
Expand Down
1 change: 1 addition & 0 deletions include/migration/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#define MIGRATION_MISC_H

#include "qemu/notify.h"
#include "qapi/qapi-types-migration.h"
#include "qapi/qapi-types-net.h"

/* migration/ram.c */
Expand Down
9 changes: 9 additions & 0 deletions migration/migration-hmp-cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,11 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "%s: %" PRIu64 " MB/s\n",
MigrationParameter_str(MIGRATION_PARAMETER_VCPU_DIRTY_LIMIT),
params->vcpu_dirty_limit);

assert(params->has_mode);
monitor_printf(mon, "%s: %s\n",
MigrationParameter_str(MIGRATION_PARAMETER_MODE),
qapi_enum_lookup(&MigMode_lookup, params->mode));
}

qapi_free_MigrationParameters(params);
Expand Down Expand Up @@ -661,6 +666,10 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
p->has_vcpu_dirty_limit = true;
visit_type_size(v, param, &p->vcpu_dirty_limit, &err);
break;
case MIGRATION_PARAMETER_MODE:
p->has_mode = true;
visit_type_MigMode(v, param, &p->mode, &err);
break;
default:
assert(0);
}
Expand Down
21 changes: 21 additions & 0 deletions migration/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,9 @@ Property migration_properties[] = {
DEFINE_PROP_UINT64("vcpu-dirty-limit", MigrationState,
parameters.vcpu_dirty_limit,
DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT),
DEFINE_PROP_MIG_MODE("mode", MigrationState,
parameters.mode,
MIG_MODE_NORMAL),

/* Migration capabilities */
DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
Expand Down Expand Up @@ -827,6 +830,13 @@ uint64_t migrate_max_postcopy_bandwidth(void)
return s->parameters.max_postcopy_bandwidth;
}

MigMode migrate_mode(void)
{
MigrationState *s = migrate_get_current();

return s->parameters.mode;
}

int migrate_multifd_channels(void)
{
MigrationState *s = migrate_get_current();
Expand Down Expand Up @@ -999,6 +1009,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
params->x_vcpu_dirty_limit_period = s->parameters.x_vcpu_dirty_limit_period;
params->has_vcpu_dirty_limit = true;
params->vcpu_dirty_limit = s->parameters.vcpu_dirty_limit;
params->has_mode = true;
params->mode = s->parameters.mode;

return params;
}
Expand Down Expand Up @@ -1034,6 +1046,7 @@ void migrate_params_init(MigrationParameters *params)
params->has_announce_step = true;
params->has_x_vcpu_dirty_limit_period = true;
params->has_vcpu_dirty_limit = true;
params->has_mode = true;
}

/*
Expand Down Expand Up @@ -1331,6 +1344,10 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
if (params->has_vcpu_dirty_limit) {
dest->vcpu_dirty_limit = params->vcpu_dirty_limit;
}

if (params->has_mode) {
dest->mode = params->mode;
}
}

static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
Expand Down Expand Up @@ -1471,6 +1488,10 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
if (params->has_vcpu_dirty_limit) {
s->parameters.vcpu_dirty_limit = params->vcpu_dirty_limit;
}

if (params->has_mode) {
s->parameters.mode = params->mode;
}
}

void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
Expand Down
1 change: 1 addition & 0 deletions migration/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ uint8_t migrate_max_cpu_throttle(void);
uint64_t migrate_max_bandwidth(void);
uint64_t migrate_avail_switchover_bandwidth(void);
uint64_t migrate_max_postcopy_bandwidth(void);
MigMode migrate_mode(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
Expand Down
27 changes: 24 additions & 3 deletions qapi/migration.json
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,15 @@
'data': [ 'none', 'zlib',
{ 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }

##
# @MigMode:
#
# @normal: the original form of migration. (since 8.2)
#
##
{ 'enum': 'MigMode',
'data': [ 'normal' ] }

##
# @BitmapMigrationBitmapAliasTransform:
#
Expand Down Expand Up @@ -849,6 +858,9 @@
# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
# Defaults to 1. (Since 8.1)
#
# @mode: Migration mode. See description in @MigMode. Default is 'normal'.
# (Since 8.2)
#
# Features:
#
# @deprecated: Member @block-incremental is deprecated. Use
Expand Down Expand Up @@ -881,7 +893,8 @@
'multifd-zlib-level', 'multifd-zstd-level',
'block-bitmap-mapping',
{ 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
'vcpu-dirty-limit'] }
'vcpu-dirty-limit',
'mode'] }

##
# @MigrateSetParameters:
Expand Down Expand Up @@ -1033,6 +1046,9 @@
# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
# Defaults to 1. (Since 8.1)
#
# @mode: Migration mode. See description in @MigMode. Default is 'normal'.
# (Since 8.2)
#
# Features:
#
# @deprecated: Member @block-incremental is deprecated. Use
Expand Down Expand Up @@ -1085,7 +1101,8 @@
'*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
'*x-vcpu-dirty-limit-period': { 'type': 'uint64',
'features': [ 'unstable' ] },
'*vcpu-dirty-limit': 'uint64'} }
'*vcpu-dirty-limit': 'uint64',
'*mode': 'MigMode'} }

##
# @migrate-set-parameters:
Expand Down Expand Up @@ -1257,6 +1274,9 @@
# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
# Defaults to 1. (Since 8.1)
#
# @mode: Migration mode. See description in @MigMode. Default is 'normal'.
# (Since 8.2)
#
# Features:
#
# @deprecated: Member @block-incremental is deprecated. Use
Expand Down Expand Up @@ -1306,7 +1326,8 @@
'*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
'*x-vcpu-dirty-limit-period': { 'type': 'uint64',
'features': [ 'unstable' ] },
'*vcpu-dirty-limit': 'uint64'} }
'*vcpu-dirty-limit': 'uint64',
'*mode': 'MigMode'} }

##
# @query-migrate-parameters:
Expand Down

0 comments on commit eea1e5c

Please sign in to comment.