今使っている Pentium4 CPU は HT 対応?
Posted by yoosee on Debian at 2006-03-19 23:42 JST1 /proc/cpuinfo の ht flag と Hyper Threading
ふと自宅マシン (M/B P4T, CPU Pen4 1.7GHz) の /proc/cpuinfo を眺めていたのだが、flags に ht と言うフラグがある。% cat /proc/cpuinfo ...(snip)... model name : Intel(R) Pentium(R) 4 CPU 1700MHz cpu MHz : 1707.804 flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tmasm/cpufeature.h (-> asm-i486/cpufeature.h) を見ると
#define X86_FEATURE_HT (0*32+28) /* Hyper-Threading */と言う行があり、この "ht" flag は Hyper-Threading が搭載されていることを示すようだ。とは言え Pentium4 - Wikipedia を見る限り、i850 chipset に RDRAM を載せた M/B に 1.7GHz CPU と言う組み合わせは確実に HT 非対応の第一世代 Pentium 4、Willamette だ。
実際、 linux-image-2.6.15-686-smp を入れて起動してみても、cpu は 1 つしか認識しない。この時 dmesg でも
CPU: Hyper-Threading is disabledとなっている。このメッセージが出ているところを追ってみると arch/i386/kernel/cpu/common.c に処理があるようだ。
.... if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY)) return; 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 ) { ....つまり cpu_has(c, X86_FEATURE_HT) は true を返している (CPU register の X86_FEATURE_HT (0*32+28) bit が立っている) ので cpu flags には ht が立つが、実際に smp_num_sibling (SMP兄弟プロセッサの数) を見ると 1 しか無く、HT 機能は有効ではない、という事だろうか。