programing

명령줄의 프로세서/코어 수

subpage 2023. 5. 29. 10:54
반응형

명령줄의 프로세서/코어 수

Linux에서 프로세서/코어 수를 가져오기 위해 다음 명령을 실행하고 있습니다.

cat /proc/cpuinfo | grep processor | wc -l

효과는 있지만 우아해 보이지는 않습니다.어떻게 개선할 것을 제안하시겠습니까?

nproc당신이 찾고 있는 것입니다.

더 많은 정보: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/

가장 간단한 도구는 glibc와 함께 제공되며 다음과 같습니다.getconf:

$ getconf _NPROCESSORS_ONLN
4

저는 당신이 제시한 방법이 리눅스에서 가장 휴대하기 쉽다고 생각합니다.불필요한 산란 대신cat그리고.wc프로세스를 조금 줄일 수 있습니다.

$ grep --count ^processor /proc/cpuinfo
2

Linux 및 OS X에서 작동하도록 이 작업을 수행하려면 다음 작업을 수행할 수 있습니다.

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

최신 커널에서는 다음을 사용할 수도 있습니다./sys/devices/system/cpu/자세한 정보를 보려면 인터페이스:

$ ls /sys/devices/system/cpu/
cpu0  cpufreq  kernel_max  offline  possible  present  release
cpu1  cpuidle  modalias    online   power     probe    uevent
$ cat /sys/devices/system/cpu/kernel_max 
255
$ cat /sys/devices/system/cpu/offline 
2-63
$ cat /sys/devices/system/cpu/possible 
0-63
$ cat /sys/devices/system/cpu/present 
0-1
$ cat /sys/devices/system/cpu/online 
0-1

이 모든 것이 의미하는 바에 대한 자세한 내용은 공식 문서를 참조하십시오.

누군가 "프로세서/코어 수"를 요청하면 두 가지 답변이 요청됩니다."프로세서"의 수는 기계의 소켓에 설치된 물리적 수가 됩니다.

"코어"의 수는 물리적 코어입니다.하이퍼스레딩(가상) 코어는 포함되지 않을 것입니다(적어도 제 생각에는).스레드 풀을 사용하여 많은 프로그램을 작성하는 사용자는 코어/하이퍼스레드 대비 물리적 코어 수를 알아야 합니다.즉, 다음 스크립트를 수정하여 필요한 답변을 얻을 수 있습니다.

#!/bin/bash

MODEL=`cat /cpu/procinfo | grep "model name" | sort | uniq`
ALL=`cat /proc/cpuinfo | grep "bogo" | wc -l`
PHYSICAL=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
CORES=`cat /proc/cpuinfo | grep "cpu cores" | sort | uniq | cut -d':' -f2`
PHY_CORES=$(($PHYSICAL * $CORES))
echo "Type $MODEL"
echo "Processors $PHYSICAL"
echo "Physical cores $PHY_CORES"
echo "Including hyperthreading cores $ALL"

하이퍼스레딩도 지원하는 6개의 물리적 코어가 각각 2개의 모델 Xeon X5650 물리적 프로세서가 있는 시스템의 결과:

Type model name : Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24

하이퍼스레딩을 지원하지 않는 물리적 코어가 각각 4개씩 있는 2mdeol Xeon E5472 프로세서가 있는 시스템

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8

lscpu(1)util-linux 프로젝트에서 제공하는 명령도 유용할 수 있습니다.

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
Stepping:              9
CPU MHz:               3406.253
CPU max MHz:           3600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5787.10
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

이는 *bsd, *nix 또는 Solaris에서 CPU 코어를 세는 휴대용 방법을 원하는 사용자를 위한 것입니다(AIX 및 hp-ux에서 테스트되지 않았지만 작동해야 함).그것은 항상 저에게 효과가 있었습니다.

dmesg | \
egrep 'cpu[. ]?[0-9]+' | \
sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \
sort -u | \
wc -l | \
tr -d ' '

솔라리스grep&egrep가지고 있지 않은-o선택사항 sosed대신 사용됩니다.

하이퍼스레딩 코어 수를 계산하지 않는 또 다른 단일 라인:

lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }' 

OS 독립적인 방법이 필요한 경우 윈도우즈 및 리눅스에서 작동합니다.파이썬 사용

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16

이를 수행하는 또 다른 휴대용 방법은 다음과 같습니다.

node -p 'os.cpus().length'

언급URL : https://stackoverflow.com/questions/19619582/number-of-processors-cores-in-command-line

반응형