|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 01/14] x86: add socket_to_cpumask
On Tue, May 05, 2015 at 10:11:15AM +0100, Jan Beulich wrote:
> >>> On 05.05.15 at 09:44, <chao.p.peng@xxxxxxxxxxxxxxx> wrote:
> > On Fri, Apr 24, 2015 at 03:46:11PM +0100, Jan Beulich wrote:
> >> >>> On 23.04.15 at 11:55, <chao.p.peng@xxxxxxxxxxxxxxx> wrote:
> >> > @@ -717,6 +722,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
> >> >
> >> > stack_base[0] = stack_start;
> >> >
> >> > + nr_sockets = DIV_ROUND_UP(nr_cpu_ids, boot_cpu_data.x86_max_cores *
> >> > +
> >> > boot_cpu_data.x86_num_siblings);
> >>
> >> I think this is going to be problematic when there are more CPUs
> >> in the system than Xen can (or is told to) handle.
> >
> > After dived into the code I think there is no way we can do it
> > correctly, especially when we want to get the nr_sockets which counts
> > in the unplugged socket(s) as well.
>
> Without you explaining why it's really hard to judge whether that's
> indeed the case. After all we have all necessary information in hand
> when booting all CPUs, so I can't see why we shouldn't be able to
> use that information also when booting only a subset.
My concern is the original APIC IDs do not need to be consecutive. Then
in such case even we do
DIV_ROUND_UP(cpu_num_from_madt, boot_cpu_data.x86_max_cores *
boot_cpu_data.x86_num_siblings);
would not be correct.
E.g. If we have a machine like this (Each package has two cores and each
core has two threads but only 3 processors enumerated in MADT):
APIC_ID Package_ID Core_ID SMT_ID
1(001) 0 0 1
2(010) 0 1 0
4(100) 1 0 0
Then nr_sockets = ROUND_UP( 3 / (2 * 2) ) = 1 but we do have two sockets.
Chao
>
> > One possible way is to culculate the package mask from cpuid topology
> > first and then use it to culculate the possible sockets. It should work
> > but is also wasteful. For me, it's unacceptable.
>
> Again, without you being more specific I can't really comment.
>
> > Another way would be make a build time macro NR_SOCKETS, which is not so
> > flexible but makes all things easy.
> >
> > Also, if you think it's needed, I can add a nr_socket boot option to
> > rewrite NR_SOCKETS if the default it not correct.
>
> These two would be fall back options when nothing else can be found
> to make this work.
>
> Jan
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |