* Li, Liang Z (liang.z...@intel.com) wrote: > > > > * 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.
Great; I look forward to trying it. Dave > > 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 -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK