Komut satırındaki işlemci / çekirdek sayısı


Yanıtlar:


138

nproc aradığınız şey.

Daha fazla burada: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
Güzel - ama / proc / cpuinfo kadar her yerde değil. nprocubuntu sanal makinemde var, ancak RedHat 5.5 tabanlı makinemde yok.
Dijital Travma

8
nproc --allTüm kurulu İşleme Birimleri için emin olun . Yok --all, nprocyalnızca mevcut işlem için kullanılabilen İşleme Birimlerini gösterir. Daha fazla ayrıntı için man sayfasını okuyun. MMV.
JamesThomasMoon1979

96

En basit araç glibc ile birlikte gelir ve adı getconf:

$ getconf _NPROCESSORS_ONLN
4

8
Daha da iyisi, bir POSIX yardımcı programıdır: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html .
BCRAN

2
aksine nproc, bu mac os x'te (varsayılan olarak) çalışır.
Alec Jacobson

Ne yazık ki, bu yardımcı program Solaris'te mevcutken _NPROCESSORS_ONLN(veya cpu, proc, vb. Olan herhangi bir şey) çıktısında listelenmiştir. Bir posix aracı olduğu için Linux / Solaris üzerinde çalışacağını umuyordum, bu yüzden dallanma kullanmak zorunda kalmadım.
Brian Vandenberg

39

Bence verdiğiniz yöntem Linux'ta en taşınabilir olanı. Gereksiz catve wcsüreçleri üretmek yerine, biraz kısaltabilirsiniz:

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

25

Bunu linux ve OS X üzerinde çalışması için yapmak istiyorsanız, şunları yapabilirsiniz:

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

nice portable script :)
mircealungu

2
Solaris'te psrinfo -pbunun yerine kullanmanız gerekir
mems

14

Daha yeni çekirdeklerde, /sys/devices/system/cpu/arayüzü biraz daha fazla bilgi almak için de kullanabilirsiniz :

$ 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

Tüm bunların ne anlama geldiğiyle ilgili daha fazla bilgi için resmi belgelere bakın .


2
nproc bunu çoğunlukla ($ OMP_NUM_THREADS sonra readdir sysfs) kullanır. Bence bu daha iyi bir arayüz.
Tobu

2
Ve getconf da bu arayüze güveniyor ( onlinedosya, nproc'nin yaptığından daha basit)
Tobu

6

Birisi "işlemci / çekirdek sayısı" sorduğunda 2 yanıt isteniyor. "İşlemci" sayısı, makinedeki soketlere takılan fiziksel sayı olacaktır.

"Çekirdek" sayısı fiziksel çekirdekler olacaktır. Hiper iş parçacıklı (sanal) çekirdekler dahil edilmeyecek (en azından aklıma). İş parçacığı havuzları olan çok sayıda program yazan biri olarak, çekirdek / hiper iş parçacığına karşı fiziksel çekirdek sayısını gerçekten bilmeniz gerekir. Bununla birlikte, ihtiyacınız olan cevapları almak için aşağıdaki komut dosyasını değiştirebilirsiniz.

#!/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"

Her biri hiper iş parçacığını destekleyen 6 fiziksel çekirdeğe sahip 2 model Xeon X5650 fiziksel işlemciye sahip bir makinede sonuç:

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

Her biri hiper iş parçacığını desteklemeyen 4 fiziksel çekirdeğe sahip 2 mdeol Xeon E5472 işlemciye sahip bir makinede

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

Bu, bana aradığım bilgiyi veren en kapsamlı cevaptı.
woodenToaster

4

lscpu(1)Tarafından sağlanan komut util-linux projesi de yararlı olabilir:

$ 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

1

Bu, cpu çekirdeklerini * bsd, * nix veya solaris üzerinde saymanın taşınabilir bir yolunu isteyenler içindir (aix ve hp-ux üzerinde test edilmemiş ancak çalışmalıdır). Benim için her zaman çalıştı.

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

solaris grep& seçeneğiniz egrepyok, -obu yüzden sedonun yerine kullanılır.


1

Başka bir astar olmadan sayım hiper parçacıklı çekirdek :

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

0

İşletim sisteminden bağımsız bir yönteme ihtiyacınız varsa, Windows ve Linux'ta çalışır. Python kullan

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.