[libvirt] [PATCH 5/5] capabilities: Add additional data to the NUMA topology info
Daniel P. Berrange
berrange at redhat.com
Tue Jan 22 17:09:05 UTC 2013
On Sat, Jan 19, 2013 at 12:06:42AM +0100, Peter Krempa wrote:
> This patch adds data gathering to the NUMA gathering files and adds
> support for outputting the data. The test driver and xend driver need to
> be adapted to fill sensible data to the structure.
> ---
> src/conf/capabilities.c | 14 +++++++++++--
> src/nodeinfo.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++---
> src/test/test_driver.c | 3 +++
> src/xen/xend_internal.c | 3 +++
> 4 files changed, 70 insertions(+), 5 deletions(-)
>
> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
> index 814c4d6..49eb0a7 100644
> --- a/src/conf/capabilities.c
> +++ b/src/conf/capabilities.c
> @@ -698,9 +698,19 @@ virCapabilitiesFormatNUMATopology(virBufferPtr xml,
> for (i = 0; i < ncells; i++) {
> virBufferAsprintf(xml, " <cell id='%d'>\n", cells[i]->num);
> virBufferAsprintf(xml, " <cpus num='%d'>\n", cells[i]->ncpus);
> - for (j = 0; j < cells[i]->ncpus; j++)
> - virBufferAsprintf(xml, " <cpu id='%d'/>\n",
> + for (j = 0; j < cells[i]->ncpus; j++) {
> + virBufferAsprintf(xml, " <cpu id='%d'",
> cells[i]->cpus[j].id);
> + if (cells[i]->cpus[j].core_id >= 0 &&
> + cells[i]->cpus[j].socket_id >= 0 &&
> + cells[i]->cpus[j].siblings_list)
> + virBufferAsprintf(xml, " socket_id='%d' core_id='%d' siblings='%s'",
> + cells[i]->cpus[j].socket_id,
> + cells[i]->cpus[j].core_id,
> + cells[i]->cpus[j].siblings_list);
> + virBufferAddLit(xml, "/>\n");
> + }
> +
> virBufferAddLit(xml, " </cpus>\n");
> virBufferAddLit(xml, " </cell>\n");
> }
> diff --git a/src/nodeinfo.c b/src/nodeinfo.c
> index dffe7d1..ec20609 100644
> --- a/src/nodeinfo.c
> +++ b/src/nodeinfo.c
> @@ -1472,6 +1472,52 @@ cleanup:
> # define MASK_CPU_ISSET(mask, cpu) \
> (((mask)[((cpu) / n_bits(*(mask)))] >> ((cpu) % n_bits(*(mask)))) & 1)
>
> +static char *
> +virNodeGetSiblingsList(const char *dir, int cpu_id)
Make this return a virBitmapPtr
> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index 6909fa4..7693f75 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -559,6 +559,9 @@ static int testOpenDefault(virConnectPtr conn) {
> }
> for (u = 0 ; u < 16 ; u++) {
> privconn->cells[u % 2].cpus[(u / 2)].id = u;
> + privconn->cells[u % 2].cpus[(u / 2)].socket_id = -1;
> + privconn->cells[u % 2].cpus[(u / 2)].core_id = -1;
> + privconn->cells[u % 2].cpus[(u / 2)].siblings_list = NULL;
> }
We should be able to fill in proper data here - after all in the
test driver we can invent whatever data is required.
>
> if (!(privconn->caps = testBuildCapabilities(conn)))
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index d39d0b1..bfb02f7 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1161,6 +1161,9 @@ sexpr_to_xend_topology(const struct sexpr *root,
> ignore_value(virBitmapGetBit(cpuset, cpu, &used));
> if (used) {
> cpuInfo[n].id = cpu;
> + cpuInfo[n].core_id = -1;
> + cpuInfo[n].socket_id = -1;
> + cpuInfo[n].siblings_list = NULL;
> n++;
Xen's nodeinfo provides data about the number of cores/sockets/threads
which could be used to populate this data correctly.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list