如何检查Linux 服务器上是否启用或者禁用了超线程 (HT)

我们可以使用以下命令来查看超线程的状态

# dmidecode | grep -i HTT
                HTT (Multi-threading)
                HTT (Multi-threading)

也可以使用下面的命令

# cat /proc/cpuinfo | grep -o ht | uniq
ht

请注意,上面的命令告诉我们服务器支持超线程,但没有关于该服务器上超线程当前状态的信息。

要检查是否启用了超线程,首先我们必须了解我们正在使用的 CPU 型号,我们可能需要参考 CPU 供应商的文档以获取此信息

使用以下命令,我们可以找到 CPU 供应商和型号,使用它们可以轻松地从供应商页面获取 CPU 的文档。

# grep "model name" proc/cpuinfo | sort -u
model name      : Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz

接下来,我们必须从 CPU 文档中查找以下信息,我在英特尔® 至强® 处理器 E5 v3 家族中找到了我的CPU信息

查看 CPU 的核心数和线程数如下所示:

# of Cores  8
# of Threads 16

因此,我们知道如果未启用 HT,我的 CPU 总共有 16 个逻辑 CPU,如果启用 HT,则有 32 个逻辑 CPU

现在让我们检查服务器中的真实统计信息,

'lscpu' 和 '/proc/cpuinfo' 是两个帮助我们获取这些信息的工具

下面是我的 lscpu 输出

# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
Stepping:              2
CPU MHz:               2600.000
CPU max MHz:           2600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5193.74
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-31

信息显示我们有 2 个插槽、8 个内核和每个内核 2 个线程。

这不太可能,大多数情况下,在禁用超线程的系统中,我们将获得“每核 1 个线程”

检查物理 CPU 的总数

以下命令将显示系统有多少活动物理处理器

# grep physical.id /proc/cpuinfo | sort -u | wc -l
2

每个 CPU 的内核数

在具有多核处理器的系统上,以下命令应报告每个物理处理器的 CPU 核数(尽管在极少数情况下可能不会)。

示例:如果此数字为 8,物理 CPU 为 2,则 2 个物理处理器中的每一个都有 8 个 CPU 内核,因此总共有 16 个内核。

# grep cpu.cores /proc/cpuinfo | sort -u
cpu cores       : 8

我们可以使用以下命令验证相同的内容,使用它我们可以检查每个物理 CPU 的内核数
对于第一个 CPU (0)

# cat /proc/cpuinfo | egrep -E "^physical|core id"| xargs -l2 | sort -u | awk -F " " '{print }' | grep 0 | wc -l
8

对于第二个 CPU (1)

# cat /proc/cpuinfo | egrep -E "^physical|core id"| xargs -l2 | sort -u | awk -F " " '{print }' | grep 1 | wc -l
8

对于 2 个物理 CPU(插槽)和 8 个内核,如果未启用超线程,我们预计有 16 个逻辑 CPU

# grep processor /proc/cpuinfo | wc -l
32

但是这里我们有 32 个 CPU,所以这清楚地表明启用了超线程。

下面我们看另外一台禁用了HT的服务器:

# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16
On-line CPU(s) list:   0-15
Thread(s) per core:    1
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
Stepping:              2
CPU MHz:               2600.000
CPU max MHz:           2600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5193.67
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-15

如我们所见,“每核线程数”为 1,因此这给了我们一个提示,即 HT 可能被禁用

检查核心数

# grep cpu.cores /proc/cpuinfo | sort -u
cpu cores       : 8

在这里,如果我们将插槽数 (2) 与内核数 (8) 相乘,那么如果未启用 HT,我们必须有 16 个内核

# grep processor /proc/cpuinfo | wc -l
16

所以我们知道现在这台服务器上禁用了 HT。

日期:2020-06-02 22:18:24 来源:oir作者:oir