mirror of
https://github.com/xemu-project/xemu.git
synced 2025-04-02 11:11:48 -04:00
qapi: introduce x-query-numa QMP command
This is a counterpart to the HMP "info numa" command. It is being added with an "x-" prefix because this QMP command is intended as an adhoc debugging tool and will thus not be modelled in QAPI as fully structured data, nor will it have long term guaranteed stability. The existing HMP command is rewritten to call the QMP command. Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
37087fde0e
commit
1b8ae799d8
4 changed files with 53 additions and 36 deletions
|
@ -325,7 +325,7 @@ ERST
|
|||
.args_type = "",
|
||||
.params = "",
|
||||
.help = "show NUMA information",
|
||||
.cmd = hmp_info_numa,
|
||||
.cmd_info_hrt = qmp_x_query_numa,
|
||||
},
|
||||
|
||||
SRST
|
||||
|
|
|
@ -130,38 +130,3 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
|
|||
qapi_free_MemdevList(memdev_list);
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
void hmp_info_numa(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
int i, nb_numa_nodes;
|
||||
NumaNodeMem *node_mem;
|
||||
CpuInfoFastList *cpu_list, *cpu;
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
|
||||
nb_numa_nodes = ms->numa_state ? ms->numa_state->num_nodes : 0;
|
||||
monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
|
||||
if (!nb_numa_nodes) {
|
||||
return;
|
||||
}
|
||||
|
||||
cpu_list = qmp_query_cpus_fast(&error_abort);
|
||||
node_mem = g_new0(NumaNodeMem, nb_numa_nodes);
|
||||
|
||||
query_numa_node_mem(node_mem, ms);
|
||||
for (i = 0; i < nb_numa_nodes; i++) {
|
||||
monitor_printf(mon, "node %d cpus:", i);
|
||||
for (cpu = cpu_list; cpu; cpu = cpu->next) {
|
||||
if (cpu->value->has_props && cpu->value->props->has_node_id &&
|
||||
cpu->value->props->node_id == i) {
|
||||
monitor_printf(mon, " %" PRIi64, cpu->value->cpu_index);
|
||||
}
|
||||
}
|
||||
monitor_printf(mon, "\n");
|
||||
monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
|
||||
node_mem[i].node_mem >> 20);
|
||||
monitor_printf(mon, "node %d plugged: %" PRId64 " MB\n", i,
|
||||
node_mem[i].node_plugged_mem >> 20);
|
||||
}
|
||||
qapi_free_CpuInfoFastList(cpu_list);
|
||||
g_free(node_mem);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/qmp/qobject.h"
|
||||
#include "qapi/qobject-input-visitor.h"
|
||||
#include "qapi/type-helpers.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qom/qom-qobject.h"
|
||||
#include "sysemu/hostmem.h"
|
||||
|
@ -204,3 +205,42 @@ MemdevList *qmp_query_memdev(Error **errp)
|
|||
object_child_foreach(obj, query_memdev, &list);
|
||||
return list;
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_numa(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = g_string_new("");
|
||||
int i, nb_numa_nodes;
|
||||
NumaNodeMem *node_mem;
|
||||
CpuInfoFastList *cpu_list, *cpu;
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
|
||||
nb_numa_nodes = ms->numa_state ? ms->numa_state->num_nodes : 0;
|
||||
g_string_append_printf(buf, "%d nodes\n", nb_numa_nodes);
|
||||
if (!nb_numa_nodes) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
cpu_list = qmp_query_cpus_fast(&error_abort);
|
||||
node_mem = g_new0(NumaNodeMem, nb_numa_nodes);
|
||||
|
||||
query_numa_node_mem(node_mem, ms);
|
||||
for (i = 0; i < nb_numa_nodes; i++) {
|
||||
g_string_append_printf(buf, "node %d cpus:", i);
|
||||
for (cpu = cpu_list; cpu; cpu = cpu->next) {
|
||||
if (cpu->value->has_props && cpu->value->props->has_node_id &&
|
||||
cpu->value->props->node_id == i) {
|
||||
g_string_append_printf(buf, " %" PRIi64, cpu->value->cpu_index);
|
||||
}
|
||||
}
|
||||
g_string_append_printf(buf, "\n");
|
||||
g_string_append_printf(buf, "node %d size: %" PRId64 " MB\n", i,
|
||||
node_mem[i].node_mem >> 20);
|
||||
g_string_append_printf(buf, "node %d plugged: %" PRId64 " MB\n", i,
|
||||
node_mem[i].node_plugged_mem >> 20);
|
||||
}
|
||||
qapi_free_CpuInfoFastList(cpu_list);
|
||||
g_free(node_mem);
|
||||
|
||||
done:
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
|
|
@ -1412,6 +1412,18 @@
|
|||
'*threads': 'int',
|
||||
'*maxcpus': 'int' } }
|
||||
|
||||
##
|
||||
# @x-query-numa:
|
||||
#
|
||||
# Query NUMA topology information
|
||||
#
|
||||
# Returns: topology information
|
||||
#
|
||||
# Since: 6.2
|
||||
##
|
||||
{ 'command': 'x-query-numa',
|
||||
'returns': 'HumanReadableText' }
|
||||
|
||||
##
|
||||
# @x-query-profile:
|
||||
#
|
||||
|
|
Loading…
Add table
Reference in a new issue