All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryan Harper <ryanh@us.ibm.com>
To: xen-devel@lists.xensource.com
Cc: Ryan Grimm <grimm@us.ibm.com>
Subject: [PATCH] 6/7 xen: Add basic NUMA support - Physinfo nr_cpus
Date: Fri, 16 Dec 2005 17:13:28 -0600	[thread overview]
Message-ID: <20051216231328.GD18911@us.ibm.com> (raw)

This patch adds a new field to physinfo, nr_cpus, which previously has
been calculated by the following formula:

nr_cpus = nr_nodes * sockets_per_node * cores_per_socket * \
          threads_per_core

This formula makes an assumption about the symmetry of NUMA nodes.  For
instance, on my Dual Opteron, which is a two node system with one cpu in
each node, sockets_per_node is calculated as 2, but this is incorrect.
There isn't a single value for sockets per node, but rather, it should
be a list of values, which is generated by taking the Hamming weight of
each node's cpumask.

In Xen, there aren't a large number of uses for sockets_per_node other
than calculating the number of cpus booted in the hypervisor.  Instead
of dealing with making another array in physinfo, I've opted to add
nr_cpus which is based on num_online_cpus() and replaced all instances
of the nr_cpus formula with a reference to the proper nr_cpus value that
is now contained in the physinfo.

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253   T/L: 678-9253
ryanh@us.ibm.com


diffstat output:
 tools/python/xen/lowlevel/xc/xc.c |    3 ++-
 tools/python/xen/xend/XendNode.py |    4 ----
 tools/xenmon/xenbaked.c           |    5 +----
 tools/xentrace/xentrace.c         |    5 +----
 xen/arch/ia64/xen/dom0_ops.c      |    1 +
 xen/arch/x86/dom0_ops.c           |    1 +
 xen/include/public/dom0_ops.h     |    1 +
 7 files changed, 7 insertions(+), 13 deletions(-)

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
Signed-off-by: Ryan Grimm <grimm@us.ibm.com>
---
diff -r 398a0cdf3e31 -r f9779dd3e52b tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c	Fri Dec 16 17:02:16 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c	Fri Dec 16 17:47:48 2005
@@ -623,10 +623,11 @@
     if(q>cpu_cap)
         *(q-1)=0;
     
-    ret_obj = Py_BuildValue("{s:i,s:i,s:i,s:l,s:l,s:i,s:s}",
+    ret_obj = Py_BuildValue("{s:i,s:i,s:i,s:i,s:l,s:l,s:i,s:s}",
                          "threads_per_core", info.threads_per_core,
                          "cores_per_socket", info.cores_per_socket,
                          "sockets_per_node", info.sockets_per_node,
+                         "nr_cpus"         , info.nr_cpus,
                          "total_memory",     pages_to_mb(info.total_pages),
                          "free_memory",      pages_to_mb(info.free_pages),
                          "cpu_khz",          info.cpu_khz,
diff -r 398a0cdf3e31 -r f9779dd3e52b tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py	Fri Dec 16 17:02:16 2005
+++ b/tools/python/xen/xend/XendNode.py	Fri Dec 16 17:47:48 2005
@@ -122,10 +122,6 @@
     def physinfo(self):
         info = self.xc.physinfo()
 
-        info['nr_cpus'] = (info['nr_nodes'] *
-                           info['sockets_per_node'] *
-                           info['cores_per_socket'] *
-                           info['threads_per_core'])
         info['cpu_mhz'] = info['cpu_khz'] / 1000
         info['mem_chunks'] = self.format_memchunks(info)
         info['node_to_cpu'] = self.format_node_to_cpu(info)
diff -r 398a0cdf3e31 -r f9779dd3e52b tools/xenmon/xenbaked.c
--- a/tools/xenmon/xenbaked.c	Fri Dec 16 17:02:16 2005
+++ b/tools/xenmon/xenbaked.c	Fri Dec 16 17:47:48 2005
@@ -399,10 +399,7 @@
     xc_interface_close(xc_handle);
     opts.cpu_freq = (double)op.u.physinfo.cpu_khz/1000.0;
 
-    return (op.u.physinfo.threads_per_core *
-            op.u.physinfo.cores_per_socket *
-            op.u.physinfo.sockets_per_node *
-            op.u.physinfo.nr_nodes);
+    return op.u.physinfo.nr_cpus;
 }
 
 
diff -r 398a0cdf3e31 -r f9779dd3e52b tools/xentrace/xentrace.c
--- a/tools/xentrace/xentrace.c	Fri Dec 16 17:02:16 2005
+++ b/tools/xentrace/xentrace.c	Fri Dec 16 17:47:48 2005
@@ -277,10 +277,7 @@
 
     xc_interface_close(xc_handle);
 
-    return (op.u.physinfo.threads_per_core *
-            op.u.physinfo.cores_per_socket *
-            op.u.physinfo.sockets_per_node *
-            op.u.physinfo.nr_nodes);
+    return op.u.physinfo.nr_cpus;
 }
 
 
diff -r 398a0cdf3e31 -r f9779dd3e52b xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c	Fri Dec 16 17:02:16 2005
+++ b/xen/arch/ia64/xen/dom0_ops.c	Fri Dec 16 17:47:48 2005
@@ -204,6 +204,7 @@
         pi->sockets_per_node = 
             num_online_cpus() / (pi->threads_per_core * pi->cores_per_socket);
         pi->nr_nodes         = 1;
+        pi->nr_cpus          = (u32)num_online_cpus();
         pi->total_pages      = 99;  // FIXME
         pi->free_pages       = avail_domheap_pages();
         pi->cpu_khz          = 100;  // FIXME cpu_khz;
diff -r 398a0cdf3e31 -r f9779dd3e52b xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c	Fri Dec 16 17:02:16 2005
+++ b/xen/arch/x86/dom0_ops.c	Fri Dec 16 17:47:48 2005
@@ -188,6 +188,7 @@
         pi->cores_per_socket = boot_cpu_data.x86_num_cores;
         pi->sockets_per_node = 
             num_online_cpus() / (pi->threads_per_core * pi->cores_per_socket);
+        pi->nr_cpus          = (u32)num_online_cpus();
         pi->total_pages      = total_pages;
         pi->free_pages       = avail_domheap_pages();
         pi->cpu_khz          = cpu_khz;
diff -r 398a0cdf3e31 -r f9779dd3e52b xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h	Fri Dec 16 17:02:16 2005
+++ b/xen/include/public/dom0_ops.h	Fri Dec 16 17:47:48 2005
@@ -200,6 +200,7 @@
     uint32_t cores_per_socket;
     uint32_t sockets_per_node;
     uint32_t nr_nodes;
+    uint32_t nr_cpus;
     uint32_t cpu_khz;
     unsigned long total_pages;
     unsigned long free_pages;

                 reply	other threads:[~2005-12-16 23:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051216231328.GD18911@us.ibm.com \
    --to=ryanh@us.ibm.com \
    --cc=grimm@us.ibm.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.