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 | 19 +++++++++++++++++++ hmp.h | 1 + migration.c | 25 +++++++++++++++++++++++++ monitor.c | 7 +++++++ qapi-schema.json | 10 ++++++++++ qmp-commands.hx | 24 ++++++++++++++++++++++++ 7 files changed, 88 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 965c037..b321b15 100644 --- a/hmp.c +++ b/hmp.c @@ -246,6 +246,25 @@ 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; + + params = qmp_query_migrate_parameters(NULL); + + if (params) { + monitor_printf(mon, "parameters: "); + for (p = params; p; p = p->next) { + monitor_printf(mon, "%s: %d ", + MigrationParameter_lookup[p->value->parameter], + (int)p->value->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 bd1b203..471417c 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.c b/migration.c index d3d377e..f87aba3 100644 --- a/migration.c +++ b/migration.c @@ -179,6 +179,31 @@ 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(); + 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->parameter = i; + params->value->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 4cf62b6..6ab269f 100644 --- a/monitor.c +++ b/monitor.c @@ -2862,6 +2862,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 2caeccc..ccdb6b2 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -584,6 +584,16 @@ { '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 59d2643..986eb95 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -3248,6 +3248,30 @@ EQMP .mhandler.cmd_new = qmp_marshal_input_migrate_set_parameters, }, SQMP +query-migrate-parameters +------------------------ + +Query current migration parameters + +- "parameters": migration parameters value + - "compress-level" : compress level 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.8.3.1