qemu: Decouple migration parameters from compression settings

Compression parameters are not the only migration parameters.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Jiri Denemark 2016-06-20 15:47:28 +02:00
parent 5a235947c2
commit dbcbc86648
2 changed files with 36 additions and 25 deletions

View File

@ -3436,7 +3436,7 @@ qemuMigrationSetCompression(virQEMUDriverPtr driver,
{
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
qemuMonitorMigrationCompressionPtr params = &compression->params;
qemuMonitorMigrationCompression params = { 0 };
if (qemuMigrationSetOption(driver, vm,
QEMU_MONITOR_MIGRATION_CAPS_XBZRLE,
@ -3455,7 +3455,16 @@ qemuMigrationSetCompression(virQEMUDriverPtr driver,
if (qemuDomainObjEnterMonitorAsync(driver, vm, job) < 0)
return -1;
if (qemuMonitorSetMigrationCompression(priv->mon, params) < 0)
params.level_set = compression->level_set;
params.level = compression->level;
params.threads_set = compression->threads_set;
params.threads = compression->threads;
params.dthreads_set = compression->dthreads_set;
params.dthreads = compression->dthreads;
if (qemuMonitorSetMigrationCompression(priv->mon, &params) < 0)
goto cleanup;
if (compression->xbzrle_cache_set &&
@ -6684,7 +6693,6 @@ qemuMigrationCompressionParse(virTypedParameterPtr params,
{
size_t i;
qemuMigrationCompressionPtr compression = NULL;
qemuMonitorMigrationCompressionPtr cparams;
if (VIR_ALLOC(compression) < 0)
return NULL;
@ -6713,34 +6721,31 @@ qemuMigrationCompressionParse(virTypedParameterPtr params,
compression->methods |= 1ULL << method;
}
#define GET_PARAM(PARAM, TYPE, PARENT, VALUE) \
#define GET_PARAM(PARAM, TYPE, VALUE) \
do { \
int rc; \
const char *par = VIR_MIGRATE_PARAM_COMPRESSION_ ## PARAM; \
\
if ((rc = virTypedParamsGet ## TYPE(params, nparams, \
PARAM, &PARENT->VALUE)) < 0) \
par, &compression->VALUE)) < 0) \
goto error; \
\
if (rc == 1) \
PARENT->VALUE ## _set = true; \
compression->VALUE ## _set = true; \
} while (0)
cparams = &compression->params;
if (params) {
GET_PARAM(VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, Int,
cparams, level);
GET_PARAM(VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, Int,
cparams, threads);
GET_PARAM(VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, Int,
cparams, dthreads);
GET_PARAM(VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, ULLong,
compression, xbzrle_cache);
GET_PARAM(MT_LEVEL, Int, level);
GET_PARAM(MT_THREADS, Int, threads);
GET_PARAM(MT_DTHREADS, Int, dthreads);
GET_PARAM(XBZRLE_CACHE, ULLong, xbzrle_cache);
}
#undef GET_PARAM
if ((cparams->level_set || cparams->threads_set || cparams->dthreads_set) &&
if ((compression->level_set ||
compression->threads_set ||
compression->dthreads_set) &&
!(compression->methods & (1ULL << QEMU_MIGRATION_COMPRESS_MT))) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Turn multithread compression on to tune it"));
@ -6772,7 +6777,6 @@ qemuMigrationCompressionDump(qemuMigrationCompressionPtr compression,
unsigned long *flags)
{
size_t i;
qemuMonitorMigrationCompressionPtr cparams = &compression->params;
if (compression->methods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
!compression->xbzrle_cache_set) {
@ -6788,22 +6792,22 @@ qemuMigrationCompressionDump(qemuMigrationCompressionPtr compression,
return -1;
}
if (cparams->level_set &&
if (compression->level_set &&
virTypedParamsAddInt(params, nparams, maxparams,
VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL,
cparams->level) < 0)
compression->level) < 0)
return -1;
if (cparams->threads_set &&
if (compression->threads_set &&
virTypedParamsAddInt(params, nparams, maxparams,
VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS,
cparams->threads) < 0)
compression->threads) < 0)
return -1;
if (cparams->dthreads_set &&
if (compression->dthreads_set &&
virTypedParamsAddInt(params, nparams, maxparams,
VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS,
cparams->dthreads) < 0)
compression->dthreads) < 0)
return -1;
if (compression->xbzrle_cache_set &&

View File

@ -95,7 +95,14 @@ VIR_ENUM_DECL(qemuMigrationCompressMethod)
struct _qemuMigrationCompression {
unsigned long long methods;
qemuMonitorMigrationCompression params;
bool level_set;
int level;
bool threads_set;
int threads;
bool dthreads_set;
int dthreads;
bool xbzrle_cache_set;
unsigned long long xbzrle_cache;