> > * Liang Li (liang.z...@intel.com) wrote: > > Add the qmp commands to tune and query the parameters used in live > > migration. > > Hi, > Do you know if there's anyone working on libvirt code to drive this > interface > and turn on your compression code? >
Yes, I have confirmed that one person of Intel are working on this. Liang > Dave > > > > > Signed-off-by: Liang Li <liang.z...@intel.com> > > Signed-off-by: Yang Zhang <yang.z.zh...@intel.com> > > --- > > migration/migration.c | 56 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > > qapi-schema.json | 45 > ++++++++++++++++++++++++++++++++++++++++ > > qmp-commands.hx | 57 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > > 3 files changed, 158 insertions(+) > > > > diff --git a/migration/migration.c b/migration/migration.c index > > 533717c..8732803 100644 > > --- a/migration/migration.c > > +++ b/migration/migration.c > > @@ -188,6 +188,21 @@ MigrationCapabilityStatusList > *qmp_query_migrate_capabilities(Error **errp) > > return head; > > } > > > > +MigrationParameters *qmp_query_migrate_parameters(Error **errp) { > > + MigrationParameters *params; > > + MigrationState *s = migrate_get_current(); > > + > > + params = g_malloc0(sizeof(*params)); > > + params->compress_level = s- > >parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL]; > > + params->compress_threads = > > + s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS]; > > + params->decompress_threads = > > + s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS]; > > + > > + return params; > > +} > > + > > static void get_xbzrle_cache_stats(MigrationInfo *info) { > > if (migrate_use_xbzrle()) { > > @@ -301,6 +316,47 @@ void > qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, > > } > > } > > > > +void qmp_migrate_set_parameters(bool has_compress_level, > > + int64_t compress_level, > > + bool has_compress_threads, > > + int64_t compress_threads, > > + bool has_decompress_threads, > > + int64_t decompress_threads, Error > > +**errp) { > > + MigrationState *s = migrate_get_current(); > > + > > + if (has_compress_level && (compress_level < 0 || compress_level > 9)) > { > > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, > "compress_level", > > + "a value in range [0, 9]"); > > + return; > > + } > > + if (has_compress_threads && > > + (compress_threads < 1 || compress_threads > 255)) { > > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, > > + "compress_threads", > > + "a value in range [1, 255]"); > > + return; > > + } > > + if (has_decompress_threads && > > + (decompress_threads < 1 || decompress_threads > 255)) { > > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, > > + "decompress_threads", > > + "a value in range [1, 255]"); > > + return; > > + } > > + > > + if (has_compress_level) { > > + s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL] = > compress_level; > > + } > > + if (has_compress_threads) { > > + s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS] = > compress_threads; > > + } > > + if (has_decompress_threads) { > > + s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS] = > > + decompress_threads; > > + } > > +} > > + > > /* shared migration helpers */ > > > > static void migrate_set_state(MigrationState *s, int old_state, int > > new_state) diff --git a/qapi-schema.json b/qapi-schema.json index > > 121fcc7..579801b 100644 > > --- a/qapi-schema.json > > +++ b/qapi-schema.json > > @@ -592,6 +592,51 @@ > > { 'enum': 'MigrationParameter', > > 'data': ['compress-level', 'compress-threads', > > 'decompress-threads'] } > > > > +# > > +# @migrate-set-parameters > > +# > > +# Set the following migration parameters # # @compress-level: > > +compression level # # @compress-threads: compression thread count # # > > +@decompress-threads: decompression thread count # # Since: 2.3 ## { > > +'command': 'migrate-set-parameters', > > + 'data': { '*compress-level': 'int', > > + '*compress-threads': 'int', > > + '*decompress-threads': 'int'} } > > + > > +# > > +# @MigrationParameters > > +# > > +# @compress-level: compression level > > +# > > +# @compress-threads: compression thread count # # > > +@decompress-threads: decompression thread count # # Since: 2.3 ## { > > +'type': 'MigrationParameters', > > + 'data': { 'compress-level': 'int', > > + 'compress-threads': 'int', > > + 'decompress-threads': 'int'} } ## # > > +@query-migrate-parameters # # Returns information about the current > > +migration parameters # # Returns: @MigrationParameters # # Since: 2.3 > > +## { 'command': 'query-migrate-parameters', > > + 'returns': 'MigrationParameters' } > > + > > ## > > # @MouseInfo: > > # > > diff --git a/qmp-commands.hx b/qmp-commands.hx index > 3a42ad0..8fcf5a8 > > 100644 > > --- a/qmp-commands.hx > > +++ b/qmp-commands.hx > > @@ -3320,6 +3320,63 @@ EQMP > > }, > > > > SQMP > > +migrate-set-parameters > > +---------------------- > > + > > +Set migration parameters > > + > > +- "compress-level": set compression level during migration (json-int) > > +- "compress-threads": set compression thread count for migration > > +(json-int) > > +- "decompress-threads": set decompression thread count for migration > > +(json-int) > > + > > +Arguments: > > + > > +Example: > > + > > +-> { "execute": "migrate-set-parameters" , "arguments": > > + { "compress-level": 1 } } > > + > > +EQMP > > + > > + { > > + .name = "migrate-set-parameters", > > + .args_type = > > + "compress-level:i?,compress-threads:i?,decompress-threads:i?", > > + .mhandler.cmd_new = > qmp_marshal_input_migrate_set_parameters, > > + }, > > +SQMP > > +query-migrate-parameters > > +------------------------ > > + > > +Query current migration parameters > > + > > +- "parameters": migration parameters value > > + - "compress-level" : compression level value (json-int) > > + - "compress-threads" : compression thread count value (json-int) > > + - "decompress-threads" : decompression thread count value > > +(json-int) > > + > > +Arguments: > > + > > +Example: > > + > > +-> { "execute": "query-migrate-parameters" } > > +<- { > > + "return": { > > + "decompress-threads", 2, > > + "compress-threads", 8, > > + "compress-level", 1 > > + } > > + } > > + > > +EQMP > > + > > + { > > + .name = "query-migrate-parameters", > > + .args_type = "", > > + .mhandler.cmd_new = > qmp_marshal_input_query_migrate_parameters, > > + }, > > + > > +SQMP > > query-balloon > > ------------- > > > > -- > > 1.9.1 > > > > > -- > Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK