我如何测试ubuntu是否激活了超线程?


13

我感觉我的电脑上未激活超线程。我调查了一下/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

Answers:


15

/ sys / bus / cpu / devices / cpu * / topology / thread_siblings_list显示核心和超线程的布局。为了使可视化更容易,我建议使用lstopo命令,并安装:

sudo apt-get install hwloc

并运行:

lstopo

我的ivybridge桌面有4个CPU。每个都有一个超线程,因此我们得到一个包含Cores P#0..3的图表,每个都有两个PU(其中一个是超线程):

在此处输入图片说明

如果只需要此输出的文本版本,请使用:

lstopo -

不知道为什么没有人对此表示赞同...这是一个非常不错的实用程序。
哈克·贝内特

这太酷了。您会在一张图像中看到全部缓存,核心,超线程
Silver Moon

9

top在终端中运行,按1键盘上的数字以在标题中显示每个cpu的负载,其中描述了多少个cpu?

如果它们是CPU中实际内核的两倍,则超线程将按预期工作。


7

要检测您是否正在使用超线程(又名英特尔超线程技术),可以使用dmidecode

在终端中:

sudo dmidecode > /tmp/dmidecode.txt
gksudo gedit /tmp/dmidecode.txt

查找“已填充,已启用”的状态值(如下所示,显示在* ... *之间),即“已启用”表示超线程处于活动状态

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中,您将看到状态值未填充(显示在下面的* ... *之间):

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

资源


Linux内核(使用CPUID拓扑枚举)而不是使用BIOS配置的DMI数据确定CPU的CPU和同级的数量。我怀疑DMI数据是在启动时从内核使用的相同CPUID数据配置的,但是,最好信任Linux内核确定的内容,而不是信任DMI数据。碰巧的是,在大多数情况下,BIOS可能正确无误。
科林·伊恩·金

如果禁用了超线程,则dmicode输出不会更改-它仅指示CPU是否支持超线程。例如,在禁用了超线程的i7-6600U CPU系统上,dmidecode | grep -i popula也会打印Status: Populated, Enabled。另请参阅我的答案
maxschlepzig

2

在dmidecode的结果中,您可以获得类似

    Core Count: 6
    Core Enabled: 6
    Thread Count: 12

在超线程设置为ON的服务器上

要么

    Core Count: 6
    Core Enabled: 6
    Thread Count: 6

在那些设置为OFF的


这行不通。该Thread Count如果超线程已禁用,例如i7-6600U系统禁用超线程在不改变dmidecode | grep '\(Core\|Thread\).*:'打印Core Count: 2 Core Enabled: 2 Thread Count: 4
maxschlepzig

0

剧透:您的CPU 不支持超线程

到咨询CPU供应商的数据库的替代方法是检查/proc/cpuinfoht标志:

$ 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中更改设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.