Hyper-Threading disabled on Pentium 4
Urs Thuermann <[email protected]> 26 Aug 2004 13:17:18 +0200
| Newsgroups | org.kernel.vger.linux-smp |
|---|---|
| Message-ID | <[email protected]> |
I'd like to run an SMP kernel with Hyper-Threading on a Pentium 4
processor, but dmesg tells me, it's disabled. Sorry, I don't know
what mainboard this is.
AFAIK, the CPU is able to do Hyper-Threading, and also /proc/cpuinfo
seems to indicate so:
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 2
model name : Intel(R) Pentium(R) 4 CPU 2.40GHz
stepping : 7
cpu MHz : 2424.718
cache size : 512 KB
physical id : 0
siblings : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid
bogomips : 4784.12
$
I think, the ht flag means Hyper-Threading, right? However, when I
boot with a Linux-2.6.7 SMP kernel, I find the following in dmesg
output:
Initializing CPU#0
PID hash table entries: 2048 (order 11: 16384 bytes)
Detected 2424.718 MHz processor.
Using tsc for high-res timesource
Console: colour VGA+ 80x25
Memory: 515808k/524208k available (1769k kernel code, 7656k reserved, 606k data, 372k init, 0k highmem)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay loop... 4784.12 BogoMIPS
Security Scaffold v1.0.0 initialized
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
CPU: After generic identify, caps: bfebfbff 00000000 00000000 00000000
CPU: After vendor identify, caps: bfebfbff 00000000 00000000 00000000
CPU: Trace cache: 12K uops, L1 D cache: 8K
CPU: L2 cache: 512K
CPU: Hyper-Threading is disabled
CPU: After all inits, caps: bfebfbff 00000000 00000000 00000080
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU0: Intel P4/Xeon Extended MCE MSRs (12) available
CPU0: Thermal monitoring enabled
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Checking 'hlt' instruction... OK.
CPU0: Intel(R) Pentium(R) 4 CPU 2.40GHz stepping 07
per-CPU timeslice cutoff: 1462.74 usecs.
Looking into linux-2.6.7/arch/i386/kernel/cpu/intel.c, I found the
message comes from the code
cpuid(1, &eax, &ebx, &ecx, &edx);
smp_num_siblings = (ebx & 0xff0000) >> 16;
if (smp_num_siblings == 1) {
printk(KERN_INFO "CPU: Hyper-Threading is disabled\n");
} else if (smp_num_siblings > 1 ) {
So why does the CPUID instruction yield only one sibling? Is this a
known problem? Is there a way to enable Hyper-Threading on that
machine?
urs