mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
migration: Add announce parameters
Add migration parameters that control RARP/GARP announcement timeouts. Based on earlier patches by myself and Vladislav Yasevich <vyasevic@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
50510ea2c2
commit
ee3d96baf3
4 changed files with 180 additions and 3 deletions
|
@ -87,6 +87,15 @@
|
|||
*/
|
||||
#define DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH 0
|
||||
|
||||
/*
|
||||
* Parameters for self_announce_delay giving a stream of RARP/ARP
|
||||
* packets after migration.
|
||||
*/
|
||||
#define DEFAULT_MIGRATE_ANNOUNCE_INITIAL 50
|
||||
#define DEFAULT_MIGRATE_ANNOUNCE_MAX 550
|
||||
#define DEFAULT_MIGRATE_ANNOUNCE_ROUNDS 5
|
||||
#define DEFAULT_MIGRATE_ANNOUNCE_STEP 100
|
||||
|
||||
static NotifierList migration_state_notifiers =
|
||||
NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
|
||||
|
||||
|
@ -740,10 +749,32 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
|
|||
params->max_postcopy_bandwidth = s->parameters.max_postcopy_bandwidth;
|
||||
params->has_max_cpu_throttle = true;
|
||||
params->max_cpu_throttle = s->parameters.max_cpu_throttle;
|
||||
params->has_announce_initial = true;
|
||||
params->announce_initial = s->parameters.announce_initial;
|
||||
params->has_announce_max = true;
|
||||
params->announce_max = s->parameters.announce_max;
|
||||
params->has_announce_rounds = true;
|
||||
params->announce_rounds = s->parameters.announce_rounds;
|
||||
params->has_announce_step = true;
|
||||
params->announce_step = s->parameters.announce_step;
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
AnnounceParameters *migrate_announce_params(void)
|
||||
{
|
||||
static AnnounceParameters ap;
|
||||
|
||||
MigrationState *s = migrate_get_current();
|
||||
|
||||
ap.initial = s->parameters.announce_initial;
|
||||
ap.max = s->parameters.announce_max;
|
||||
ap.rounds = s->parameters.announce_rounds;
|
||||
ap.step = s->parameters.announce_step;
|
||||
|
||||
return ≈
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true if we're already in the middle of a migration
|
||||
* (i.e. any of the active or setup states)
|
||||
|
@ -1117,6 +1148,35 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (params->has_announce_initial &&
|
||||
params->announce_initial > 100000) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
"announce_initial",
|
||||
"is invalid, it must be less than 100000 ms");
|
||||
return false;
|
||||
}
|
||||
if (params->has_announce_max &&
|
||||
params->announce_max > 100000) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
"announce_max",
|
||||
"is invalid, it must be less than 100000 ms");
|
||||
return false;
|
||||
}
|
||||
if (params->has_announce_rounds &&
|
||||
params->announce_rounds > 1000) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
"announce_rounds",
|
||||
"is invalid, it must be in the range of 0 to 1000");
|
||||
return false;
|
||||
}
|
||||
if (params->has_announce_step &&
|
||||
(params->announce_step < 1 ||
|
||||
params->announce_step > 10000)) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
"announce_step",
|
||||
"is invalid, it must be in the range of 1 to 10000 ms");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1191,6 +1251,18 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
|
|||
if (params->has_max_cpu_throttle) {
|
||||
dest->max_cpu_throttle = params->max_cpu_throttle;
|
||||
}
|
||||
if (params->has_announce_initial) {
|
||||
dest->announce_initial = params->announce_initial;
|
||||
}
|
||||
if (params->has_announce_max) {
|
||||
dest->announce_max = params->announce_max;
|
||||
}
|
||||
if (params->has_announce_rounds) {
|
||||
dest->announce_rounds = params->announce_rounds;
|
||||
}
|
||||
if (params->has_announce_step) {
|
||||
dest->announce_step = params->announce_step;
|
||||
}
|
||||
}
|
||||
|
||||
static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
||||
|
@ -1273,6 +1345,18 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
|||
if (params->has_max_cpu_throttle) {
|
||||
s->parameters.max_cpu_throttle = params->max_cpu_throttle;
|
||||
}
|
||||
if (params->has_announce_initial) {
|
||||
s->parameters.announce_initial = params->announce_initial;
|
||||
}
|
||||
if (params->has_announce_max) {
|
||||
s->parameters.announce_max = params->announce_max;
|
||||
}
|
||||
if (params->has_announce_rounds) {
|
||||
s->parameters.announce_rounds = params->announce_rounds;
|
||||
}
|
||||
if (params->has_announce_step) {
|
||||
s->parameters.announce_step = params->announce_step;
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
|
||||
|
@ -3275,6 +3359,18 @@ static Property migration_properties[] = {
|
|||
DEFINE_PROP_UINT8("max-cpu-throttle", MigrationState,
|
||||
parameters.max_cpu_throttle,
|
||||
DEFAULT_MIGRATE_MAX_CPU_THROTTLE),
|
||||
DEFINE_PROP_SIZE("announce-initial", MigrationState,
|
||||
parameters.announce_initial,
|
||||
DEFAULT_MIGRATE_ANNOUNCE_INITIAL),
|
||||
DEFINE_PROP_SIZE("announce-max", MigrationState,
|
||||
parameters.announce_max,
|
||||
DEFAULT_MIGRATE_ANNOUNCE_MAX),
|
||||
DEFINE_PROP_SIZE("announce-rounds", MigrationState,
|
||||
parameters.announce_rounds,
|
||||
DEFAULT_MIGRATE_ANNOUNCE_ROUNDS),
|
||||
DEFINE_PROP_SIZE("announce-step", MigrationState,
|
||||
parameters.announce_step,
|
||||
DEFAULT_MIGRATE_ANNOUNCE_STEP),
|
||||
|
||||
/* Migration capabilities */
|
||||
DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
|
||||
|
@ -3347,6 +3443,10 @@ static void migration_instance_init(Object *obj)
|
|||
params->has_xbzrle_cache_size = true;
|
||||
params->has_max_postcopy_bandwidth = true;
|
||||
params->has_max_cpu_throttle = true;
|
||||
params->has_announce_initial = true;
|
||||
params->has_announce_max = true;
|
||||
params->has_announce_rounds = true;
|
||||
params->has_announce_step = true;
|
||||
|
||||
qemu_sem_init(&ms->postcopy_pause_sem, 0);
|
||||
qemu_sem_init(&ms->postcopy_pause_rp_sem, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue