Add qemu migration parameters to support setting multifd
migration compression method and level.
Signed-off-by: Jiang Jiacheng <jiangjiacheng@huawei.com>
---
src/qemu/qemu_migration.h | 2 ++
src/qemu/qemu_migration_params.c | 24 +++++++++++++++++++++++-
src/qemu/qemu_migration_params.h | 3 +++
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h
index d21b6f67e8..ed62fd4a91 100644
--- a/src/qemu/qemu_migration.h
+++ b/src/qemu/qemu_migration.h
@@ -86,6 +86,8 @@
VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT, VIR_TYPED_PARAM_INT, \
VIR_MIGRATE_PARAM_BANDWIDTH_POSTCOPY, VIR_TYPED_PARAM_ULLONG, \
VIR_MIGRATE_PARAM_PARALLEL_CONNECTIONS, VIR_TYPED_PARAM_INT, \
+ VIR_MIGRATE_PARAM_COMPRESSION_ZLIB_LEVEL, VIR_TYPED_PARAM_INT, \
+ VIR_MIGRATE_PARAM_COMPRESSION_ZSTD_LEVEL, VIR_TYPED_PARAM_INT, \
VIR_MIGRATE_PARAM_TLS_DESTINATION, VIR_TYPED_PARAM_STRING, \
VIR_MIGRATE_PARAM_DISKS_URI, VIR_TYPED_PARAM_STRING, \
NULL
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index bd09dcfb23..380fc7dccd 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -114,6 +114,9 @@ VIR_ENUM_IMPL(qemuMigrationParam,
"xbzrle-cache-size",
"max-postcopy-bandwidth",
"multifd-channels",
+ "multifd-compression",
+ "multifd-zlib-level",
+ "multifd-zstd-level",
);
typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOnItem;
@@ -225,6 +228,14 @@ static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] = {
.param = QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS,
.party = QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+ {.typedParam = VIR_MIGRATE_PARAM_COMPRESSION_ZLIB_LEVEL,
+ .param = QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL,
+ .party = QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+
+ {.typedParam = VIR_MIGRATE_PARAM_COMPRESSION_ZSTD_LEVEL,
+ .param = QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL,
+ .party = QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+
{.typedParam = VIR_MIGRATE_PARAM_TLS_DESTINATION,
.param = QEMU_MIGRATION_PARAM_TLS_HOSTNAME,
.party = QEMU_MIGRATION_SOURCE},
@@ -271,6 +282,15 @@ static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = {
[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = {
.type = QEMU_MIGRATION_PARAM_TYPE_INT,
},
+ [QEMU_MIGRATION_PARAM_MULTIFD_COMPRESSION] = {
+ .type = QEMU_MIGRATION_PARAM_TYPE_STRING,
+ },
+ [QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL] = {
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
+ },
+ [QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL] = {
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
+ },
};
G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamInfo) == QEMU_MIGRATION_PARAM_LAST);
@@ -662,7 +682,9 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
return NULL;
}
- if (migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set &&
+ if ((migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set ||
+ migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL].set ||
+ migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL].set) &&
!(flags & VIR_MIGRATE_PARALLEL)) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Turn parallel migration on to tune it"));
diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
index e7c65f6a21..5857673227 100644
--- a/src/qemu/qemu_migration_params.h
+++ b/src/qemu/qemu_migration_params.h
@@ -59,6 +59,9 @@ typedef enum {
QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH,
QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS,
+ QEMU_MIGRATION_PARAM_MULTIFD_COMPRESSION,
+ QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL,
+ QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL,
QEMU_MIGRATION_PARAM_LAST
} qemuMigrationParam;
--
2.33.0
On Fri, Jan 20, 2023 at 16:47:41 +0800, Jiang Jiacheng wrote:
> Add qemu migration parameters to support setting multifd
> migration compression method and level.
>
> Signed-off-by: Jiang Jiacheng <jiangjiacheng@huawei.com>
> ---
> src/qemu/qemu_migration.h | 2 ++
> src/qemu/qemu_migration_params.c | 24 +++++++++++++++++++++++-
> src/qemu/qemu_migration_params.h | 3 +++
> 3 files changed, 28 insertions(+), 1 deletion(-)
>
...
> diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
> index bd09dcfb23..380fc7dccd 100644
> --- a/src/qemu/qemu_migration_params.c
> +++ b/src/qemu/qemu_migration_params.c
...
> @@ -662,7 +682,9 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
> return NULL;
> }
>
> - if (migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set &&
> + if ((migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set ||
> + migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL].set ||
> + migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL].set) &&
> !(flags & VIR_MIGRATE_PARALLEL)) {
> virReportError(VIR_ERR_INVALID_ARG, "%s",
> _("Turn parallel migration on to tune it"));
This check doesn't really make sense here. The new parameters tune
multifd compression (if enabled) rather than multifd migration itself.
> diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
> index e7c65f6a21..5857673227 100644
> --- a/src/qemu/qemu_migration_params.h
> +++ b/src/qemu/qemu_migration_params.h
> @@ -59,6 +59,9 @@ typedef enum {
> QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
> QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH,
> QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS,
> + QEMU_MIGRATION_PARAM_MULTIFD_COMPRESSION,
> + QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL,
> + QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL,
>
> QEMU_MIGRATION_PARAM_LAST
> } qemuMigrationParam;
And this patch should actually be squashed into the next one.
Jirka
On 2023/2/7 23:37, Jiri Denemark wrote:
> On Fri, Jan 20, 2023 at 16:47:41 +0800, Jiang Jiacheng wrote:
>> Add qemu migration parameters to support setting multifd
>> migration compression method and level.
>>
>> Signed-off-by: Jiang Jiacheng <jiangjiacheng@huawei.com>
>> ---
>> src/qemu/qemu_migration.h | 2 ++
>> src/qemu/qemu_migration_params.c | 24 +++++++++++++++++++++++-
>> src/qemu/qemu_migration_params.h | 3 +++
>> 3 files changed, 28 insertions(+), 1 deletion(-)
>>
> ...
>> diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
>> index bd09dcfb23..380fc7dccd 100644
>> --- a/src/qemu/qemu_migration_params.c
>> +++ b/src/qemu/qemu_migration_params.c
> ...
>> @@ -662,7 +682,9 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
>> return NULL;
>> }
>>
>> - if (migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set &&
>> + if ((migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set ||
>> + migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL].set ||
>> + migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL].set) &&
>> !(flags & VIR_MIGRATE_PARALLEL)) {
>> virReportError(VIR_ERR_INVALID_ARG, "%s",
>> _("Turn parallel migration on to tune it"));
>
> This check doesn't really make sense here. The new parameters tune
> multifd compression (if enabled) rather than multifd migration itself.
>
>> diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
>> index e7c65f6a21..5857673227 100644
>> --- a/src/qemu/qemu_migration_params.h
>> +++ b/src/qemu/qemu_migration_params.h
>> @@ -59,6 +59,9 @@ typedef enum {
>> QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
>> QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH,
>> QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS,
>> + QEMU_MIGRATION_PARAM_MULTIFD_COMPRESSION,
>> + QEMU_MIGRATION_PARAM_MULTIFD_ZLIB_LEVEL,
>> + QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL,
>>
>> QEMU_MIGRATION_PARAM_LAST
>> } qemuMigrationParam;
>
> And this patch should actually be squashed into the next one.
Thanks for your suggestion, I will improve them in my next version.
Thanks, Jiang Jiacheng
>
> Jirka
>
© 2016 - 2026 Red Hat, Inc.