即使超线程被禁用,如何从 Linux 可靠地判断 CPU 是否支持超线程?

即使超线程被禁用,如何从 Linux 可靠地判断 CPU 是否支持超线程?

以下是我用来判断处理器是否支持 HT 的方法,无论启用还是禁用它:

# dmidecode -t processor | grep "Hardware Thread" | wc -l

如果结果为 0,则处理器不支持 HT。如果结果 > 0,则结​​果为 0。

但是,我不太确定这是否普遍可靠。我至少在 Ubuntu 16.04、18.04 和 SLES 12 上对此进行了检查,在一些服务器(Xeon)和笔记本电脑(例如 Core i5)上使用不同的 Intel 处理器,并且运行良好。但是,通过检查是否dmidecode列出了确切的文本“硬件线程”,它是否可以可靠地适用于任何处理器(例如 AMD,甚至可能是 ARM?)以及所有发行版?有更安全的方法吗?

据我所知,肯定列出了 HT 标志lscpu根本不是可行的方法,因为即使对于不支持 HT 的酷睿 i5 处理器,它也会被列出。

附言。以下帖子确实围绕此主题展开,但是否启用超线程是另一回事: 检查超线程是否启用?, 如何测试Ubuntu是否激活了超线程?

答案1

正如你所猜测的那样,ht标志不是一个可靠的指示器:它并不表示超线程支持,它表示“物理封装能够支持英特尔超线程技术和/或多核”

中的“硬件线程”dmidecode对应于处理器特性值中的特定标志SMBIOS(参见第 7.5.9 节),并且应该可靠地表明对硬件的支持线程,并非所有形式的单包多处理。因此,在具有 SMBIOS 的平台上,

dmidecode -t processor | grep -q "Hardware Thread"

与底层 SMBIOS 信息一样可靠的指示器。

顺便说一句,您不需要使用wc

if dmidecode -t processor | grep -q "Hardware Thread"; then echo HT supported; fi

相关内容