|
@@ -55,6 +55,13 @@
|
|
|
#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
|
|
|
/* 0: means nocompress, 1: best speed, ... 9: best compress ratio */
|
|
|
#define DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL 1
|
|
|
+/*
|
|
|
+ * 1: best speed, ... 9: best compress ratio
|
|
|
+ * There is some nuance here. Refer to QATzip documentation to understand
|
|
|
+ * the mapping of QATzip levels to standard deflate levels.
|
|
|
+ */
|
|
|
+#define DEFAULT_MIGRATE_MULTIFD_QATZIP_LEVEL 1
|
|
|
+
|
|
|
/* 0: means nocompress, 1: best speed, ... 20: best compress ratio */
|
|
|
#define DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL 1
|
|
|
|
|
@@ -123,6 +130,9 @@ Property migration_properties[] = {
|
|
|
DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
|
|
|
parameters.multifd_zlib_level,
|
|
|
DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
|
|
|
+ DEFINE_PROP_UINT8("multifd-qatzip-level", MigrationState,
|
|
|
+ parameters.multifd_qatzip_level,
|
|
|
+ DEFAULT_MIGRATE_MULTIFD_QATZIP_LEVEL),
|
|
|
DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
|
|
|
parameters.multifd_zstd_level,
|
|
|
DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
|
|
@@ -787,6 +797,13 @@ int migrate_multifd_zlib_level(void)
|
|
|
return s->parameters.multifd_zlib_level;
|
|
|
}
|
|
|
|
|
|
+int migrate_multifd_qatzip_level(void)
|
|
|
+{
|
|
|
+ MigrationState *s = migrate_get_current();
|
|
|
+
|
|
|
+ return s->parameters.multifd_qatzip_level;
|
|
|
+}
|
|
|
+
|
|
|
int migrate_multifd_zstd_level(void)
|
|
|
{
|
|
|
MigrationState *s = migrate_get_current();
|
|
@@ -892,6 +909,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
|
|
|
params->multifd_compression = s->parameters.multifd_compression;
|
|
|
params->has_multifd_zlib_level = true;
|
|
|
params->multifd_zlib_level = s->parameters.multifd_zlib_level;
|
|
|
+ params->has_multifd_qatzip_level = true;
|
|
|
+ params->multifd_qatzip_level = s->parameters.multifd_qatzip_level;
|
|
|
params->has_multifd_zstd_level = true;
|
|
|
params->multifd_zstd_level = s->parameters.multifd_zstd_level;
|
|
|
params->has_xbzrle_cache_size = true;
|
|
@@ -946,6 +965,7 @@ void migrate_params_init(MigrationParameters *params)
|
|
|
params->has_multifd_channels = true;
|
|
|
params->has_multifd_compression = true;
|
|
|
params->has_multifd_zlib_level = true;
|
|
|
+ params->has_multifd_qatzip_level = true;
|
|
|
params->has_multifd_zstd_level = true;
|
|
|
params->has_xbzrle_cache_size = true;
|
|
|
params->has_max_postcopy_bandwidth = true;
|
|
@@ -1038,6 +1058,14 @@ bool migrate_params_check(MigrationParameters *params, Error **errp)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ if (params->has_multifd_qatzip_level &&
|
|
|
+ ((params->multifd_qatzip_level > 9) ||
|
|
|
+ (params->multifd_qatzip_level < 1))) {
|
|
|
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_qatzip_level",
|
|
|
+ "a value between 1 and 9");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
if (params->has_multifd_zstd_level &&
|
|
|
(params->multifd_zstd_level > 20)) {
|
|
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
|
|
@@ -1195,6 +1223,9 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
|
|
|
if (params->has_multifd_compression) {
|
|
|
dest->multifd_compression = params->multifd_compression;
|
|
|
}
|
|
|
+ if (params->has_multifd_qatzip_level) {
|
|
|
+ dest->multifd_qatzip_level = params->multifd_qatzip_level;
|
|
|
+ }
|
|
|
if (params->has_multifd_zlib_level) {
|
|
|
dest->multifd_zlib_level = params->multifd_zlib_level;
|
|
|
}
|
|
@@ -1315,6 +1346,9 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
|
|
if (params->has_multifd_compression) {
|
|
|
s->parameters.multifd_compression = params->multifd_compression;
|
|
|
}
|
|
|
+ if (params->has_multifd_qatzip_level) {
|
|
|
+ s->parameters.multifd_qatzip_level = params->multifd_qatzip_level;
|
|
|
+ }
|
|
|
if (params->has_multifd_zlib_level) {
|
|
|
s->parameters.multifd_zlib_level = params->multifd_zlib_level;
|
|
|
}
|