我運行下面的命令來獲得Linux的處理器/核心數量的處理器數/核:在命令行
cat /proc/cpuinfo | grep processor | wc -l
它的工作原理,但它看起來並不優雅。你會如何改進它?
我運行下面的命令來獲得Linux的處理器/核心數量的處理器數/核:在命令行
cat /proc/cpuinfo | grep processor | wc -l
它的工作原理,但它看起來並不優雅。你會如何改進它?
nproc
是你在找什麼。
這裏更多:http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/
不錯 - 但不像普通/ proc/cpuinfo那樣普遍。 'nproc'在我的ubuntu虛擬機上,但不在我的基於RedHat 5.5的機器上。 –
確保所有已安裝的處理單元都有'nproc --all'。如果沒有'--all','nproc'只顯示當前進程可用的處理單元。 閱讀手冊頁以獲取更多詳細信息。 MMV。 – JamesThomasMoon1979
我覺得你給的方法是最便攜的Linux操作系統。相反產卵不必要cat
和wc
過程,可以縮短這一點:
$ grep --count ^processor /proc/cpuinfo
2
在較新的內核,你也可以有可能使用的/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
見the official docs瞭解所有這些含義的更多信息。
如果你想這樣做,因此它可以在Linux和OS X,你可以這樣做:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
不錯的可移植腳本:) – mircealungu
在Solaris上,你需要使用'psrinfo -p'而不是 – mems
用最簡單的工具自帶的glibc,被稱爲getconf
:
$ getconf _NPROCESSORS_ONLN
4
這應該是被接受的答案。發現。 –
更好的是,它是一個POSIX實用程序:http://pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html。 – BCran
這是唯一一個爲我工作的人。謝謝。 –
的由的util-linux的項目提供lscpu(1)
命令也可能是有用的:
$ 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 ' '
的Solaris grep
& egrep
沒有-o
選項,這樣sed
來代替。
另外一個內膽,沒有計數超線程內核:
lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }'
如果你需要一個操作系統獨立的方法,可跨Windows和Linux。使用python
$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
當有人要求「處理器/內核的數量」時,有2個要求的答案。 「處理器」的數量將是機器上插槽中安裝的物理編號。
「核心」的數量將是物理核心。超線程(虛擬)內核將不會被包含在內(至少在我看來)。作爲使用線程池編寫大量程序的人,您確實需要知道物理內核數與核心數/超線程數。也就是說,你可以修改下面的腳本來獲得你需要的答案。
#!/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"
一臺機器上的結果與2模型至強X5650物理處理器每組6個物理內核也支持超線程:
Type model name : Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24
在一臺具有2 mdeol至強E5472處理器,每個有4個物理內核不支持超線程
Type model name : Intel(R) Xeon(R) CPU E5472 @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8
這是給我提供我正在尋找的信息的最徹底的答案。 – woodenToaster
[在Linux中獲取CPU的數目/核]的可能重複(http://stackoverflow.com/questions/6481005/obtain-the-number-of-cpus-cores -一世n-linux) –