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_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 を常に使用できると仮定すると、複数のノードでthread_sibling_list
CPU 0 の procfs ファイルを確認するか、カンマまたはその他の項目を検索すると、0
ハイパースレッディングが有効になっているかどうかがわかります。
私はPerlで答えたいのですが、1)Perlを知らず、2)解決策は非常に単純な1行の解決策だと思います。