检查超线程是否启用?

检查超线程是否启用?

如何使用 perl 脚本检查 Linux 计算机上是否启用了超线程?

我正在尝试以下方法:

dmidecode -t processor | grep HTT

让我知道我是否走在正确的轨道上。

答案1

我一直只使用以下内容并查看“每个核心的线程:”。

hostname:~ # lscpu
Architecture:          x86_64
CPU(s):                24
Thread(s) per core:    2                <-- here
Core(s) per socket:    6
CPU socket(s):         2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               1596.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K

但请注意,如果使用简单的方法关闭任何逻辑处理器,则此技术将失败

echo 0 > /sys/devices/system/cpu/cpuX/online

答案2

2014 年 7 月 8 日添加的注释:作为里卡多·穆里指出,我下面的回答仅显示处理器是否报告支持超线程。一般来说,*nix 操作系统配置为启用超线程(如果支持)。然而,要实际以编程方式检查这一点,请参见例如尼尔斯的回答

---- 2012年3月25日原始回答:

你确实走在正确的道路上:)

dmidecode -t processor | grep HTT

在 Linux 上,我通常只是在 的“flags”行上查找“ht” /proc/cpuinfo。参见例如

grep '^flags\b' /proc/cpuinfo | tail -1

或者如果您想在模式中包含“ht”

grep -o '^flags\b.*: .*\bht\b' /proc/cpuinfo | tail -1

\b匹配单词边界,并有助于避免在“ht”是另一个标志的一部分的情况下出现误报。)

答案3

如果逻辑处理器的数量是 HT 核心数量的两倍。使用以下脚本进行解码/proc/cpu信息:

#!/bin/sh
CPUFILE=/proc/cpuinfo
test -f $CPUFILE || exit 1
NUMPHY=`grep "physical id" $CPUFILE | sort -u | wc -l`
NUMLOG=`grep "processor" $CPUFILE | wc -l`
if [ $NUMPHY -eq 1 ]
  then
    echo This system has one physical CPU,
  else
    echo This system has $NUMPHY physical CPUs,
fi
if [ $NUMLOG -gt 1 ]
  then
    echo and $NUMLOG logical CPUs.
    NUMCORE=`grep "core id" $CPUFILE | sort -u | wc -l`
    if [ $NUMCORE -gt 1 ]
      then
        echo For every physical CPU there are $NUMCORE cores.
    fi
  else
    echo and one logical CPU.
fi
echo -n The CPU is a `grep "model name" $CPUFILE | sort -u | cut -d : -f 2-`
echo " with`grep "cache size" $CPUFILE | sort -u | cut -d : -f 2-` cache"

答案4

如果您阅读/sys/devices/system/cpu/cpu0/topology/thread_siblings_list,它将返回 CPU 0 的同级线程(即超线程“核心”)的逗号分隔列表。

例如,在我的 2 插槽 6 核 Xeon 上,启用超线程后,我得到:

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0,12

但在 BIOS 中关闭超线程后,我得到:

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0

假设 CPU 0 始终可用,则检查 CPU 0 的thread_sibling_listprocfs 文件中是否有多个节点,或者查找逗号,甚至只是除 之外的任何内容0,将指示是否启用了超线程。


我会用 Perl 回答,但是 1)我不知道 Perl,2)我认为解决方案是一个非常简单的单行代码。

相关内容