Add the qmp and hmp commands to query the parameters used in live migration.
Signed-off-by: Liang Li <liang.z...@intel.com> Signed-off-by: Yang Zhang <yang.z.zh...@intel.com> --- hmp-commands.hx | 2 ++ hmp.c | 21 +++++++++++++++++++++ hmp.h | 1 + migration/migration.c | 27 +++++++++++++++++++++++++++ monitor.c | 7 +++++++ qapi-schema.json | 11 +++++++++++ qmp-commands.hx | 26 ++++++++++++++++++++++++++ 7 files changed, 95 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index 535b5ba..ed0c06a 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1779,6 +1779,8 @@ show user network stack connection states show migration status @item info migrate_capabilities show current migration capabilities +@item info migrate_parameters +show current migration parameters @item info migrate_cache_size show current migration XBZRLE cache size @item info balloon diff --git a/hmp.c b/hmp.c index faab4b0..33c95b3 100644 --- a/hmp.c +++ b/hmp.c @@ -246,6 +246,27 @@ void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict) qapi_free_MigrationCapabilityStatusList(caps); } +void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict) +{ + MigrationParameterStatusList *params, *p; + MigrationParameterInt *data; + + params = qmp_query_migrate_parameters(NULL); + + if (params) { + monitor_printf(mon, "parameters:"); + for (p = params; p; p = p->next) { + data = (MigrationParameterInt *)p->value->data; + monitor_printf(mon, " %s: %" PRId64, + MigrationParameter_lookup[p->value->kind], + data->value); + } + monitor_printf(mon, "\n"); + } + + qapi_free_MigrationParameterStatusList(params); +} + void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict) { monitor_printf(mon, "xbzrel cache size: %" PRId64 " kbytes\n", diff --git a/hmp.h b/hmp.h index 429efea..b2b2d2c 100644 --- a/hmp.h +++ b/hmp.h @@ -28,6 +28,7 @@ void hmp_info_chardev(Monitor *mon, const QDict *qdict); void hmp_info_mice(Monitor *mon, const QDict *qdict); void hmp_info_migrate(Monitor *mon, const QDict *qdict); void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict); +void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict); void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict); void hmp_info_cpus(Monitor *mon, const QDict *qdict); void hmp_info_block(Monitor *mon, const QDict *qdict); diff --git a/migration/migration.c b/migration/migration.c index b5055dc..f925130 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -179,6 +179,33 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp) return head; } +MigrationParameterStatusList *qmp_query_migrate_parameters(Error **errp) +{ + MigrationParameterStatusList *head = NULL; + MigrationParameterStatusList *params; + MigrationState *s = migrate_get_current(); + MigrationParameterInt *data; + int i; + + params = NULL; /* silence compiler warning */ + for (i = 0; i < MIGRATION_PARAMETER_MAX; i++) { + if (head == NULL) { + head = g_malloc0(sizeof(*params)); + params = head; + } else { + params->next = g_malloc0(sizeof(*params)); + params = params->next; + } + params->value = g_malloc(sizeof(*params->value)); + params->value->kind = i; + params->value->data = g_malloc(sizeof(MigrationParameterInt)); + data = (MigrationParameterInt *)params->value->data; + data->value = s->parameters[i]; + } + + return head; +} + static void get_xbzrle_cache_stats(MigrationInfo *info) { if (migrate_use_xbzrle()) { diff --git a/monitor.c b/monitor.c index fa8ebde..58dfa28 100644 --- a/monitor.c +++ b/monitor.c @@ -2872,6 +2872,13 @@ static mon_cmd_t info_cmds[] = { .mhandler.cmd = hmp_info_migrate_capabilities, }, { + .name = "migrate_parameters", + .args_type = "", + .params = "", + .help = "show current migration parameters", + .mhandler.cmd = hmp_info_migrate_parameters, + }, + { .name = "migrate_cache_size", .args_type = "", .params = "", diff --git a/qapi-schema.json b/qapi-schema.json index 273f991..af34f7f 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -593,6 +593,17 @@ { 'command': 'migrate-set-parameters', 'data': { 'parameters': ['MigrationParameterStatus'] } } ## +# @query-migrate-parameters +# +# Returns information about the current migration parameters status +# +# Returns: @MigrationParametersStatus +# +# Since: 2.3 +## +{ 'command': 'query-migrate-parameters', + 'returns': ['MigrationParameterStatus'] } +## ## # @MouseInfo: # diff --git a/qmp-commands.hx b/qmp-commands.hx index 9d16386..bcfe823 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -3303,6 +3303,32 @@ EQMP .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": [ { "value": 1, "parameter": "compress-level" } ] } + +EQMP + + { + .name = "query-migrate-parameters", + .args_type = "", + .mhandler.cmd_new = qmp_marshal_input_query_migrate_parameters, + }, + +SQMP query-balloon ------------- -- 1.9.1