하이퍼스레딩이 활성화되어 있는지 확인하세요.

하이퍼스레딩이 활성화되어 있는지 확인하세요.

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_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_list여러 노드에 대해 CPU 0에 대한 procfs 파일을 확인하거나 쉼표 또는 이외의 다른 항목을 검색하면 0하이퍼스레딩이 활성화되어 있는지 여부를 알 수 있습니다.


나는 Perl로 대답하고 싶지만 1) Perl을 모르고 2) 해결책은 매우 간단한 한 줄짜리 솔루션이라고 생각합니다.

관련 정보