Re: [libvirt] [PATCH v2 62/73] qemu: Set migration parameters automatically

2018-04-16 Thread Ján Tomko

On Wed, Apr 11, 2018 at 04:41:52PM +0200, Jiri Denemark wrote:

Most QEMU migration parameters directly correspond to
VIR_MIGRATE_PARAM_* typed parameters and qemuMigrationParamsFromFlags
can automatically set them according to a static mapping between libvirt
and QEMU parameters.

Signed-off-by: Jiri Denemark 
---
src/qemu/qemu_migration_params.c | 138 +++
1 file changed, 83 insertions(+), 55 deletions(-)



Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v2 62/73] qemu: Set migration parameters automatically

2018-04-15 Thread Jiri Denemark
Most QEMU migration parameters directly correspond to
VIR_MIGRATE_PARAM_* typed parameters and qemuMigrationParamsFromFlags
can automatically set them according to a static mapping between libvirt
and QEMU parameters.

Signed-off-by: Jiri Denemark 
---
 src/qemu/qemu_migration_params.c | 138 +++
 1 file changed, 83 insertions(+), 55 deletions(-)

diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index 3e131207a8..78ded83ee9 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -115,6 +115,13 @@ struct _qemuMigrationParamsFlagMapItem {
 int party; /* bit-wise OR of qemuMigrationParty */
 };
 
+typedef struct _qemuMigrationParamsTPMapItem qemuMigrationParamsTPMapItem;
+struct _qemuMigrationParamsTPMapItem {
+const char *typedParam;
+qemuMigrationParam param;
+int party; /* bit-wise OR of qemuMigrationParty */
+};
+
 /* Migration capabilities which should always be enabled as long as they
  * are supported by QEMU. If the capability is supposed to be enabled on both
  * sides of migration, it won't be enabled unless both sides support it.
@@ -139,6 +146,34 @@ static const qemuMigrationParamsFlagMapItem 
qemuMigrationParamsFlagMap[] = {
  QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
 };
 
+/* Translation from VIR_MIGRATE_PARAM_* typed parameters to
+ * qemuMigrationParams. */
+static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] = {
+{VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL,
+ QEMU_MIGRATION_PARAM_THROTTLE_INITIAL,
+ QEMU_MIGRATION_SOURCE},
+
+{VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT,
+ QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT,
+ QEMU_MIGRATION_SOURCE},
+
+{VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL,
+ QEMU_MIGRATION_PARAM_COMPRESS_LEVEL,
+ QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+
+{VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS,
+ QEMU_MIGRATION_PARAM_COMPRESS_THREADS,
+ QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+
+{VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS,
+ QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS,
+ QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+
+{VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE,
+ QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
+ QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
+};
+
 static const qemuMigrationParamType qemuMigrationParamTypes[] = {
 [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] = QEMU_MIGRATION_PARAM_TYPE_INT,
 [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] = QEMU_MIGRATION_PARAM_TYPE_INT,
@@ -361,30 +396,6 @@ qemuMigrationParamsSetCompression(virTypedParameterPtr 
params,
 ignore_value(virBitmapSetBit(migParams->caps, cap));
 }
 
-if (qemuMigrationParamsGetTPInt(migParams,
-QEMU_MIGRATION_PARAM_COMPRESS_LEVEL,
-params, nparams,
-VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL) < 
0)
-goto error;
-
-if (qemuMigrationParamsGetTPInt(migParams,
-QEMU_MIGRATION_PARAM_COMPRESS_THREADS,
-params, nparams,
-VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS) 
< 0)
-goto error;
-
-if (qemuMigrationParamsGetTPInt(migParams,
-QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS,
-params, nparams,
-VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS) 
< 0)
-goto error;
-
-if (qemuMigrationParamsGetTPULL(migParams,
-QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
-params, nparams,
-
VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE) < 0)
-goto error;
-
 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) &&
@@ -437,18 +448,32 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
 }
 }
 
-if (party == QEMU_MIGRATION_SOURCE) {
-if (qemuMigrationParamsGetTPInt(migParams,
-QEMU_MIGRATION_PARAM_THROTTLE_INITIAL,
-params, nparams,
-
VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL) < 0)
-goto error;
+for (i = 0; i < ARRAY_CARDINALITY(qemuMigrationParamsTPMap); i++) {
+const qemuMigrationParamsTPMapItem *item = 
[i];
 
-if (qemuMigrationParamsGetTPInt(migParams,
-
QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT,
-params, nparams,
-
VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT) < 0)
-