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을 항상 사용할 수 있다고 가정하면 thread_sibling_list
여러 노드에 대해 CPU 0에 대한 procfs 파일을 확인하거나 쉼표 또는 이외의 다른 항목을 검색하면 0
하이퍼스레딩이 활성화되어 있는지 여부를 알 수 있습니다.
나는 Perl로 대답하고 싶지만 1) Perl을 모르고 2) 해결책은 매우 간단한 한 줄짜리 솔루션이라고 생각합니다.