Linux 시스템에서 펄 스크립트를 사용하여 하이퍼 스레딩이 활성화되어 있는지 확인하려면 어떻게해야합니까?
나는 다음과 같은 방법으로 노력하고 있습니다 :
dmidecode -t processor | grep HTT
내가 올바른 길을 가고 있는지 알려주세요.
답변
참고 년 7 월 (8), 2014 년 추가 : 로 리카르도 Murri 지역은 지적 만 아래에있는 내 대답은 프로세서 보고서는 하이퍼 스레딩을 지원할지 여부를 보여줍니다. 일반적으로 * nix O / S는 지원되는 경우 하이퍼 스레딩을 사용하도록 구성됩니다. 그러나 실제로 프로그래밍 방식으로 확인하려면 예를 들어 Nils의 답변을 참조하십시오 !
—- 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”가 다른 플래그의 일부인 경우 오탐을 피하는 데 도움이됩니다.)
답변
나는 항상 다음을 사용했으며 ‘코어 당 스레드 수’를 보았습니다.
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
답변
논리 프로세서 수가 두 배인 경우 HT가있는 코어 수입니다. 다음 스크립트를 사용하여 / proc / cpuinfo 를 디코딩하십시오 .
#!/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"
답변
위의 예는 CPU가 HT를 사용할 수 있는지, 사용중인지는 표시하지 않습니다. 마지막 방법은 작동하지만 이중 소켓 서버 및 VM Xenserver
은 물리적 CPU가 표시되지 않는 위치에서 테스트되었습니다 .
나는 이것이 가장 쉽고 코드가 적은 방법이라는 것을 알았으며 모든 테스트 환경에서도 작동했습니다. 하지만 필요합니다 bc
.
echo "testing ################################### "
nproc=$(grep -i "processor" /proc/cpuinfo | sort -u | wc -l)
phycore=$(cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l)
if [ -z "$(echo "$phycore *2" | bc | grep $nproc)" ]
then
echo "Does not look like you have HT Enabled"
if [ -z "$( dmidecode -t processor | grep HTT)" ]
then
echo "HT is also not Possible on this server"
else
echo "This server is HT Capable, However it is Disabled"
fi
else
echo "yay HT Is working"
fi
echo "testing ################################### "
나는 이것이 모든 플랫폼에서 작동하고 CPU가 가능하고 활성화되어 있는지 알려줄 것이라고 믿습니다. 조금 지저분 할 수도 있지만 스크립팅 초보자입니다. centos XENSERVER vm, Ubuntu 및 Openfiler (rpath)로 테스트했습니다.
답변
이 명령으로 CPU의 HT 기능을 확인할 수 있습니다
# grep ht /proc/cpuinfo
다음 명령을 사용하여 커널에서 볼 수있는 물리 및 논리 CPU를 나열 할 수 있습니다.
# egrep -i "processor|physical id" /proc/cpuinfo
단일 코어 HT 지원 CPU에서이 출력을 제공합니다.
processor : 0
physical id : 0
processor : 1
physical id : 0
다음과 같은 결과를 읽을 수 있습니다.
processor : 0 (CPU 0, first logical)
physical id : 0 (CPU 0 is on the first physical)
processor : 1 (CPU 1, second logical)
physical id : 0 (CPU 1 is on the first physical)
=> It means I have HT enabled
답변
이 라이너는 나를 위해 속임수를 쓰는 것 같습니다 (루트 권한 필요).
dmidecode -t processor | grep -E '(Core Count|Thread Count)'
출력은 다음과 같습니다.
Core Count: 2
Thread Count: 4
스레드 수는 코어 수의 두 배이므로 하이퍼 스레딩을 사용하도록 설정했습니다.
또는 요청에 따라 펄 스크립트를 정말로 원한다면 …
perl -e 'print grep(/Core Count/ || /Thread Count/, `dmidecode -t processor`);'
답변
perl -ne'
$i++ if /^\s*$/;
push @{$x[$i]}, [/^(.+?) \s*:\s* (.+)/x] if /core|sibling|physical id/; }{
$r= shift @x;
for $i (0..$#$r) {
$$r[$i][1] .= " ".$$_[$i][1] for @x;
printf "%-15s: %s\n", @{$$r[$i]};
}
' /proc/cpuinfo
이 결과는 siblings
숫자 (12)가 cpu cores
(6) 보다 클 때 HT가 활성화되었음을 나타냅니다.
physical id : 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
siblings : 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
core id : 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10
cpu cores : 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6