ハイパースレッディングが有効になっていることを確認してください。

ハイパースレッディングが有効になっていることを確認してください。

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コア数の2倍の場合。次のスクリプトを使用してデコードします。/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_listCPU 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 を常に使用できると仮定すると、複数のノードでthread_sibling_listCPU 0 の procfs ファイルを確認するか、カンマまたはその他の項目を検索すると、0ハイパースレッディングが有効になっているかどうかがわかります。


私はPerlで答えたいのですが、1)Perlを知らず、2)解決策は非常に単純な1行の解決策だと思います。

関連情報