diff options
author | Keir Fraser <keir@xensource.com> | 2007-10-19 18:00:10 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-10-19 18:00:10 +0100 |
commit | 07f557cb63359808a29d14b2359f5c9c3e2c4973 (patch) | |
tree | 80354b497066ccea8b09834658d49d9a76ff7fed | |
parent | f475a034a7560a64416f9fde0f035b74ef3ac2ea (diff) | |
download | xen-07f557cb63359808a29d14b2359f5c9c3e2c4973.tar.gz xen-07f557cb63359808a29d14b2359f5c9c3e2c4973.tar.bz2 xen-07f557cb63359808a29d14b2359f5c9c3e2c4973.zip |
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@us.ibm.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r-- | docs/man/xm.pod.1 | 1 | ||||
-rw-r--r-- | tools/python/xen/lowlevel/xc/xc.c | 2 | ||||
-rw-r--r-- | tools/python/xen/xend/XendNode.py | 11 | ||||
-rw-r--r-- | tools/python/xen/xm/main.py | 3 | ||||
-rw-r--r-- | tools/xenmon/xenbaked.c | 5 | ||||
-rw-r--r-- | tools/xenstat/libxenstat/src/xenstat.c | 4 | ||||
-rw-r--r-- | tools/xentrace/xentrace.c | 5 | ||||
-rw-r--r-- | tools/xm-test/lib/XmTestLib/Xm.py | 6 | ||||
-rw-r--r-- | tools/xm-test/lib/XmTestReport/OSReport.py | 1 | ||||
-rw-r--r-- | xen/arch/ia64/xen/dom0_ops.c | 14 | ||||
-rw-r--r-- | xen/arch/powerpc/sysctl.c | 4 | ||||
-rw-r--r-- | xen/arch/x86/sysctl.c | 4 | ||||
-rw-r--r-- | xen/include/public/sysctl.h | 4 |
13 files changed, 14 insertions, 50 deletions
diff --git a/docs/man/xm.pod.1 b/docs/man/xm.pod.1 index 602993342c..72932dee93 100644 --- a/docs/man/xm.pod.1 +++ b/docs/man/xm.pod.1 @@ -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 --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c index 07dd574c58..5716dbf2ec 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -801,7 +801,7 @@ static PyObject *pyxc_physinfo(XcObject *self) "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 --git a/tools/python/xen/xend/XendNode.py b/tools/python/xen/xend/XendNode.py index 969c72dbc7..cde65142f1 100644 --- a/tools/python/xen/xend/XendNode.py +++ b/tools/python/xen/xend/XendNode.py @@ -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 --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index f728b858ab..929f7c1c1e 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -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 --git a/tools/xenmon/xenbaked.c b/tools/xenmon/xenbaked.c index 35bc8a89e2..afca2f2168 100644 --- a/tools/xenmon/xenbaked.c +++ b/tools/xenmon/xenbaked.c @@ -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 --git a/tools/xenstat/libxenstat/src/xenstat.c b/tools/xenstat/libxenstat/src/xenstat.c index 461806ec7d..559fb9bec6 100644 --- a/tools/xenstat/libxenstat/src/xenstat.c +++ b/tools/xenstat/libxenstat/src/xenstat.c @@ -155,9 +155,7 @@ xenstat_node *xenstat_get_node(xenstat_handle * handle, unsigned int flags) } 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 --git a/tools/xentrace/xentrace.c b/tools/xentrace/xentrace.c index fdb5d5e57f..17df72fe9d 100644 --- a/tools/xentrace/xentrace.c +++ b/tools/xentrace/xentrace.c @@ -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 --git a/tools/xm-test/lib/XmTestLib/Xm.py b/tools/xm-test/lib/XmTestLib/Xm.py index 6f1e33c153..6eeab7bb9d 100644 --- a/tools/xm-test/lib/XmTestLib/Xm.py +++ b/tools/xm-test/lib/XmTestLib/Xm.py @@ -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")) + nr_cpus = int(getInfo("nr_cpus")) - return cores * sockets * threads + return nr_cpus if __name__ == "__main__": if isDomainRunning("0"): diff --git a/tools/xm-test/lib/XmTestReport/OSReport.py b/tools/xm-test/lib/XmTestReport/OSReport.py index 80bb4bed53..4eaa20cae9 100644 --- a/tools/xm-test/lib/XmTestReport/OSReport.py +++ b/tools/xm-test/lib/XmTestReport/OSReport.py @@ -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 --git a/xen/arch/ia64/xen/dom0_ops.c b/xen/arch/ia64/xen/dom0_ops.c index 4f683561e2..b92e51ba0e 100644 --- a/xen/arch/ia64/xen/dom0_ops.c +++ b/xen/arch/ia64/xen/dom0_ops.c @@ -251,7 +251,7 @@ long arch_do_sysctl(xen_sysctl_t *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) { 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, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) 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 --git a/xen/arch/powerpc/sysctl.c b/xen/arch/powerpc/sysctl.c index cc1e23181a..b211d4f9f7 100644 --- a/xen/arch/powerpc/sysctl.c +++ b/xen/arch/powerpc/sysctl.c @@ -45,9 +45,7 @@ long arch_do_sysctl(struct xen_sysctl *sysctl, 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 --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c index e518d4ce49..db94bfd812 100644 --- a/xen/arch/x86/sysctl.c +++ b/xen/arch/x86/sysctl.c @@ -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 --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 1088a275e0..5e4ad0b01a 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -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; |