[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/18] qapi: introduce x-query-numa QMP command
From: |
Daniel P . Berrangé |
Subject: |
[PULL 12/18] qapi: introduce x-query-numa QMP command |
Date: |
Tue, 2 Nov 2021 17:56:54 +0000 |
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>
---
hmp-commands-info.hx | 2 +-
hw/core/machine-hmp-cmds.c | 35 ---------------------------------
hw/core/machine-qmp-cmds.c | 40 ++++++++++++++++++++++++++++++++++++++
qapi/machine.json | 12 ++++++++++++
4 files changed, 53 insertions(+), 36 deletions(-)
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index 84c5e0da10..f66b1ca986 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -325,7 +325,7 @@ ERST
.args_type = "",
.params = "",
.help = "show NUMA information",
- .cmd = hmp_info_numa,
+ .cmd_info_hrt = qmp_x_query_numa,
},
SRST
diff --git a/hw/core/machine-hmp-cmds.c b/hw/core/machine-hmp-cmds.c
index c356783ab9..4e2f319aeb 100644
--- a/hw/core/machine-hmp-cmds.c
+++ b/hw/core/machine-hmp-cmds.c
@@ -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);
-}
diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index 216fdfaf3a..4f4ab30f8c 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -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);
+}
diff --git a/qapi/machine.json b/qapi/machine.json
index 73ff4bc168..3732f80a82 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -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:
#
--
2.31.1
- [PULL 02/18] monitor: make hmp_handle_error return a boolean, (continued)
- [PULL 02/18] monitor: make hmp_handle_error return a boolean, Daniel P . Berrangé, 2021/11/02
- [PULL 03/18] docs/devel: rename file for writing monitor commands, Daniel P . Berrangé, 2021/11/02
- [PULL 04/18] docs/devel: tweak headings in monitor command docs, Daniel P . Berrangé, 2021/11/02
- [PULL 05/18] docs/devel: update error handling guidance for HMP commands, Daniel P . Berrangé, 2021/11/02
- [PULL 06/18] monitor: introduce HumanReadableText and HMP support, Daniel P . Berrangé, 2021/11/02
- [PULL 07/18] docs/devel: document expectations for QAPI data modelling for QMP, Daniel P . Berrangé, 2021/11/02
- [PULL 08/18] docs/devel: add example of command returning unstructured text, Daniel P . Berrangé, 2021/11/02
- [PULL 09/18] docs/devel: document expectations for HMP commands in the future, Daniel P . Berrangé, 2021/11/02
- [PULL 10/18] qapi: introduce x-query-roms QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 11/18] qapi: introduce x-query-profile QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 12/18] qapi: introduce x-query-numa QMP command,
Daniel P . Berrangé <=
- [PULL 13/18] qapi: introduce x-query-usb QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 14/18] qapi: introduce x-query-rdma QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 15/18] qapi: introduce x-query-ramblock QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 16/18] qapi: introduce x-query-irq QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 17/18] qapi: introduce x-query-jit QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 18/18] qapi: introduce x-query-opcount QMP command, Daniel P . Berrangé, 2021/11/02
- Re: [PULL 00/18] HMP-to-QMP info command patches, Richard Henderson, 2021/11/03