From f098a118012a298516521b92c7c7ca844c868176 Mon Sep 17 00:00:00 2001 From: jipengfei Date: Thu, 9 Feb 2023 08:33:01 +0800 Subject: [PATCH] live_migrate: virsh migrate command supports the zstd compression algorithm When executing virsh migrate, specify a compression algorithm using --comp-algorithm. You can choose zlib or zstd. Signed-off-by: jipengfei --- include/libvirt/libvirt-domain.h | 10 ++++++++++ src/qemu/qemu_migration.h | 1 + src/qemu/qemu_migration_params.c | 9 ++++++++- src/qemu/qemu_migration_params.h | 1 + tools/virsh-domain.c | 12 ++++++++++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h index 8fe723198d..36319c9130 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1073,6 +1073,16 @@ typedef enum { */ # define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination" +/** +* VIR_MIGRATE_PARAM_COMPRESSION_ALGORITHM: +* +* virDomainMigrate* params field: choose compression algorithm, you can choose +* zlib or zstd. +* +* Since: 6.2.0 +*/ +# define VIR_MIGRATE_PARAM_COMPRESSION_ALGORITHM "compression.algorithm" + /* Domain migration. */ virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, unsigned long flags, const char *dname, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 316a1a10f4..28e4cd7fe7 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -85,6 +85,7 @@ VIR_MIGRATE_PARAM_PARALLEL_CONNECTIONS, VIR_TYPED_PARAM_INT, \ VIR_MIGRATE_PARAM_TLS_DESTINATION, VIR_TYPED_PARAM_STRING, \ VIR_MIGRATE_PARAM_MIGRATIONPIN, VIR_TYPED_PARAM_STRING, \ + VIR_MIGRATE_PARAM_COMPRESSION_ALGORITHM, VIR_TYPED_PARAM_STRING, \ NULL diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c index 4001fb2b34..d1423ff4cf 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -109,6 +109,7 @@ VIR_ENUM_IMPL(qemuMigrationParam, "max-postcopy-bandwidth", "multifd-channels", "migrationpin", + "compress-method", ); typedef struct _qemuMigrationParamsAlwaysOnItem qemuMigrationParamsAlwaysOnItem; @@ -206,6 +207,10 @@ static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] = { {.typedParam = VIR_MIGRATE_PARAM_MIGRATIONPIN, .param = QEMU_MIGRATION_PARAM_MIGRATIONPIN, .party = QEMU_MIGRATION_SOURCE}, + + {.typedParam = VIR_MIGRATE_PARAM_COMPRESSION_ALGORITHM, + .param = QEMU_MIGRATION_PARAM_COMPRESS_METHOD, + .party = QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION}, }; static const qemuMigrationParamType qemuMigrationParamTypes[] = { @@ -223,6 +228,7 @@ static const qemuMigrationParamType qemuMigrationParamTypes[] = { [QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = QEMU_MIGRATION_PARAM_TYPE_ULL, [QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = QEMU_MIGRATION_PARAM_TYPE_INT, [QEMU_MIGRATION_PARAM_MIGRATIONPIN] = QEMU_MIGRATION_PARAM_TYPE_STRING, + [QEMU_MIGRATION_PARAM_COMPRESS_METHOD] = QEMU_MIGRATION_PARAM_TYPE_STRING, }; G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamTypes) == QEMU_MIGRATION_PARAM_LAST); @@ -516,7 +522,8 @@ qemuMigrationParamsSetCompression(virTypedParameterPtr params, if ((migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_LEVEL].set || migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_THREADS].set || - migParams->params[QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS].set) && + migParams->params[QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS].set || + migParams->params[QEMU_MIGRATION_PARAM_COMPRESS_METHOD].set) && !(migParams->compMethods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Turn multithread compression on to tune it")); diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h index f3deffb4cc..ae95723705 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -59,6 +59,7 @@ typedef enum { QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH, QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS, QEMU_MIGRATION_PARAM_MIGRATIONPIN, + QEMU_MIGRATION_PARAM_COMPRESS_METHOD, QEMU_MIGRATION_PARAM_LAST } qemuMigrationParam; diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 0d58775289..595a210493 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -10723,6 +10723,11 @@ static const vshCmdOptDef opts_migrate[] = { .type = VSH_OT_STRING, .help = N_("override the destination host name used for TLS verification") }, + {.name = "comp-algorithm", + .type = VSH_OT_STRING, + .help = N_("choose migration compression algorithm") + }, + {.name = NULL} }; @@ -10866,6 +10871,13 @@ doMigrate(void *opaque) goto save_error; } + if (vshCommandOptStringReq(ctl, cmd, "comp-algorithm", &opt) < 0) + goto out; + if (opt && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_MIGRATE_PARAM_COMPRESSION_ALGORITHM, opt) < 0) + goto save_error; + if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0) goto out; if (opt) { -- 2.25.1