[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Replace sysctl.physinfo.sockets_per_node with more directly useful



# HG changeset patch
# User Keir Fraser <keir@xxxxxxxxxxxxx>
# Date 1192813210 -3600
# Node ID 6df47366830c577c7dccefc20b68d7df157f454d
# Parent  975811798ffef918968d8594ac6d0017c7cc5ab1
Replace sysctl.physinfo.sockets_per_node with more directly useful
sysctl.physinfo.nr_cpus. This also avoids miscalculation of
sockets_per_node by Xen where the number of CPUs in the system is
clipped.
From: Elizabeth Kon <eak@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 docs/man/xm.pod.1                          |    1 -
 tools/python/xen/lowlevel/xc/xc.c          |    2 +-
 tools/python/xen/xend/XendNode.py          |   11 +----------
 tools/python/xen/xm/main.py                |    3 +--
 tools/xenmon/xenbaked.c                    |    5 +----
 tools/xenstat/libxenstat/src/xenstat.c     |    4 +---
 tools/xentrace/xentrace.c                  |    5 +----
 tools/xm-test/lib/XmTestLib/Xm.py          |    8 +++-----
 tools/xm-test/lib/XmTestReport/OSReport.py |    1 -
 xen/arch/ia64/xen/dom0_ops.c               |   14 ++------------
 xen/arch/powerpc/sysctl.c                  |    4 +---
 xen/arch/x86/sysctl.c                      |    4 +---
 xen/include/public/sysctl.h                |    4 ++--
 13 files changed, 15 insertions(+), 51 deletions(-)

diff -r 975811798ffe -r 6df47366830c docs/man/xm.pod.1
--- a/docs/man/xm.pod.1 Fri Oct 19 17:47:12 2007 +0100
+++ b/docs/man/xm.pod.1 Fri Oct 19 18:00:10 2007 +0100
@@ -446,7 +446,6 @@ page more readable):
  machine                : i686
  nr_cpus                : 2
  nr_nodes               : 1
- sockets_per_node       : 2
  cores_per_socket       : 1
  threads_per_core       : 1
  cpu_mhz                : 696
diff -r 975811798ffe -r 6df47366830c tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/python/xen/lowlevel/xc/xc.c Fri Oct 19 18:00:10 2007 +0100
@@ -801,7 +801,7 @@ static PyObject *pyxc_physinfo(XcObject 
                             "max_cpu_id",       info.max_cpu_id,
                             "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_kib(info.total_pages),
                             "free_memory",      pages_to_kib(info.free_pages),
                             "scrub_memory",     pages_to_kib(info.scrub_pages),
diff -r 975811798ffe -r 6df47366830c tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/python/xen/xend/XendNode.py Fri Oct 19 18:00:10 2007 +0100
@@ -475,7 +475,7 @@ class XendNode:
 
         cpu_info = {
             "nr_nodes":         phys_info["nr_nodes"],
-            "sockets_per_node": phys_info["sockets_per_node"],
+            "nr_cpus":          phys_info["nr_cpus"],
             "cores_per_socket": phys_info["cores_per_socket"],
             "threads_per_core": phys_info["threads_per_core"]
             }
@@ -580,17 +580,9 @@ class XendNode:
             str='none\n'
         return str[:-1];
 
-    def count_cpus(self, pinfo):
-        count=0
-        node_to_cpu=pinfo['node_to_cpu']
-        for i in range(0, pinfo['nr_nodes']):
-            count+=len(node_to_cpu[i])
-        return count;
-
     def physinfo(self):
         info = self.xc.physinfo()
 
-        info['nr_cpus'] = self.count_cpus(info)
         info['cpu_mhz'] = info['cpu_khz'] / 1000
         
         # physinfo is in KiB, need it in MiB
@@ -600,7 +592,6 @@ class XendNode:
 
         ITEM_ORDER = ['nr_cpus',
                       'nr_nodes',
-                      'sockets_per_node',
                       'cores_per_socket',
                       'threads_per_core',
                       'cpu_mhz',
diff -r 975811798ffe -r 6df47366830c tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/python/xen/xm/main.py       Fri Oct 19 18:00:10 2007 +0100
@@ -1667,9 +1667,8 @@ def xm_info(args):
             "release":           getVal(["software_version", "release"]),
             "version":           getVal(["software_version", "version"]),
             "machine":           getVal(["software_version", "machine"]),
-            "nr_cpus":           len(getVal(["host_CPUs"], [])),
+            "nr_cpus":           getVal(["cpu_configuration", "nr_cpus"]),
             "nr_nodes":          getVal(["cpu_configuration", "nr_nodes"]),
-            "sockets_per_node":  getVal(["cpu_configuration", 
"sockets_per_node"]),
             "cores_per_socket":  getVal(["cpu_configuration", 
"cores_per_socket"]),
             "threads_per_core":  getVal(["cpu_configuration", 
"threads_per_core"]),
             "cpu_mhz":           getCpuMhz(),
diff -r 975811798ffe -r 6df47366830c tools/xenmon/xenbaked.c
--- a/tools/xenmon/xenbaked.c   Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/xenmon/xenbaked.c   Fri Oct 19 18:00:10 2007 +0100
@@ -460,10 +460,7 @@ unsigned int get_num_cpus(void)
     xc_interface_close(xc_handle);
     opts.cpu_freq = (double)physinfo.cpu_khz/1000.0;
 
-    return (physinfo.threads_per_core *
-            physinfo.cores_per_socket *
-            physinfo.sockets_per_node *
-            physinfo.nr_nodes);
+    return physinfo.nr_cpus;
 }
 
 
diff -r 975811798ffe -r 6df47366830c tools/xenstat/libxenstat/src/xenstat.c
--- a/tools/xenstat/libxenstat/src/xenstat.c    Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/xenstat/libxenstat/src/xenstat.c    Fri Oct 19 18:00:10 2007 +0100
@@ -155,9 +155,7 @@ xenstat_node *xenstat_get_node(xenstat_h
        }
 
        node->cpu_hz = ((unsigned long long)physinfo.cpu_khz) * 1000ULL;
-       node->num_cpus =
-           (physinfo.threads_per_core * physinfo.cores_per_socket *
-            physinfo.sockets_per_node * physinfo.nr_nodes);
+        node->num_cpus = physinfo.nr_cpus;
        node->tot_mem = ((unsigned long long)physinfo.total_pages)
            * handle->page_size;
        node->free_mem = ((unsigned long long)physinfo.free_pages)
diff -r 975811798ffe -r 6df47366830c tools/xentrace/xentrace.c
--- a/tools/xentrace/xentrace.c Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/xentrace/xentrace.c Fri Oct 19 18:00:10 2007 +0100
@@ -309,10 +309,7 @@ unsigned int get_num_cpus(void)
 
     xc_interface_close(xc_handle);
 
-    return (physinfo.threads_per_core *
-            physinfo.cores_per_socket *
-            physinfo.sockets_per_node *
-            physinfo.nr_nodes);
+    return physinfo.nr_cpus;
 }
 
 
diff -r 975811798ffe -r 6df47366830c tools/xm-test/lib/XmTestLib/Xm.py
--- a/tools/xm-test/lib/XmTestLib/Xm.py Fri Oct 19 17:47:12 2007 +0100
+++ b/tools/xm-test/lib/XmTestLib/Xm.py Fri Oct 19 18:00:10 2007 +0100
@@ -218,11 +218,9 @@ def restartXend():
         return status
 
 def smpConcurrencyLevel():
-    cores = int(getInfo("cores_per_socket"))
-    threads = int(getInfo("threads_per_core"))
-    sockets = int(getInfo("sockets_per_node"))
-
-    return cores * sockets * threads
+    nr_cpus = int(getInfo("nr_cpus"))
+
+    return nr_cpus
 
 if __name__ == "__main__":
     if isDomainRunning("0"):
diff -r 975811798ffe -r 6df47366830c tools/xm-test/lib/XmTestReport/OSReport.py
--- a/tools/xm-test/lib/XmTestReport/OSReport.py        Fri Oct 19 17:47:12 
2007 +0100
+++ b/tools/xm-test/lib/XmTestReport/OSReport.py        Fri Oct 19 18:00:10 
2007 +0100
@@ -92,7 +92,6 @@ class Machine:
 
         xenValues = {"nr_cpus"          : "Unknown",
                      "nr_nodes"         : "Unknown",
-                     "sockets_per_node" : "Unknown",
                      "cores_per_socket" : "Unknown",
                      "threads_per_core" : "Unknown",
                      "cpu_mhz"          : "Unknown",
diff -r 975811798ffe -r 6df47366830c xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c      Fri Oct 19 17:47:12 2007 +0100
+++ b/xen/arch/ia64/xen/dom0_ops.c      Fri Oct 19 18:00:10 2007 +0100
@@ -251,7 +251,7 @@ long arch_do_sysctl(xen_sysctl_t *op, XE
     {
     case XEN_SYSCTL_physinfo:
     {
-        int i, node_cpus = 0;
+        int i;
         uint32_t max_array_ent;
 
         xen_sysctl_physinfo_t *pi = &op->u.physinfo;
@@ -259,18 +259,8 @@ long arch_do_sysctl(xen_sysctl_t *op, XE
         pi->threads_per_core = cpus_weight(cpu_sibling_map[0]);
         pi->cores_per_socket =
             cpus_weight(cpu_core_map[0]) / pi->threads_per_core;
+        pi->nr_cpus          = (u32)num_online_cpus();
         pi->nr_nodes         = num_online_nodes();
-
-        /*
-         * Guess at a sockets_per_node value.  Use the maximum number of
-         * CPUs per node to avoid deconfigured CPUs breaking the average.
-         */
-        for_each_online_node(i)
-            node_cpus = max(node_cpus, cpus_weight(node_to_cpumask(i)));
-
-        pi->sockets_per_node = node_cpus / 
-            (pi->cores_per_socket * pi->threads_per_core);
-
         pi->total_pages      = total_pages; 
         pi->free_pages       = avail_domheap_pages();
         pi->scrub_pages      = avail_scrub_pages();
diff -r 975811798ffe -r 6df47366830c xen/arch/powerpc/sysctl.c
--- a/xen/arch/powerpc/sysctl.c Fri Oct 19 17:47:12 2007 +0100
+++ b/xen/arch/powerpc/sysctl.c Fri Oct 19 18:00:10 2007 +0100
@@ -45,9 +45,7 @@ long arch_do_sysctl(struct xen_sysctl *s
             cpus_weight(cpu_sibling_map[0]);
         pi->cores_per_socket =
             cpus_weight(cpu_core_map[0]) / pi->threads_per_core;
-        pi->sockets_per_node = num_online_cpus() / 
-            (num_online_nodes() * pi->cores_per_socket * pi->threads_per_core);
-
+        pi->nr_cpus          = (u32)num_online_cpus();
         pi->nr_nodes         = num_online_nodes();
         pi->total_pages      = total_pages;
         pi->free_pages       = avail_domheap_pages();
diff -r 975811798ffe -r 6df47366830c xen/arch/x86/sysctl.c
--- a/xen/arch/x86/sysctl.c     Fri Oct 19 17:47:12 2007 +0100
+++ b/xen/arch/x86/sysctl.c     Fri Oct 19 18:00:10 2007 +0100
@@ -51,10 +51,8 @@ long arch_do_sysctl(
             cpus_weight(cpu_sibling_map[0]);
         pi->cores_per_socket =
             cpus_weight(cpu_core_map[0]) / pi->threads_per_core;
+        pi->nr_cpus = (u32)num_online_cpus();
         pi->nr_nodes = num_online_nodes();
-        pi->sockets_per_node = num_online_cpus() / 
-            (pi->nr_nodes * pi->cores_per_socket * pi->threads_per_core);
-
         pi->total_pages      = total_pages;
         pi->free_pages       = avail_domheap_pages();
         pi->scrub_pages      = avail_scrub_pages();
diff -r 975811798ffe -r 6df47366830c xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h       Fri Oct 19 17:47:12 2007 +0100
+++ b/xen/include/public/sysctl.h       Fri Oct 19 18:00:10 2007 +0100
@@ -34,7 +34,7 @@
 #include "xen.h"
 #include "domctl.h"
 
-#define XEN_SYSCTL_INTERFACE_VERSION 0x00000004
+#define XEN_SYSCTL_INTERFACE_VERSION 0x00000005
 
 /*
  * Read console content from Xen buffer ring.
@@ -79,7 +79,7 @@ struct xen_sysctl_physinfo {
     /* IN variables. */
     uint32_t threads_per_core;
     uint32_t cores_per_socket;
-    uint32_t sockets_per_node;
+    uint32_t nr_cpus;
     uint32_t nr_nodes;
     uint32_t cpu_khz;
     uint64_aligned_t total_pages;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.