कमांड लाइन में प्रोसेसर / कोर की संख्या


108

मैं लिनक्स में प्रोसेसर / कोर की संख्या प्राप्त करने के लिए निम्नलिखित कमांड चला रहा हूं:

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

यह काम करता है लेकिन यह सुरुचिपूर्ण नहीं दिखता है। आप इसे कैसे सुधारने का सुझाव देंगे?


जवाबों:


138

nproc वह है जो आप ढूंढ रहे हैं।

यहाँ और अधिक: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-commun/


11
अच्छा - लेकिन उतना नहीं, जितना / खरीद / cpuinfo के रूप में सर्वव्यापी। nprocमेरे ubuntu वीएम पर है, लेकिन मेरे रेडहैट 5.5-आधारित मशीन पर नहीं है।
डिजिटल ट्रामा

8
nproc --allसभी स्थापित प्रसंस्करण इकाइयों के लिए सुनिश्चित करें । बिना --all, nprocकेवल वर्तमान प्रक्रिया के लिए उपलब्ध प्रसंस्करण इकाइयाँ दिखाता है। अधिक जानकारी के लिए मैन पेज पढ़ें। MMV।
जेम्सटॉमसमा 1919

96

सबसे सरल उपकरण ग्लिबक के साथ आता है और इसे कहा जाता है getconf:

$ getconf _NPROCESSORS_ONLN
4

8
इससे भी बेहतर, यह एक POSIX उपयोगिता है: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html
बीकानेर

2
इसके विपरीत nproc, यह मैक ओएस एक्स पर (डिफ़ॉल्ट रूप से) काम करता है।
एलेक जैकबसन

दुर्भाग्य से, जबकि यह उपयोगिता सोलारिस पर उपलब्ध है, _NPROCESSORS_ONLN(या सीपीयू, प्रोक, आदि के साथ कुछ भी) इसके आउटपुट में सूचीबद्ध है। मैं उम्मीद कर रहा था क्योंकि यह एक पॉज़िक्स टूल है जो लिनक्स / सोलारिस पर काम करेगा इसलिए मुझे ब्रांचिंग का उपयोग नहीं करना पड़ा।
ब्रायन वैंडेनबर्ग

39

मुझे लगता है कि आपके द्वारा दिया गया तरीका लिनक्स पर सबसे पोर्टेबल है। अनावश्यक catऔर wcप्रक्रियाओं को कम करने के बजाय , आप इसे थोड़ा छोटा कर सकते हैं:

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

25

यदि आप ऐसा करना चाहते हैं तो यह linux और OS X पर काम करता है, आप कर सकते हैं:

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

अच्छी पोर्टेबल स्क्रिप्ट :)
mircealungu

2
सोलारिस पर आप उपयोग करने की आवश्यकता psrinfo -pके बजाय
एमईएमएस

14

नई गुठली पर आप संभवतः /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

इन सभी का क्या अर्थ है, इस बारे में अधिक जानकारी के लिए आधिकारिक डॉक्स देखें ।


2
nproc इसका उपयोग करता है, ज्यादातर ($ OMP_NUM_THREADS फिर रीडिर sysfs)। मुझे लगता है कि यह एक बेहतर इंटरफ़ेस है।
टोबू

2
और गेटकॉफ़ भी इस इंटरफ़ेस पर निर्भर करता है ( onlineफ़ाइल, nproc क्या करता है की तुलना में सरल)
टोबू

6

जब कोई "प्रोसेसर / कोर की संख्या" पूछता है, तो 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 भौतिक Xeon X5650 भौतिक प्रोसेसर के साथ एक मशीन पर परिणाम 6 भौतिक कोर के साथ प्रत्येक जो हाइपरथ्रेडिंग का समर्थन करता है:

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

मशीन पर 2 mdeol Xeon E5472 प्रोसेसर के साथ प्रत्येक 4 भौतिक कोर के साथ है जो हाइपरथ्रेडिंग का समर्थन नहीं करता है

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

यह सबसे गहन उत्तर है जिसने मुझे वह जानकारी दी जिसकी मुझे तलाश थी।
वुडटॉस्टर

4

उपयोग -लाइनक्स परियोजना 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

1

यह उन लोगों के लिए है जो * bsd, * nix या Solaris पर cpu cores को गिनने के लिए एक पोर्टेबल तरीका चाहते हैं (यह aix और hp-ux पर परीक्षण नहीं किया गया है लेकिन काम करना चाहिए)। इसने हमेशा मेरे लिए काम किया है।

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

इसके बजाय सोलारिस grepऔर विकल्प का उपयोग egrepनहीं किया जाता है।-osed


1

एक और वन-लाइनर, हाइपर-थ्रेडेड कोर की गिनती के बिना :

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

0

यदि आपको ओएस स्वतंत्र विधि की आवश्यकता है, तो विंडोज और लिनक्स पर काम करता है। अजगर का उपयोग करें

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.