Prints basic information about vNUMA topology
for vNUMA enabled domains when issuing debug-key ''u''.
Signed-off-by: Elena Ufimtseva <ufimtseva@gmail.com>
---
Changes since RFC v2:
- added check for no node mapping and displays it as -1;
- modified the output on per vnode basis;
---
xen/arch/x86/numa.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/xen/arch/x86/numa.c b/xen/arch/x86/numa.c
index b141877..c826b1b 100644
--- a/xen/arch/x86/numa.c
+++ b/xen/arch/x86/numa.c
@@ -347,7 +347,7 @@ EXPORT_SYMBOL(node_data);
static void dump_numa(unsigned char key)
{
s_time_t now = NOW();
- int i;
+ int i, j;
struct domain *d;
struct page_info *page;
unsigned int page_num_node[MAX_NUMNODES];
@@ -389,6 +389,24 @@ static void dump_numa(unsigned char key)
for_each_online_node(i)
printk(" Node %u: %u\n", i, page_num_node[i]);
+
+ if (d->vnuma.nr_vnodes > 0)
+ {
+ printk(" Domain has %d vnodes\n",
d->vnuma.nr_vnodes);
+ for(j = 0; j < d->vnuma.nr_vnodes; j++) {
+ printk(" vnode %d - pnode %d:", j,
+ d->vnuma.vnode_to_pnode[j] >
MAX_NUMNODES ?
+ -1 : d->vnuma.vnode_to_pnode[j]);
+ printk(" %Lu MB, \n", (unsigned long long)
+ (d->vnuma.vnuma_memblks[j].end -
+ d->vnuma.vnuma_memblks[j].start)
+ >> 20);
+ }
+ printk(" Domain vcpu to vnode: ");
+ for(j = 0; j < d->max_vcpus; j++)
+ printk("%d ", d->vnuma.vcpu_to_vnode[j]);
+ printk("\n");
+ }
}
rcu_read_unlock(&domlist_read_lock);
--
1.7.10.4
>>> On 17.10.13 at 00:40, Elena Ufimtseva <ufimtseva@gmail.com> wrote: > @@ -389,6 +389,24 @@ static void dump_numa(unsigned char key) > > for_each_online_node(i) > printk(" Node %u: %u\n", i, page_num_node[i]); > + > + if (d->vnuma.nr_vnodes > 0)The file/function so far uses tab indentation, and hence so should you.> + { > + printk(" Domain has %d vnodes\n", d->vnuma.nr_vnodes); > + for(j = 0; j < d->vnuma.nr_vnodes; j++) {Coding style. Also, what''s the point of using a new variable "j" here when the available "i" could be re-used?> + printk(" vnode %d - pnode %d:", j, > + d->vnuma.vnode_to_pnode[j] > MAX_NUMNODES ?Didn''t you mean >= ?> + -1 : d->vnuma.vnode_to_pnode[j]); > + printk(" %Lu MB, \n", (unsigned long long)%"PRIu64" and no cast please. And what''s the space good for immediately preceding the \n in the format string?> + (d->vnuma.vnuma_memblks[j].end - > + d->vnuma.vnuma_memblks[j].start) > + >> 20); > + } > + printk(" Domain vcpu to vnode: "); > + for(j = 0; j < d->max_vcpus; j++)Coding style again.> + printk("%d ", d->vnuma.vcpu_to_vnode[j]);So with a 64-vCPU guest I''m going to get an over 200 characters long line? Please properly wrap such potentially long output. Jan