Skip to content

Commit

Permalink
hmp: extend "info numa" with hotplugged memory information
Browse files Browse the repository at this point in the history
Report amount of hotplugged memory in addition to total
amount per NUMA node.

Signed-off-by: Vadim Galitsyn <vadim.galitsyn@profitbricks.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org
Message-Id: <20170829153022.27004-2-vadim.galitsyn@profitbricks.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
  • Loading branch information
vgalitsyn authored and dagrh committed Sep 14, 2017
1 parent 4e5c3a3 commit 31959e8
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 9 deletions.
1 change: 1 addition & 0 deletions include/qemu/typedefs.h
Expand Up @@ -58,6 +58,7 @@ typedef struct MSIMessage MSIMessage;
typedef struct NetClientState NetClientState;
typedef struct NetFilterState NetFilterState;
typedef struct NICInfo NICInfo;
typedef struct NumaNodeMem NumaNodeMem;
typedef struct PcGuestInfo PcGuestInfo;
typedef struct PCIBridge PCIBridge;
typedef struct PCIBus PCIBus;
Expand Down
7 changes: 6 additions & 1 deletion include/sysemu/numa.h
Expand Up @@ -24,9 +24,14 @@ struct node_info {
uint8_t distance[MAX_NODES];
};

struct NumaNodeMem {
uint64_t node_mem;
uint64_t node_plugged_mem;
};

extern NodeInfo numa_info[MAX_NODES];
void parse_numa_opts(MachineState *ms);
void query_numa_node_mem(uint64_t node_mem[]);
void query_numa_node_mem(NumaNodeMem node_mem[]);
extern QemuOptsList qemu_numa_opts;
void numa_set_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
void numa_unset_mem_node_id(ram_addr_t addr, uint64_t size, uint32_t node);
Expand Down
9 changes: 6 additions & 3 deletions monitor.c
Expand Up @@ -1710,11 +1710,12 @@ static void hmp_info_mtree(Monitor *mon, const QDict *qdict)
static void hmp_info_numa(Monitor *mon, const QDict *qdict)
{
int i;
uint64_t *node_mem;
NumaNodeMem *node_mem;
CpuInfoList *cpu_list, *cpu;

cpu_list = qmp_query_cpus(&error_abort);
node_mem = g_new0(uint64_t, nb_numa_nodes);
node_mem = g_new0(NumaNodeMem, nb_numa_nodes);

query_numa_node_mem(node_mem);
monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
for (i = 0; i < nb_numa_nodes; i++) {
Expand All @@ -1727,7 +1728,9 @@ static void hmp_info_numa(Monitor *mon, const QDict *qdict)
}
monitor_printf(mon, "\n");
monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
node_mem[i] >> 20);
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_CpuInfoList(cpu_list);
g_free(node_mem);
Expand Down
18 changes: 13 additions & 5 deletions numa.c
Expand Up @@ -591,21 +591,29 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
}
}

static void numa_stat_memory_devices(uint64_t node_mem[])
static void numa_stat_memory_devices(NumaNodeMem node_mem[])
{
MemoryDeviceInfoList *info_list = NULL;
MemoryDeviceInfoList **prev = &info_list;
MemoryDeviceInfoList *info;
PCDIMMDeviceInfo *pcdimm_info;

qmp_pc_dimm_device_list(qdev_get_machine(), &prev);
for (info = info_list; info; info = info->next) {
MemoryDeviceInfo *value = info->value;

if (value) {
switch (value->type) {
case MEMORY_DEVICE_INFO_KIND_DIMM:
node_mem[value->u.dimm.data->node] += value->u.dimm.data->size;
case MEMORY_DEVICE_INFO_KIND_DIMM: {
pcdimm_info = value->u.dimm.data;
node_mem[pcdimm_info->node].node_mem += pcdimm_info->size;
if (pcdimm_info->hotpluggable && pcdimm_info->hotplugged) {
node_mem[pcdimm_info->node].node_plugged_mem +=
pcdimm_info->size;
}
break;
}

default:
break;
}
Expand All @@ -614,7 +622,7 @@ static void numa_stat_memory_devices(uint64_t node_mem[])
qapi_free_MemoryDeviceInfoList(info_list);
}

void query_numa_node_mem(uint64_t node_mem[])
void query_numa_node_mem(NumaNodeMem node_mem[])
{
int i;

Expand All @@ -624,7 +632,7 @@ void query_numa_node_mem(uint64_t node_mem[])

numa_stat_memory_devices(node_mem);
for (i = 0; i < nb_numa_nodes; i++) {
node_mem[i] += numa_info[i].node_mem;
node_mem[i].node_mem += numa_info[i].node_mem;
}
}

Expand Down

0 comments on commit 31959e8

Please sign in to comment.