|
@@ -163,7 +163,8 @@ INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
|
|
MIGRATION_CAPABILITY_COMPRESS,
|
|
MIGRATION_CAPABILITY_COMPRESS,
|
|
MIGRATION_CAPABILITY_XBZRLE,
|
|
MIGRATION_CAPABILITY_XBZRLE,
|
|
MIGRATION_CAPABILITY_X_COLO,
|
|
MIGRATION_CAPABILITY_X_COLO,
|
|
- MIGRATION_CAPABILITY_VALIDATE_UUID);
|
|
|
|
|
|
+ MIGRATION_CAPABILITY_VALIDATE_UUID,
|
|
|
|
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND);
|
|
|
|
|
|
/* When we add fault tolerance, we could have several
|
|
/* When we add fault tolerance, we could have several
|
|
migrations at once. For now we don't need to add
|
|
migrations at once. For now we don't need to add
|
|
@@ -910,10 +911,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
|
|
params->multifd_zlib_level = s->parameters.multifd_zlib_level;
|
|
params->multifd_zlib_level = s->parameters.multifd_zlib_level;
|
|
params->has_multifd_zstd_level = true;
|
|
params->has_multifd_zstd_level = true;
|
|
params->multifd_zstd_level = s->parameters.multifd_zstd_level;
|
|
params->multifd_zstd_level = s->parameters.multifd_zstd_level;
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- params->has_zero_copy_send = true;
|
|
|
|
- params->zero_copy_send = s->parameters.zero_copy_send;
|
|
|
|
-#endif
|
|
|
|
params->has_xbzrle_cache_size = true;
|
|
params->has_xbzrle_cache_size = true;
|
|
params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
|
|
params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
|
|
params->has_max_postcopy_bandwidth = true;
|
|
params->has_max_postcopy_bandwidth = true;
|
|
@@ -1275,6 +1272,24 @@ static bool migrate_caps_check(bool *cap_list,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_LINUX
|
|
|
|
+ if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
|
|
|
|
+ (!cap_list[MIGRATION_CAPABILITY_MULTIFD] ||
|
|
|
|
+ migrate_use_compression() ||
|
|
|
|
+ migrate_use_tls())) {
|
|
|
|
+ error_setg(errp,
|
|
|
|
+ "Zero copy only available for non-compressed non-TLS multifd migration");
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+#else
|
|
|
|
+ if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
|
|
|
|
+ error_setg(errp,
|
|
|
|
+ "Zero copy currently only available on Linux");
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+
|
|
/* incoming side only */
|
|
/* incoming side only */
|
|
if (runstate_check(RUN_STATE_INMIGRATE) &&
|
|
if (runstate_check(RUN_STATE_INMIGRATE) &&
|
|
!migrate_multi_channels_is_allowed() &&
|
|
!migrate_multi_channels_is_allowed() &&
|
|
@@ -1497,16 +1512,6 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
|
|
error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
|
|
error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- if (params->zero_copy_send &&
|
|
|
|
- (!migrate_use_multifd() ||
|
|
|
|
- params->multifd_compression != MULTIFD_COMPRESSION_NONE ||
|
|
|
|
- (params->tls_creds && *params->tls_creds))) {
|
|
|
|
- error_setg(errp,
|
|
|
|
- "Zero copy only available for non-compressed non-TLS multifd migration");
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1580,11 +1585,6 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
|
|
if (params->has_multifd_compression) {
|
|
if (params->has_multifd_compression) {
|
|
dest->multifd_compression = params->multifd_compression;
|
|
dest->multifd_compression = params->multifd_compression;
|
|
}
|
|
}
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- if (params->has_zero_copy_send) {
|
|
|
|
- dest->zero_copy_send = params->zero_copy_send;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
if (params->has_xbzrle_cache_size) {
|
|
if (params->has_xbzrle_cache_size) {
|
|
dest->xbzrle_cache_size = params->xbzrle_cache_size;
|
|
dest->xbzrle_cache_size = params->xbzrle_cache_size;
|
|
}
|
|
}
|
|
@@ -1697,11 +1697,6 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
|
if (params->has_multifd_compression) {
|
|
if (params->has_multifd_compression) {
|
|
s->parameters.multifd_compression = params->multifd_compression;
|
|
s->parameters.multifd_compression = params->multifd_compression;
|
|
}
|
|
}
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- if (params->has_zero_copy_send) {
|
|
|
|
- s->parameters.zero_copy_send = params->zero_copy_send;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
if (params->has_xbzrle_cache_size) {
|
|
if (params->has_xbzrle_cache_size) {
|
|
s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
|
|
s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
|
|
xbzrle_cache_resize(params->xbzrle_cache_size, errp);
|
|
xbzrle_cache_resize(params->xbzrle_cache_size, errp);
|
|
@@ -2593,7 +2588,7 @@ bool migrate_use_zero_copy_send(void)
|
|
|
|
|
|
s = migrate_get_current();
|
|
s = migrate_get_current();
|
|
|
|
|
|
- return s->parameters.zero_copy_send;
|
|
|
|
|
|
+ return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -4249,10 +4244,6 @@ static Property migration_properties[] = {
|
|
DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
|
|
DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
|
|
parameters.multifd_zstd_level,
|
|
parameters.multifd_zstd_level,
|
|
DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
|
|
DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- DEFINE_PROP_BOOL("zero_copy_send", MigrationState,
|
|
|
|
- parameters.zero_copy_send, false),
|
|
|
|
-#endif
|
|
|
|
DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
|
|
DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
|
|
parameters.xbzrle_cache_size,
|
|
parameters.xbzrle_cache_size,
|
|
DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
|
|
DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
|
|
@@ -4290,6 +4281,10 @@ static Property migration_properties[] = {
|
|
DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
|
|
DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
|
|
DEFINE_PROP_MIG_CAP("x-background-snapshot",
|
|
DEFINE_PROP_MIG_CAP("x-background-snapshot",
|
|
MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
|
|
MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
|
|
|
|
+#ifdef CONFIG_LINUX
|
|
|
|
+ DEFINE_PROP_MIG_CAP("x-zero-copy-send",
|
|
|
|
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND),
|
|
|
|
+#endif
|
|
|
|
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
};
|
|
};
|
|
@@ -4350,9 +4345,6 @@ static void migration_instance_init(Object *obj)
|
|
params->has_multifd_compression = true;
|
|
params->has_multifd_compression = true;
|
|
params->has_multifd_zlib_level = true;
|
|
params->has_multifd_zlib_level = true;
|
|
params->has_multifd_zstd_level = true;
|
|
params->has_multifd_zstd_level = true;
|
|
-#ifdef CONFIG_LINUX
|
|
|
|
- params->has_zero_copy_send = true;
|
|
|
|
-#endif
|
|
|
|
params->has_xbzrle_cache_size = true;
|
|
params->has_xbzrle_cache_size = true;
|
|
params->has_max_postcopy_bandwidth = true;
|
|
params->has_max_postcopy_bandwidth = true;
|
|
params->has_max_cpu_throttle = true;
|
|
params->has_max_cpu_throttle = true;
|