live_migrate: virsh migrate command supports the zstd compression algorithm glibcompat: Provide implementation for G_GNUC_NO_INLINE Signed-off-by:mayunlong<mayunlong6@huawei.com>
138 lines
5.4 KiB
Diff
138 lines
5.4 KiB
Diff
From f098a118012a298516521b92c7c7ca844c868176 Mon Sep 17 00:00:00 2001
|
|
From: jipengfei <jipengfei_yewu@cmss.chinamobile.com>
|
|
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 <jipengfei_yewu@cmss.chinamobile.com>
|
|
---
|
|
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
|
|
|