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

Re: [Xen-devel] [PATCH] changeset 8831 gets sockets, cores, and siblings wrong



Keir Fraser wrote:

On 15 Feb 2006, at 21:21, Andrew Theurer wrote:

FWIW, I noticed that changeset 8831 gets the sockets/cores/siblings incorrect on my system. On 8830 I get 4 sockets per node, 2 cores per socket, and 2 threads per core. On 8831 I get 1 socket per node, 2 cores per socket, and 8 threads per core. Xen boot messages still appear to show four distinct physical cpus (sockets). Just wondering if anyone has noticed this behavior.

This all stems from an incorrect value for smp_num_siblings. This could come from one of two places: 1. Do you get a message 'WARNING: 8 siblings found for CPUx, should be 2' during boot? If so, smpboot.c is screwing up the smp_num_siblings calculation. 2. Otherwise, detect_ht() in arch/x86/cpu/common.c must be the culprit, and you'll need to add some tracing to it to find out where the value '8' is coming from.
It looks like with changeset 8831 cpu_core_ids are no longer unique across phys cpus. So, when we search for siblings to populate cpu_sibling_map, just checking for same core IDs are not good enough. Both core ID and phys cpu ID have to match. Patch attached fixes this.

-Andrew

<signed-off-by: habanero@xxxxxxxxxx>
diff -Naurp xen-unstable.hg-8849/xen/arch/x86/smpboot.c 
xen-unstable.hg-8849-sibling_fix/xen/arch/x86/smpboot.c
--- xen-unstable.hg-8849/xen/arch/x86/smpboot.c 2006-02-16 12:15:53.000000000 
-0600
+++ xen-unstable.hg-8849-sibling_fix/xen/arch/x86/smpboot.c     2006-02-16 
12:11:33.000000000 -0600
@@ -1093,7 +1093,8 @@ static void __init smp_boot_cpus(unsigne
                        for (i = 0; i < NR_CPUS; i++) {
                                if (!cpu_isset(i, cpu_callout_map))
                                        continue;
-                               if (cpu_core_id[cpu] == cpu_core_id[i]) {
+                               if (cpu_core_id[cpu] == cpu_core_id[i] && 
+                                    phys_proc_id[cpu] == phys_proc_id[i]) {
                                        siblings++;
                                        cpu_set(i, cpu_sibling_map[cpu]);
                                }
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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