私のパソコンではハイパースレッディングが有効になっていないと感じています。 /proc/cpuinfo
を調べたところ、兄弟はCPUコアと同じ数であると説明されています。これは、ハイパースレッディングがアクティブ化されていないことを意味します。どのようにアクティベートできますか?
/proc/cpuinfo
のパートエントリ:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
stepping : 6
cpu MHz : 2997.000
cache size : 6144 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
/ sys/bus/cpu/devices/cpu */topology/thread_siblings_listは、コアとハイパースレッドのレイアウトを示します。視覚化を簡単にするために、lstopoコマンドを使用してインストールすることをお勧めします。
Sudo apt-get install hwloc
そして実行:
lstopo
私のivybridgeデスクトップには4つのCPUがあります。それぞれにハイパースレッドがあるため、Cores P#0..3を含む図が表示され、それぞれに2つのPUがあります(これらの1つはハイパースレッドです)。
この出力のテキストバージョンだけが必要な場合は、次を使用します。
lstopo -
ターミナルでtop
を実行し、キーボードの1
を押して、ヘッダーのCPUごとの負荷を表示します。そこには何CPUが記述されていますか?
CPUの実際のコアの2倍であれば、ハイパースレッディングは正常に機能しています。
ハイパースレッディング(別名Intelハイパースレッディングテクノロジー)を使用しているかどうかを検出するには、dmidecodeを使用できます。
ターミナル内:
Sudo dmidecode > /tmp/dmidecode.txt
gksudo gedit /tmp/dmidecode.txt
Populated、Enabled(* ... *の間に以下に表示)のStatus値を探します。つまり、「Enabled」はハイパースレッディングがアクティブであることを意味します
Physical CPU
Handle 0x000C, DMI type 4, 32 bytes
Processor Information
Socket Designation: Socket 1 CPU 1
Type: Central Processor
Family: Xeon
Manufacturer: GenuineIntel
ID: 43 0F 00 00 01 03 00 00
Signature: Type 0, Family 15, Model 4, Stepping 3
Flags:
FPU (Floating-point unit on-chip)
CX8 (CMPXCHG8 instruction supported)
APIC (On-chip APIC hardware supported)
Version: Intel Xeon
Voltage: 1.5 V
External Clock: 200 MHz
Max Speed: 4000 MHz
Current Speed: 3800 MHz
Status: *Populated, Enabled*
Upgrade: ZIF Socket
L1 Cache Handle: 0x0004
L2 Cache Handle: 0x0005
L3 Cache Handle: Not Provided
ハイパースレッド論理CPUでは、ステータス値unpopulatedが表示されます(以下に* ... *の間に表示):
Handle 0x000D, DMI type 4, 32 bytes
Processor Information
Socket Designation: Socket 2 CPU 2
Type: Unknown
Family: Unknown
Manufacturer: Not Specified
ID: 00 00 00 00 00 00 00 00
Version: Not Specified
Voltage: 1.5 V
External Clock: 200 MHz
Max Speed: 4000 MHz
Current Speed: 3800 MHz
Status: *Unpopulated*
Upgrade: ZIF Socket
L1 Cache Handle: 0x0006
L2 Cache Handle: 0x0007
L3 Cache Handle: Not Provided
dmidecodeの結果では、次のようなものを得ることができます
Core Count: 6
Core Enabled: 6
Thread Count: 12
ハイパースレッドがオンに設定されているサーバー上
または
Core Count: 6
Core Enabled: 6
Thread Count: 6
オフに設定されているもの
ネタバレ:CPU ハイパースレッディングをサポートしていません 。
CPUベンダーのデータベースに問い合わせる代わりに、/proc/cpuinfo
でht
フラグを確認することもできます。
$ grep -o '\<ht\>' /proc/cpuinfo
BIOSでハイパースレッディングが無効になっている場合でも、その出力にフラグを含める必要があります。
ハイパースレッディングが実際に有効になっているかどうかを確認するには、 別の擬似ファイル を参照してください。
$ cat /sys/devices/system/cpu/smt/control
可能な値は次のとおりです。on|off|forceoff|notsupported|notimplemented
ハイパースレッドを有効/無効にするには、on
/off
をその擬似ファイルに書き込みます。例:
# echo off > /sys/devices/system/cpu/smt/control
もちろん、以前にcat
がforceoff|notsupported|notimplemented
のいずれかを出力していた場合、これは機能しません。
通常、ハイパースレッディングはデフォルトで有効になっています。そして、それが無効になっている場合、BIOSで一般的に行われます。 BIOSで無効になっている場合、その擬似ファイルにはforceoff
が含まれている可能性が高く、BIOSの設定を変更する必要があります。