Yanıtlar:
nproc
aradığınız şey.
Daha fazla burada: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
nproc
ubuntu sanal makinemde var, ancak RedHat 5.5 tabanlı makinemde yok.
nproc --all
Tüm kurulu İşleme Birimleri için emin olun . Yok --all
, nproc
yalnızca mevcut işlem için kullanılabilen İşleme Birimlerini gösterir. Daha fazla ayrıntı için man sayfasını okuyun. MMV.
En basit araç glibc ile birlikte gelir ve adı getconf
:
$ getconf _NPROCESSORS_ONLN
4
nproc
, bu mac os x'te (varsayılan olarak) çalışır.
_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.
Bence verdiğiniz yöntem Linux'ta en taşınabilir olanı. Gereksiz cat
ve wc
süreçleri üretmek yerine, biraz kısaltabilirsiniz:
$ grep --count ^processor /proc/cpuinfo
2
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)
psrinfo -p
bunun yerine kullanmanız gerekir
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 .
online
dosya, nproc'nin yaptığından daha basit)
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
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
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 egrep
yok, -o
bu yüzden sed
onun yerine kullanılır.