Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Apr 2009 23:03:04 +0100
From:      Ceri Davies <ceri@submonkey.net>
To:        John Baldwin <jhb@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:  <20090422220304.GB54875@submonkey.net>
In-Reply-To: <200904221759.04446.jhb@freebsd.org>
References:  <200904222140.n3MLebn3068260@svn.freebsd.org> <200904221759.04446.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--G4iJoqBmSsgzjUCe
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Apr 22, 2009 at 05:59:04PM -0400, John Baldwin wrote:
> 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
> >=20
> > Log:
> >   Adjust the way we number CPUs on x86 so that we attempt to "group" all
> >   logical CPUs in a package.  We do this by numbering the non-boot CPUs
> >   by starting with the first CPU whose APIC ID is after the boot CPU and
> >   wrapping back around to APIC ID 0 if needed rather than always starti=
ng
> >   at APIC ID 0.  While here, adjust the cpu_mp_announce() routine to li=
st
> >   CPUs based on the mapping established by assign_cpu_ids() rather than
> >   making assumptions about the algorithm assign_cpu_ids() uses.
>=20
> An example is probably in order for this to make sense.  Suppose you have=
 a=20
> system with two quad-core CPUs.  Package 0 has CPUs numbered 0, 1, 2, and=
 3. =20
> Package 1 has CPUs numbered 4, 5, 6, and 7.  With the old code, if packag=
e 0=20
> won the election to be the boot processor, then CPU 0 would be the BSP an=
d=20
> the logical IDs would match the APIC IDs.  However, if package 1 won the=
=20
> election during POST, then CPU 0 would be APIC ID 4 on package 0 followed=
 by=20
> CPU 1 being APIC ID 0, CPU 2 being APIC ID 1, etc.  Thus, when CPU 0 was =
the=20
> boot CPU you had a nice grouping where CPUs 0-3 were a single package and=
=20
> CPUs 4-7 were another package.  However, when CPU 4 was the boot CPU, CPU=
s 0=20
> and 5-7 where one package, and CPUs 1-4 where the second package.  The ef=
fect=20
> of this patch is to change the case when CPU 4 is the boot CPU such that =
CPUs=20
> 0-3 are now all from CPU 4's package (APIC IDs 4-7), and CPUs 4-7 are fro=
m=20
> the other package (APIC IDs 0-3).  What this means, in turn, is that in b=
oth=20
> cases you now always have CPUs 0-3 as one package and CPUs 4-7 as another=
=20
> package regardless of which CPU wins the boot-time election.

What if I have HT turned on?  Do they bunch up with the "real" CPU IDs
or all together at the end?

Ceri
--=20
That must be wonderful!  I don't understand it at all.
                                                  -- Moliere

--G4iJoqBmSsgzjUCe
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (FreeBSD)

iD8DBQFJ75QYocfcwTS3JF8RAj4hAKC6hCKSn53TlPljqDR/w/PAPxRyxACdE7g8
woYCJRMhkvG1mVEJ2tMfF7Q=
=YGP1
-----END PGP SIGNATURE-----

--G4iJoqBmSsgzjUCe--



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