Message ID | 1428474011-30797-14-git-send-email-liang.z.li@intel.com |
---|---|
State | New |
Headers | show |
Liang Li <liang.z.li@intel.com> wrote: > Add the qmp commands to tune and query the parameters used in live > migration. > > Signed-off-by: Liang Li <liang.z.li@intel.com> > Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> Eric, can you review this and the following patch? I think they are correct, but I preffer someone more versed on QMP to review them. Thanks, Juan.
> Eric, can you review this and the following patch? I think they are correct, but > I preffer someone more versed on QMP to review them. > > Thanks, Juan. Hi Juan & Eric, Since the latest QEMU is 2.3.0-rc2, is it possible to merge this serial of patches to QEMU 2.3? If it can't not, then I should change some version information in the .json file. Liang
"Li, Liang Z" <liang.z.li@intel.com> wrote: > >> Eric, can you review this and the following patch? I think they are correct, but >> I preffer someone more versed on QMP to review them. >> >> Thanks, Juan. > > Hi Juan & Eric, > > Since the latest QEMU is 2.3.0-rc2, is it possible to merge this > serial of patches to QEMU 2.3? > > If it can't not, then I should change some version information in the .json file. It looks like a too big change for -rc2, but it would be integrated at the buginning of 2.4.0. Later, Juan. > > Liang
On 04/08/2015 12:20 AM, Liang Li wrote: > Add the qmp commands to tune and query the parameters used in live > migration. > > Signed-off-by: Liang Li <liang.z.li@intel.com> > Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> > --- > migration/migration.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ > qapi-schema.json | 45 ++++++++++++++++++++++++++++++++++++++++ > qmp-commands.hx | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 158 insertions(+) > > +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", > + "is invalid, it should be in the range of 0 to 9"); > + return; > + } > + if (has_compress_threads && > + (compress_threads < 1 || compress_threads > 255)) { Indentation is unusual. > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, > + "compress_threads", > + "is invalid, it should be in the range of 1 to 255"); > + return; > + } > + if (has_decompress_threads && > + (decompress_threads < 1 || decompress_threads > 255)) { and again > +++ 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 2.4 > +## > +{ '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 2.4 > +## > +{ '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 2.4 > 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) Might be worth mentioning that on input, all three are optional; and omitting them leaves the value unchanged, so mentioning the default is also nice Minor enough that I'm okay if the maintainer fixes the release number and adds: Reviewed-by: Eric Blake <eblake@redhat.com>
On 04/14/2015 06:09 AM, Eric Blake wrote: > On 04/08/2015 12:20 AM, Liang Li wrote: >> Add the qmp commands to tune and query the parameters used in live >> migration. >> >> Signed-off-by: Liang Li <liang.z.li@intel.com> >> Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> >> --- >> migration/migration.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ >> qapi-schema.json | 45 ++++++++++++++++++++++++++++++++++++++++ >> qmp-commands.hx | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 158 insertions(+) >> + if (has_compress_level && (compress_level < 0 || compress_level > 9)) { >> + error_set(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level", >> + "is invalid, it should be in the range of 0 to 9"); All three error messages are bogus; this expands to: "Parameter 'compress_level' expects is invalid, it should be in the range of 0 to 9" > Minor enough that I'm okay if the maintainer fixes the release number > and adds: > Reviewed-by: Eric Blake <eblake@redhat.com> I'm no longer okay with this patch; you'll need a v8 that improves the error wording (QERR_ macros are seldom the right thing to use, you may be better off open-coding error_setg() and doing a sane message in place).
diff --git a/migration/migration.c b/migration/migration.c index 533717c..732d229 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", + "is invalid, it should be in the range of 0 to 9"); + return; + } + if (has_compress_threads && + (compress_threads < 1 || compress_threads > 255)) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, + "compress_threads", + "is invalid, it should be in the range of 1 to 255"); + return; + } + if (has_decompress_threads && + (decompress_threads < 1 || decompress_threads > 255)) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, + "decompress_threads", + "is invalid, it should be in the range of 1 to 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 e7e2343..92d1bba 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 -------------