我们可以使用以下命令来查看超线程的状态
# 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。