From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47416) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YrmMM-0007e0-M2 for qemu-devel@nongnu.org; Mon, 11 May 2015 07:58:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YrmMJ-0001gd-7Z for qemu-devel@nongnu.org; Mon, 11 May 2015 07:58:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60073) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YrmMJ-0001gQ-0u for qemu-devel@nongnu.org; Mon, 11 May 2015 07:58:55 -0400 Date: Mon, 11 May 2015 12:58:47 +0100 From: "Dr. David Alan Gilbert" Message-ID: <20150511115847.GC2152@work-vm> References: <1429089983-24644-1-git-send-email-liang.z.li@intel.com> <1429089983-24644-14-git-send-email-liang.z.li@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1429089983-24644-14-git-send-email-liang.z.li@intel.com> Subject: Re: [Qemu-devel] [v8 13/14] migration: Add qmp commands to set and query parameters List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Liang Li Cc: quintela@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com, lcapitulino@redhat.com, amit.shah@redhat.com, yang.z.zhang@intel.com, jdenemar@redhat.com * Liang Li (liang.z.li@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? Dave > > Signed-off-by: Liang Li > Signed-off-by: Yang Zhang > --- > 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 / dgilbert@redhat.com / Manchester, UK