Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2009 09:55:59 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Ivan Voras <ivoras@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r191405 - in head/sys: amd64/amd64 i386/i386
Message-ID:  <200904230955.59850.jhb@freebsd.org>
In-Reply-To: <9bbcef730904221530u786464d3v2dc05b0bb2f1218a@mail.gmail.com>
References:  <200904222140.n3MLebn3068260@svn.freebsd.org> <200904221759.04446.jhb@freebsd.org> <9bbcef730904221530u786464d3v2dc05b0bb2f1218a@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 22 April 2009 6:30:12 pm Ivan Voras wrote:
> 2009/4/22 John Baldwin <jhb@freebsd.org>:
> > On Wednesday 22 April 2009 5:40:37 pm John Baldwin wrote:
> >> Author: jhb
> >> Date: Wed Apr 22 21:40:37 2009
> >> New Revision: 191405
> >> URL: http://svn.freebsd.org/changeset/base/191405
> >>
> >> Log:
> >> =C2=A0 Adjust the way we number CPUs on x86 so that we attempt to "gro=
up" all
> >> =C2=A0 logical CPUs in a package. =C2=A0We do this by numbering the no=
n-boot CPUs
> >> =C2=A0 by starting with the first CPU whose APIC ID is after the boot =
CPU and
> >> =C2=A0 wrapping back around to APIC ID 0 if needed rather than always =
starting
> >> =C2=A0 at APIC ID 0. =C2=A0While here, adjust the cpu_mp_announce() ro=
utine to list
> >> =C2=A0 CPUs based on the mapping established by assign_cpu_ids() rathe=
r than
> >> =C2=A0 making assumptions about the algorithm assign_cpu_ids() uses.
> >
> > An example is probably in order for this to make sense. =C2=A0Suppose y=
ou have a
> > system with two quad-core CPUs. =C2=A0Package 0 has CPUs numbered 0, 1,=
 2, and 3.
> > Package 1 has CPUs numbered 4, 5, 6, and 7. =C2=A0With the old code, if=
 package 0
> > won the election to be the boot processor, then CPU 0 would be the BSP =
and
> > the logical IDs would match the APIC IDs. =C2=A0However, if package 1 w=
on the
> > election during POST, then CPU 0 would be APIC ID 4 on package 0 follow=
ed by
> > CPU 1 being APIC ID 0, CPU 2 being APIC ID 1, etc. =C2=A0Thus, when CPU=
 0 was the
> > boot CPU you had a nice grouping where CPUs 0-3 were a single package a=
nd
> > CPUs 4-7 were another package. =C2=A0However, when CPU 4 was the boot C=
PU, CPUs 0
> > and 5-7 where one package, and CPUs 1-4 where the second package. =C2=
=A0The effect
> > of this patch is to change the case when CPU 4 is the boot CPU such tha=
t CPUs
> > 0-3 are now all from CPU 4's package (APIC IDs 4-7), and CPUs 4-7 are f=
rom
> > the other package (APIC IDs 0-3). =C2=A0What this means, in turn, is th=
at in both
> > cases you now always have CPUs 0-3 as one package and CPUs 4-7 as anoth=
er
> > package regardless of which CPU wins the boot-time election.
>=20
> I like that the new numbering is more elegant, but this is orthogonal
> to ULE topology detection, right?

Yes.

=2D-=20
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200904230955.59850.jhb>