이 스크립트가 있지만 출력물의 마지막 요소를 얻는 방법을 모르겠습니다.
cat /proc/cpuinfo | awk '/^processor/{print $3}'
마지막 요소는 CPU 수에서 1을 뺀 것이어야합니다.
tail -n 1
마지막 줄을 가져 와서 인쇄하십시오.
이 스크립트가 있지만 출력물의 마지막 요소를 얻는 방법을 모르겠습니다.
cat /proc/cpuinfo | awk '/^processor/{print $3}'
마지막 요소는 CPU 수에서 1을 뺀 것이어야합니다.
tail -n 1
마지막 줄을 가져 와서 인쇄하십시오.
답변:
grep -c ^processor /proc/cpuinfo
"프로세서"로 시작하는 줄 수를 계산합니다. /proc/cpuinfo
하이퍼 스레딩이있는 시스템의 경우
grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'
(예를 들어)를 반환해야합니다 ( 8
위의 명령은을 반환합니다 16
)
grep -c '^processor' /proc/cpuinfo
zsh.
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1
CPU 번호가 0부터 시작하면 잘못된 숫자를 반환합니다.
내용을 처리하는 /proc/cpuinfo
것은 불필요하게 바로크입니다. coreutils의 일부인 nproc 을 사용 하므로 대부분의 Linux 설치에서 사용할 수 있습니다.
명령 nproc
은 현재 프로세스에 사용 가능한 처리 장치 수를 인쇄하며, 이는 온라인 프로세서 수보다 적을 수 있습니다.
설치된 모든 코어 / 프로세서 수를 찾으려면 nproc --all
내 8 코어 머신에서 :
$ nproc --all
8
nproc
boot2docker의 일부가 아닌
내가 찾은 가장 휴대용 솔루션은 다음과 getconf
같습니다.
getconf _NPROCESSORS_ONLN
이것은 Linux와 Mac OS X에서 모두 작동합니다. 다른 접근 방식에 비해 이것의 또 다른 이점은 getconf가 오랫동안 사용되어 왔다는 것입니다. 내가 개발해야하는 오래된 리눅스 시스템 중 일부에는 nproc
또는 lscpu
명령이 없지만 사용할 수 있습니다 getconf
.
편집자 주 : 동안 유틸리티 POSIX-의무화 , 특정 및 값이 없습니다. 언급 한 바와 같이 Linux 플랫폼과 macOS에서도 작동합니다. FreeBSD / PC-BSD에서는 선행을 생략해야합니다 .getconf
_NPROCESSORS_ONLN
_NPROCESSORS_CONF
_
_NPROCESSORS_ONLN
POSIX에서 찾을 수 없습니다 . 당신은 그것에 연결할 수 있습니까?
머리말:
기반 답변 의 문제점/proc/cpuinfo
은 사람이 소비 할 수있는 정보를 구문 분석 하여 기계 구문 분석을 위해 설계된 안정적인 형식이 부족 하다는 것입니다 . 출력 형식은 플랫폼 및 런타임 조건에 따라 다를 수 있습니다. Linux (및 macOS)에서 사용 lscpu -p
하면 sysctl
이 문제를 무시합니다 .
getconf _NPROCESSORS_ONLN
/ 논리적 CPU 와 물리적 CPU를 getconf NPROCESSORS_ONLN
구분하지 않습니다 .
다음은 온라인 및 논리적 또는 물리적 CPU 수 를 결정하기 위해 Linux 및 macOS 에서 sh
작동 하는 (POSIX 호환) 스 니펫입니다 . 자세한 내용은 의견을 참조하십시오.
용도 lscpu
리눅스 및 sysctl
맥 OS에 대한.
용어 참고 : CPU 는 OS에서 볼 수있는 가장 작은 처리 장치를 나타냅니다. 하이퍼 스레딩 코어는 각각 1 개의 CPU에 해당하는 반면, 하이퍼 스레딩 코어에는 2 개 (일반적으로 2 개)-논리-CPU가 포함됩니다.
Linux는 가장 작은 단위부터 시작 하여 다음 분류법 [1]을 사용합니다 .
각 레벨이 다음 하위 레벨의 인스턴스를 하나 이상 포함하는
CPU < core < socket < book < node
.
#!/bin/sh
# macOS: Use `sysctl -n hw.*cpu_max`, which returns the values of
# interest directly.
# CAVEAT: Using the "_max" key suffixes means that the *maximum*
# available number of CPUs is reported, whereas the
# current power-management mode could make *fewer* CPUs
# available; dropping the "_max" suffix would report the
# number of *currently* available ones; see [1] below.
#
# Linux: Parse output from `lscpu -p`, where each output line represents
# a distinct (logical) CPU.
# Note: Newer versions of `lscpu` support more flexible output
# formats, but we stick with the parseable legacy format
# generated by `-p` to support older distros, too.
# `-p` reports *online* CPUs only - i.e., on hot-pluggable
# systems, currently disabled (offline) CPUs are NOT
# reported.
# Number of LOGICAL CPUs (includes those reported by hyper-threading cores)
# Linux: Simply count the number of (non-comment) output lines from `lscpu -p`,
# which tells us the number of *logical* CPUs.
logicalCpuCount=$([ $(uname) = 'Darwin' ] &&
sysctl -n hw.logicalcpu_max ||
lscpu -p | egrep -v '^#' | wc -l)
# Number of PHYSICAL CPUs (cores).
# Linux: The 2nd column contains the core ID, with each core ID having 1 or
# - in the case of hyperthreading - more logical CPUs.
# Counting the *unique* cores across lines tells us the
# number of *physical* CPUs (cores).
physicalCpuCount=$([ $(uname) = 'Darwin' ] &&
sysctl -n hw.physicalcpu_max ||
lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l)
# Print the values.
cat <<EOF
# of logical CPUs: $logicalCpuCount
# of physical CPUS: $physicalCpuCount
EOF
macOS 이외의 BSD 파생 시스템 (예 : FreeBSD) 은 macOS에서는 더 이상 사용되지 않는에 hw.ncpu
대한 키만 지원합니다 sysctl
. 어떤 새 키가 다음에 hw.npu
해당 하는지 확실하지 않습니다 hw.(logical|physical)cpu_[max]
.
실제 CPU 카운트 lscpu
명령 을 수정하는 데 도움이되는 @teambob의 팁 .
주의 사항 : lscpu -p
출력에는 "book"열이 포함되지 않습니다 ( man
페이지는 분류 체계에서 소켓과 노드 사이의 엔티티로 "books"를 언급합니다). 주어진 Linux 시스템에서 "books"가 재생중인 경우 ( 아무도 언제 어떻게 알 수 있습니까? ) 물리적 CPU-count 명령은 -report 미만일 수 있습니다 (이는 lscpu
고유하지 않은 ID를 더 높은 수준으로 보고 한다는 가정을 기반으로 함) -레벨 엔티티 (예 : 2 개의 다른 소켓에서 2 개의 다른 코어는 동일한 ID를 가질 수 있음)
쉘 스크립트cpus
와 같이 위의 코드 를 저장하고 실행 가능하게 만들고 chmod +x cpus
폴더에 배치 $PATH
하면 다음과 같은 출력이 표시됩니다.
$ cpus
logical 4
physical 4
[1] Xaekai 는 다음과 같은 서적 에 대해 밝힙니다 . " 책 은 CPU 소켓, RAM 소켓, 모서리를 따라 IO 연결 및 냉각 시스템 통합을위한 후크가있는 회로 보드를 수용하는 모듈입니다. 이들은 IBM 메인 프레임에서 사용됩니다. 추가 정보 : http://ewh.ieee.org/soc/cpmt/presentations/cpmt0810a.pdf "
lscpu
사람이 읽을 수있는 형식으로 / proc / cpuinfon 형식의 CPU 아키텍처 정보를 수집합니다.
# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
CPU socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 15
Stepping: 7
CPU MHz: 1866.669
BogoMIPS: 3732.83
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0-7
이것은 나를 위해 일했습니다. tail -nX
마지막 X 줄만 잡을 수 있습니다.
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1
하이퍼 스레딩이있는 경우 물리적 코어 수를 파악하는 데 효과적입니다 .
grep "^core id" /proc/cpuinfo | sort -u | wc -l
cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -l
올바른 숫자를 보여줍니다.
파이썬을 사용할 수도 있습니다! 물리적 코어 수를 얻으려면 :
$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4
하이퍼 스레드 코어 수를 얻으려면 :
$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8
Linux에서 온라인 상태 인 물리적 코어 수를 계산하는 데 사용하는 방법은 다음과 같습니다.
lscpu --online --parse=Core,Socket | grep --invert-match '^#' | sort --unique | wc --lines
또는 짧게 :
lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
예 (1 소켓) :
> lscpu
...
CPU(s): 28
Thread(s) per core: 2
Core(s) per socket: 14
Socket(s): 1
....
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
14
예 (2 소켓) :
> lscpu
...
CPU(s): 56
Thread(s) per core: 2
Core(s) per socket: 14
Socket(s): 2
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
28
예 (소켓 4 개) :
> lscpu
...
CPU(s): 64
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 4
...
> lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
32
getconf를 사용하는 것이 실제로 가장 이식 가능한 방법이지만 변수는 BSD와 Linux에서 getconf와 다른 이름을 가지 므로이 요점에서 제안하는 것처럼 두 가지를 모두 테스트해야합니다. https://gist.github.com/jj1bdx/5746298 (또한 포함 ksh를 사용한 Solaris 수정)
나는 개인적으로 사용합니다 :
$ getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1
그리고 파이썬에서 이것을 원한다면 os 모듈을 가져 와서 syscall getconf 사용을 사용할 수 있습니다.
$ python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);'
에 관해서 nproc
는 GNU Coreutils의 일부이므로 기본적으로 BSD에서는 사용할 수 없습니다. 다른 메소드 후에도 sysconf ()를 사용합니다.
Linux 및 OS X에서 작동하도록하려면 다음을 수행하십시오.
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
다음 방법 중 하나를 사용하여 물리적 CPU 코어 수를 결정할 수 있습니다.
고유 코어 ID 수를 계산합니다 (대략 grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l
).
awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo
'소켓 당 코어 수'에 소켓 수를 곱하십시오.
lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}'
Linux 커널에서 사용하는 고유 논리 CPU 수를 계산하십시오. 이 -p
옵션은 쉽게 구문 분석 할 수 있도록 출력을 생성하며 이전 버전의와 호환됩니다 lscpu
.
lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'
다른 사람들의 말을 반복하기 위해 여러 가지 관련 속성이 있습니다.
사용 가능한 프로세서 수를 확인하려면 다음과 같이하십시오.
getconf _NPROCESSORS_ONLN
grep -cP '^processor\t' /proc/cpuinfo
사용 가능한 처리 장치 수를 결정합니다 (코어 수와 반드시 같을 필요는 없음). 하이퍼 스레딩을 인식합니다.
nproc
토끼 구멍으로 너무 멀리 가고 싶지는 않지만을 통해 구성된 프로세서 수 (단순히 사용 가능한 / 온라인 프로세서가 아닌)를 결정할 수도 있습니다 getconf _NPROCESSORS_CONF
. 총 CPU 수 (오프라인 및 온라인)를 결정하려면의 출력을 구문 분석하려고합니다 lscpu -ap
.
나는 또한 cat /proc/cpuinfo
정답을 줄 것이라고 생각 했지만 최근에 ARM 쿼드 코어 Cortex A53 시스템에 단일 코어 만 표시되는 것을 보았습니다. / proc / cpuinfo는 활성 코어 만 표시하는 것 같습니다.
cat /sys/devices/system/cpu/present
거기에 대한 더 나은 척도입니다. 당신은 또한 수
cat /sys/devices/system/cpu/online
어떤 코어가 온라인 상태인지 확인하고
cat /sys/devices/system/cpu/offline
어떤 코어가 오프라인인지 확인하십시오. online
, offline
및 present
sysfs를 항목은 CPU의 인덱스를 반환 할 정도의 반환 값이 0
반환 값 반면 단지 수단 코어 0 1-3
수단 코어, 2, 3.
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu를 참조 하십시오
다음은 하이퍼 스레드 및 비스 레드 스레드 시스템에서 "실제"코어 수를 제공합니다. 적어도 그것은 모든 테스트에서 효과가있었습니다.
awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 }; END { print CORES*P }' /proc/cpuinfo
0
Opteron 4170 HE가있는 단일 코어에서 반환되지만 4
Opteron 3280이있는 8 개의 코어 상자에서 반환 됩니다. ... 나의 일부는이 단일 라이너가 작동하기를 정말로 원합니다!
내 웹 페이지는 아니지만 http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 의이 명령은 centos에서 잘 작동합니다. 하이퍼 스레딩이 활성화 된 경우에도 실제 CPU를 표시합니다.
cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l
"core id"를 사용할 수없는 경우 (라즈베리와 같이) "processor"수에 폴 백이있는 awk를 사용하여 "physical id"방법 당 "core id"수
echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /proc/cpuinfo)
dmidecode | grep -i cpu | grep Version
나에게 준다
버전 : Intel (R) Xeon (R) CPU E5-2667 v4 @ 3.20GHz
버전 : Intel (R) Xeon (R) CPU E5-2667 v4 @ 3.20GHz
정확한 소켓의 수는 어느 것 - 찾는 것은은 E5-2667
각 소켓이 나에게 말한다 8 cores
때문에 곱셈과 함께 끝 16 cores
에서 2 sockets
.
어디에서 lscpu
나에게 20 CPUs
-완전히 잘못 되었습니까? 왜 그런지 확실하지 않습니다. (와 동일하게 cat /proc/cpu
끝납니다 20
.
이 almsost 모두와 함께 작동 껍질.
ncore=0
while read line ;do
[ "$line" ] && [ -z "${line%processor*}" ] && ncore=$((ncore+1))
done </proc/cpuinfo
echo $ncore
4
호환성을 유지하기 위해 껍질, 대시, 비지 박스그리고 다른 사람들은 ncore=$((ncore+1))
대신에 사용 했습니다 ((ncore++))
.
ncore=0
while read -a line ;do
[ "$line" = "processor" ] && ((ncore++))
done </proc/cpuinfo
echo $ncore
4
파이썬을 사용할 수 있다면 numexpr
모듈에는 다음과 같은 기능이 있습니다.
In [5]: import numexpr as ne
In [6]: ne.detect_number_of_cores()
Out[6]: 8
또한 이것 :
In [7]: ne.ncores
Out[7]: 8
명령 프롬프트에서이 정보를 쿼리하려면 다음을 사용하십시오.
# runs whatever valid Python code given as a string with `-c` option
$ python -c "import numexpr as ne; print(ne.ncores)"
8
또는 단순히이 정보를 multiprocessing.cpu_count()
함수 에서 가져올 수 있습니다
$ python -c "import multiprocessing; print(multiprocessing.cpu_count())"
또는 더 간단하게 사용하십시오 os.cpu_count()
$ python -c "import os; print(os.cpu_count())"
cpu_count
가 잘못 되었습니다. 코어 수는 반환하지 않고 인텔 CPU의 하이퍼 스레드 수만 반환합니다.
물리적 코어를 세고 싶다면이 명령이 도움이되었습니다.
lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w
꽤 기본적이지만 논리적 카운트를 무시하고 실제 물리적 코어를 계산하는 것 같습니다.
파이썬 3은 또한 몇 가지 간단한 방법을 제공합니다.
$ python3 -c "import os; print(os.cpu_count());"
4
$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"
4
요약 : 물리적 CPU 를 얻으려면 다음을 수행하십시오.
grep 'core id' /proc/cpuinfo | sort -u
물리적 및 논리적 CPU 를 얻으려면 다음을 수행하십시오.
grep -c ^processor /proc/cpuinfo
/proc
<< 이것은 프로세스에 필요한 모든 정보의 황금 원천이며
/proc/cpuinfo
<<는 모든 CPU 정보의 황금 소스입니다.
cat
이전 과 같이 할 필요는 없습니다 . 그리고 당신은 "마이너스 하나"없이 들어갑니다.awk
awk '<script>' /proc/cpuinfo
awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo