i've had a core i7 machine for some time with 4c/8t.
unfortunately, the mp table has only 4 processor entries.
evidently this is also the case on core i5/xeon 3xxxx machines
with >= 4t as well.
in my case, i was given a lucky break by bios which gave
the processors apic ids 0, 2, 4, 6 and the ioapic got apic
id 8. since apic ids are unique within a system, it wasn't
too hard to guess that i might be missing 1, 3, 5, 7.
clearly guessing wrong will result in no boot for you.
(unluckily, the xeon 3xxxx that's come for a visit gives
its ioapic id 1. :-(.)
a quick (but gruesome) hack later, and i was able to
generate fake mp entries for the missing processors.
and:
chula# cat /dev/sysstat
0 1659 77046 458 444 0
0 391 94 0
1 2773 70167 686 698 0
0 0 87 0
2 2116 69208 616 433 0
0 0 86 0
3 2129 70004 804 431 0
0 0 85 0
4 2357 72195 567 462 0
0 0 90 0
5 1291 125929 602 429 0
0 0 85 0
6 2223 70054 526 478 0
0 0 85 0
7 2153 70028 568 405 0
0 0 84 0
i can then use cpuid to validate this. cpuid -t wires itself
to each processor to get the apic id for that processor.
chula# aux/cpuid -t
thread 00000001 00000002 00000100 00000000
core 00000004 00000008 00000201 00000000
mach0 apic 00000000
mach1 apic 00000001
mach2 apic 00000002
mach3 apic 00000003
mach4 apic 00000004
mach5 apic 00000005
mach6 apic 00000006
mach7 apic 00000007
it's quite unfortunate that this info isn't available outside
the processor.
this is what the system thinks;
the fields are type/apicno/flags/lintr0/lintr1/machno
chula# cat /dev/mpapic
proc 0 be 65536 65536 0
proc 1 e 65536 65536 1
proc 2 e 65536 65536 2
proc 3 e 65536 65536 3
proc 4 e 65536 65536 4
proc 5 e 65536 65536 5
proc 6 e 65536 65536 6
proc 7 e 65536 65536 7
ioapic 8 e 0 0 0
- erik