8.1-PRERELEASE: CPU packages not detected correctly

Andriy Gapon avg at freebsd.org
Sat Aug 28 20:35:59 UTC 2010


Oops, the patch had a small mistake.
I've put it here now, just in case I'll want to fix/cleanup anything else:
http://people.freebsd.org/~avg/intel-cpu-topo.diff

on 28/08/2010 23:22 Andriy Gapon said the following:
> So, here is my take on the problem.
> The attached patch is against sources in FreeBSD tree, it should be applied
> either to sys/amd64/amd64/mp_machdep.c or sys/i386/i386/mp_machdep.c depending
> on the desired architecture.
> 
> The patch is substantially based on the Junk-uk's patch, but with some changes
> and additions:
> - topo_probo_0x4() is rewritten so that it does APIC ID matching against masks
> as described in the Intel article.  The code still heavily depends on the
> assumption of the uniform topology, it discovers number of cores in BSP package
> and number of threads in BSP core and extrapolates that to global topology.
> The difference with current code and Junk-uk's patch is that actual APIC ID
> matching is done as opposed to deriving counts purely from max. values.
> 
> - added a few comments that describe uniformity assumption, plus couple other
> useful things.
> 
> - changed "final fallback" code, so that each logical CPU is considered to be in
> its own physical package as opposed to current code placing all logical CPUs as
> cores of a single package.
> 
> The rest is Junk-uk's work.
> 
> Concerns:
> - about my code: ilog2_round_pow2 name is ugly; looking for suggestions on a
> better name or re-arranging/writing that code, so that the function is not needed.
> - about current code: logical_cpus variable (don't confuse with cpu_logical)
> doesn't seem to be consistently used; e.g. it is not set at all by
> topo_probo_0xb(); also, the method of using it for setting logical_cpus_mask
> doesn't seem to be reliable - BSP may be missed.
> 
> Reviews, comments and test reports are very welcome!
> Please test the patch if you have any problems with how CPU topology is reported
> by the current code.  Please test even if everything is OK, to avoid regressions.

-- 
Andriy Gapon


More information about the freebsd-stable mailing list