कमांड लाइन से लिनक्स में सीपीयू / कोर की संख्या कैसे प्राप्त करें?


540

मेरे पास यह स्क्रिप्ट है, लेकिन मुझे नहीं पता कि प्रिंटआउट में अंतिम तत्व कैसे प्राप्त करें:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

अंतिम तत्व सीपीयू की संख्या, शून्य से 1 होना चाहिए।


9
आपको catइससे पहले awk, वैसे भी: बस awk '<script>' /proc/cpuinfo, उस तरह की आवश्यकता नहीं है awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo:। और आप "माइनस वन" के बिना मिलता है।
टॉमस गैंडर

सीधे प्रश्न का उत्तर देने के लिए, उस पाइप को tail -n 1जो अंतिम लाइन लेता है और उसे प्रिंट करता है।
फाबियो सांतोस

यह भी देखें unix.stackexchange.com/q/564494/5132
JdeBP

जवाबों:


659
grep -c ^processor /proc/cpuinfo     

में "प्रोसेसर" से शुरू होने वाली लाइनों की संख्या की गणना करेगा /proc/cpuinfo

हाइपर-थ्रेडिंग वाले सिस्टम के लिए, आप उपयोग कर सकते हैं

grep ^cpu\\scores /proc/cpuinfo | uniq |  awk '{print $4}' 

जो लौटना चाहिए (उदाहरण के लिए) 8(जबकि ऊपर की कमांड वापस आएगी 16)


42
ध्यान दें कि ये दोनों वास्तव में कई कोर के रूप में दो बार गिनती को समाप्त करेंगे यदि आप हाइपरथ्रेडिंग (जैसे, पी 4, या कोर आई 7) के साथ एक प्रणाली पर हैं।
डस्कवफ़-एक्टिव-

24
@duskwuff: जो आप ज्यादातर मामलों में चाहते हैं ठीक है।
फ्रैंक केल्स

8
grep -c '^processor' /proc/cpuinfozsh पर।
स्टीवन लू

40
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1यदि CPU नंबर 0-आधारित हैं तो भी गलत नंबर लौटाएगा।
फजोर

3
पहली पंक्ति 1 कोर कम फिर मौजूदा। बेहतर बिल्ली / proc / cpuinfo | awk '/ ^ प्रोसेसर / {प्रिंट $ 3}' | wc -l
मिरको एबर्ट

649

सामग्री को संसाधित करना /proc/cpuinfoअनावश्यक रूप से बारोक है। Nproc का प्रयोग करें जो का हिस्सा है, इसलिए यह अधिकांश लिनक्स इंस्टॉल पर उपलब्ध होना चाहिए।

आदेश nproc वर्तमान प्रक्रिया के लिए उपलब्ध प्रसंस्करण इकाइयों की संख्या को प्रिंट करता है, जो ऑनलाइन प्रोसेसर की संख्या से कम हो सकता है।

सभी स्थापित कोर / प्रोसेसरों की संख्या का पता लगाने के लिए nproc --all

मेरी 8-कोर मशीन पर:

$ nproc --all
8

8
क्या यह आभासी कोर और भौतिक कोर के बीच अंतर करता है?
रिचर्ड

12
यदि मुझे शारीरिक कोर की संख्या की आवश्यकता है तो यह हाइपरथ्रेडिंग के साथ काम नहीं करता है। मेरे क्वाड कोर i7 बॉक्स पर 8 लौटता है।
प्रत्नाला

1
@pratnala - टीमबॉब का जवाब आपको भौतिक कोर की संख्या देने के लिए है।
निक चामास

1
मेरे पुराने ubuntu (10.10) पर nproc उपलब्ध नहीं है। यह एक नया-ईश जोड़ होना चाहिए।
bukzor

3
Unfortunatelly, nprocboot2docker का एक हिस्सा नहीं है
kgadek

269

सबसे पोर्टेबल समाधान जो मुझे मिला है वह है getconfकमांड:

getconf _NPROCESSORS_ONLN

यह लिनक्स और मैक ओएस एक्स दोनों पर काम करता है। कुछ अन्य दृष्टिकोणों पर इसका एक और लाभ यह है कि गेटकॉफ लंबे समय से आसपास है। कुछ पुरानी लिनक्स मशीनों पर मुझे विकास करना है nprocया lscpuउपलब्ध आदेश नहीं हैं, लेकिन उनके पास है getconf

संपादक की टिप्पणी: एक ओर जहां उपयोगिता POSIX-अनिवार्य है , विशिष्ट और मूल्यों नहीं हैं। जैसा कि कहा गया है, वे लिनक्स प्लेटफॉर्म के साथ-साथ मैकओएस पर भी काम करते हैं; FreeBSD / PC-BSD पर, आपको अग्रणी को छोड़ना होगा ।getconf _NPROCESSORS_ONLN_NPROCESSORS_CONF _


11
इसने मेरे लिए Red Hat Entreprise Linux 5.4, Centos 6.5 और 7 और Mac OSX 10.9 (Mavericks) पर काम किया। ऐसा लगता है कि यह सबसे पोर्टेबल है, क्योंकि इन प्रणालियों पर डिफ़ॉल्ट रूप से lscpu स्थापित नहीं है। धन्यवाद!
big_gie

1
मैं सहमत हूँ। यह काफी पोर्टेबल है।
bukzor

8
तो पोर्टेबल यह POSIX में है :) pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html
BCran

1
@ Bran मैं _NPROCESSORS_ONLNPOSIX में नहीं मिला । क्या आप इसे लिंक कर सकते हैं?
सिरो सेंटिल्ली 郝海东 i i i 法轮功 '

3
@CiroSantilli 六四 事件 ill 威 ub ub github.com/gstrauss/plasma/blob/master/plasma_sysconf.c से ऐसा लगता है कि मैं गलत था: यह केवल वैकल्पिक है। "sysconf _SC_NPROCESSORS_ONLN और _SC_NPROCESSORS_CONF मानकों द्वारा आवश्यक नहीं हैं, लेकिन कई यूनिक्स प्लेटफार्मों पर प्रदान किए जाते हैं और ओपन ग्रुप द्वारा वैकल्पिक रूप में प्रलेखित किए जाते हैं।"
बीकानेर

100

प्रस्तावना:

  • -Bbed उत्तरों के साथ समस्या/proc/cpuinfo यह है कि वे उन सूचनाओं को पार्स करते हैं जो मानव उपभोग के लिए थी और इस प्रकार मशीन पार्सिंग के लिए डिज़ाइन किए गए एक स्थिर प्रारूप का अभाव है : आउटपुट स्वरूप प्लेटफ़ॉर्म और रनटाइम स्थितियों में भिन्न हो सकते हैं; का उपयोग करते हुए lscpu -pलिनक्स (और पर sysctlपर MacOS) है कि समस्या को नजरअंदाज

  • getconf _NPROCESSORS_ONLN/ तार्किक और भौतिक CPU के getconf NPROCESSORS_ONLNबीच अंतर नहीं करता है ।


यहाँ sh(POSIX-compliant) स्निपेट है, जो लिनक्स पर काम करता है और macOS - ऑनलाइन - तार्किक या भौतिक सीपीयू की संख्या निर्धारित करता है ; विवरण के लिए टिप्पणियाँ देखें।

lscpuलिनक्स के लिए, और sysctlmacOS के लिए उपयोग करता है ।

शब्दावली नोट : सीपीयू ओएस द्वारा देखी गई सबसे छोटी प्रसंस्करण इकाई को संदर्भित करता है। गैर-हाइपर-थ्रेडिंग कोर प्रत्येक सीपीयू के अनुरूप होते हैं, जबकि हाइपर-थ्रेडिंग कोर में 1 से अधिक होते हैं (आमतौर पर: 2) - तार्किक - सीपीयू।
लिनक्स निम्न वर्गीकरण का उपयोग करता है [1] , सबसे छोटी इकाई से शुरू होता है:
सीपीयू < कोर < सॉकेट < बुक < नोड
प्रत्येक स्तर के साथ अगले निचले स्तर के 1 या अधिक उदाहरण शामिल हैं।

#!/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 sysctl (3)प्रलेखन

ध्यान दें कि बीएसडी-व्युत्पन्न सिस्टम macOS के अलावा - उदाहरण के लिए, FreeBSD - केवल उस hw.ncpuकुंजी का समर्थन करते sysctlहैं, जो macOS में अपग्रेड किए जाते हैं; मैं स्पष्ट नहीं कर रहा हूँ नई चाबियों का है जिस पर hw.npuसे मेल खाती है: hw.(logical|physical)cpu_[max]

शारीरिक-सीपीयू-गिनती lscpuकमांड को सही करने में मदद के लिए @teambob को टोपी की टिप ।

कैविएट : lscpu -pआउटपुट में "पुस्तक" कॉलम ( manपृष्ठ में "पुस्तकों" का उल्लेख नहीं किया गया है, जो कि टैक्सोनोमिक पदानुक्रम में सॉकेट और नोड के बीच एक इकाई के रूप में है)। यदि "पुस्तकें" किसी दिए गए लिनक्स सिस्टम पर चलती हैं ( क्या किसी को पता है कि कब और कैसे? ), भौतिक-सीपीयू-गिनती कमांड अंडर -पोर्ट हो सकता है (यह इस धारणा पर आधारित है कि lscpuआईडी जो उच्चतर गैर-अद्वितीय हैं, रिपोर्ट करती है -वेले एंटिटीज़ ; उदाहरण: 2 अलग-अलग सॉकेट्स से 2 अलग-अलग कोर में एक ही आईडी हो सकती है)।


यदि आप ऊपर दिए गए कोड को सहेजते हैं, जैसे कि शेल स्क्रिप्टcpus , इसे निष्पादन योग्य बनाते हैं chmod +x cpusऔर इसे अपने फ़ोल्डर में रखते हैं $PATH, तो आपको निम्न जैसे आउटपुट दिखाई देंगे:

$ cpus
logical  4
physical 4

[1] एक पुस्तक क्या है, इस पर Xaekai प्रकाश डालती है: "एक पुस्तक एक मॉड्यूल है जिसमें सीपीयू सॉकेट, रैम सॉकेट, किनारे के साथ आईओ कनेक्शन और शीतलन प्रणाली एकीकरण के लिए एक हुक के साथ एक सर्किट बोर्ड होता है। इनका उपयोग आईबीएमफ्रेम में किया जाता है। । आगे की जानकारी: http://ewh.ieee.org/soc/cpmt/pretations/cpmt0810a.pv "


1
क्षमा करें, आप सॉर्ट कमांड के बारे में सही हैं। मुझे lscpu मैनुअल से परे पुस्तकों के बारे में कोई जानकारी नहीं मिल सकती है। मुझे लगता है कि यह NUMA en.wikipedia.org/wiki/Non-uniform_memory_access
टीमबॉब

2
मुझे लगता है कि यहां अधिकांश समाधान इस के विपरीत, मल्टी-सॉकेट मशीनों की उपेक्षा करते हैं। धन्यवाद!
dividebyzero

1
लिनक्स के संदर्भ में, कई संदर्भ हैं जहां lscpu उपलब्ध नहीं है, जैसे कि इंस्टॉलर छवियां। मुझे यह पसंद है .. काश यह सर्वव्यापी होता।
ब्रायन क्रिसमैन

43

lscpu मानव-पढ़ने में सक्षम प्रारूप में सीपीयू आर्किटेक्चर सूचना फार्म / प्रॉप / सीपीयूएफफोन इकट्ठा करता है:

# 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

Https://unix.stackexchange.com/questions/468766/understanding-output-of-lscpu भी देखें


13

इसने मेरे लिए काम किया। tail -nXआपको केवल अंतिम एक्स लाइनों को हथियाने की अनुमति देता है।

cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1

यदि आपके पास हाइपरथ्रेडिंग है, तो यह भौतिक कोर की संख्या को हथियाने के लिए काम करना चाहिए ।

grep "^core id" /proc/cpuinfo | sort -u | wc -l

1
कुल भौतिक कोर के लिए "^ कोर आईडी" या सिर्फ एक प्रोसेसर पर पी-कोर है?
रिचर्ड

1
सिस्टम में अद्वितीय भौतिक कोर प्रति एक कोर आईडी लाइन है। मुझे नहीं पता कि दूसरे भौतिक प्रोसेसर के लिए संख्या शून्य पर शुरू होगी या नहीं ...
lunixbochs

1
यदि आपके पास एक से अधिक भौतिक प्रोसेसर हैं, तो आपको "भौतिक आईडी" देखने की भी आवश्यकता होगी।
ऐनी

पहली लाइन मेरे काम की नहीं थी। यह मेरे लिए काम करता है। cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -lऔर सही संख्या दिखाता है।
jaylweb

11

भौतिक कोर की कुल संख्या के लिए:

grep '^core id' /proc/cpuinfo |sort -u|wc -l

एकाधिक-सॉकेट मशीनों पर (या हमेशा), सॉकेट्स की संख्या से उपरोक्त परिणाम को गुणा करें:

echo $(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1)+1))

@ mklement0 के पास lscpu का उपयोग करने के नीचे काफी अच्छा जवाब है। मैंने टिप्पणियों में अधिक संक्षिप्त संस्करण लिखा है


10

आप पायथन का उपयोग भी कर सकते हैं! भौतिक कोर की संख्या प्राप्त करने के लिए:

$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4

हाइपरथ्रेडेड कोर की संख्या प्राप्त करने के लिए:

$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8

अजगर 2.7.15 के साथ ये कमांड कुछ भी प्रिंट नहीं करते हैं। REPL में वे करते हैं।
Vytenis Bivainis

1
@VytenisBivainis धन्यवाद, मैंने अपना जवाब तय किया!
ओस्ट्रोकैच

9

लिनक्स, मैकओएस, विंडोज के लिए क्रोसप्लेट रिकॉर्डर समाधान:

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

9

यहाँ मैं भौतिक कोर की संख्या की गणना के लिए उपयोग कर रहा हूँ जो लिनक्स पर ऑनलाइन हैं:

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

कई सॉकेट्स को काम करता है और संभालता है
jbo5112

यह सबसे अच्छा जवाब है।
जोर्मा रीबेन

7

गेटकॉफ़ का उपयोग करना वास्तव में सबसे पोर्टेबल तरीका है, हालांकि वेरिएबल में बीएसडी और लिनक्स के लिए अलग-अलग नाम हैं, इसलिए आपको दोनों का परीक्षण करना होगा, क्योंकि यह सुझाव देता है: https://gist.github.com/jj1bdx/57/29298 (भी शामिल है) ksh का उपयोग कर एक सोलारिस फिक्स)

मैं व्यक्तिगत रूप से उपयोग करता हूं:

$ getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1

और अगर आप अजगर में यह चाहते हैं तो आप बस ओएस मॉड्यूल आयात करके syscall getconf उपयोग कर सकते हैं:

$ python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);'

के रूप में nproc, यह GNU Coreutils का हिस्सा है, इसलिए डिफ़ॉल्ट रूप से BSD में उपलब्ध नहीं है। यह कुछ अन्य तरीकों के बाद sysconf () का उपयोग करता है।


6

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

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

खदान पर, यह हाइपरथ्रेड्स की संख्या लौटाता है। मुझे भौतिक कोर की संख्या और सॉकेट की संख्या भी जानने की आवश्यकता होगी।
user2465201

ठीक है - hw.physicalcpu के साथ ठीक वही कमांड मूल गणना देता है। सॉकेट काउंट के बारे में अभी तक निश्चित नहीं है ... एक "तार्किक" और "सक्रिय" सीपीयू काउंट भी है, लेकिन मुझे यकीन नहीं है कि इसका क्या मतलब है।
user2465201

त्वरित अद्यतन - यह इतना पोर्टेबल नहीं लगता है। मैंने इसे एक लिनक्स बॉक्स पर आज़माया, और ऐसा लगता है कि बस / proc निर्देशिकाओं को पढ़ना है, जो सभी लिनक्स सिस्टम के लिए मैक से अलग हैं - उदाहरण के लिए, कोई hw उपनिर्देशिका नहीं है। कहा जा रहा है, आप अभी भी पार्स / खरीद /
cpuinfo


3

भौतिक CPU कोर की संख्या निर्धारित करने के लिए आप निम्न विधियों में से एक का उपयोग कर सकते हैं ।

  • अद्वितीय कोर आईडी की संख्या (लगभग बराबर 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}'

  • लिनक्स कर्नेल द्वारा उपयोग किए गए अद्वितीय तार्किक सीपीयू की संख्या की गणना करें। -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। सीपीयू की कुल संख्या (ऑफलाइन और ऑनलाइन) निर्धारित करने के लिए आप आउटपुट को पार्स करना चाहते हैं lscpu -ap


यह सही उत्तर है यदि आप भौतिक कोर चाहते हैं।
दिनेश

3

मैंने भी सोचा था cat /proc/cpuinfoकि मुझे सही उत्तर मिलेगा, हालांकि मैंने हाल ही में देखा कि मेरा एआरएम क्वाड कोर कोर्टेक्स ए 53 सिस्टम केवल एक ही कोर दिखा। ऐसा लगता है कि / proc / cpuinfo केवल सक्रिय कोर दिखाता है, जबकि:

cat /sys/devices/system/cpu/present

वहाँ क्या है का एक बेहतर उपाय है। आप भी कर सकते हैं

cat /sys/devices/system/cpu/online

यह देखने के लिए कि कौन सी कोर ऑनलाइन हैं, और

cat /sys/devices/system/cpu/offline

यह देखने के लिए कि कौन सी कोर ऑफ़लाइन हैं। online, offline, और presentsysfs प्रविष्टियों, CPU की सूचकांक वापसी तो की वापसी मूल्य 0सिर्फ साधन कोर 0, जबकि की वापसी मूल्य 1-3साधन कोर 1,2, और 3।

Https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu पर देखें


2

निम्नलिखित आपको हाइपरथ्रेडेड और गैर-हाइपरथ्रेडेड सिस्टम दोनों पर "वास्तविक" कोर की संख्या देनी चाहिए। कम से कम इसने मेरे सभी परीक्षणों में काम किया।

awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 };  END { print CORES*P }' /proc/cpuinfo

-1, यह 0एक ओपेरॉन 4170 HE के साथ एक एकल कोर पर लौटता है, लेकिन 4एक Opteron 3280 के साथ आठ कोर बॉक्स पर रिटर्न करता है। ... मेरे हिस्से में वास्तव में यह एक-लाइनर काम करेगा!
ज़मानट्स

1

मेरा वेब पेज नहीं है, लेकिन यह http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000-1450827902 सेंटो पर मेरे लिए अच्छा काम करता है। यह हाइपरथ्रेडिंग सक्षम होने पर भी वास्तविक सीपीयू दिखाएगा।

cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l


+1, "lscpu -p = Core, सॉकेट" के समाधान से अधिक लंबा है, लेकिन सीधे पार्सिंग / proc / cpuinfo काम करता है, lscpu की कोई आवश्यकता नहीं है।
फ्रावाडोना

1

यदि "कोर आईडी" उपलब्ध नहीं है, तो "प्रोसेसर" पर "बैक" के साथ "कोर आईडी" की गणना करें। "कोर आईडी" उपलब्ध नहीं है।

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)

1
cat /proc/cpuinfo | grep processor

यह ठीक काम किया। जब मैंने पहला उत्तर देने की कोशिश की तो मुझे आउटपुट के रूप में 3 सीपीयू मिला। मुझे पता है कि मेरे पास सिस्टम पर 4 सीपीयू हैं इसलिए मैंने सिर्फ grepप्रोसेसर के लिए किया और आउटपुट इस तरह दिखता है:

[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

1
 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


1

तेज, बिना कांटा

यह काम सभी को एक साथ करना है

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

यह पोस्ट String to Bash में इस उत्तर से जुड़ा हुआ है !
एफ। हौरी

1

यदि यह ठीक है कि आप पायथन का उपयोग कर सकते हैं, तो इसके लिए 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())"

1
क्या अजगर में एक आदेश के रूप में इस काम को बनाने का एक तरीका है? उदाहरण के लिए मैंने पायथन एम-एम न्यूक्प्रप्र.नोरस की कोशिश की लेकिन वह काम नहीं करता है।
महाशयबील्टो

1
@MonsieurBeilto अद्यतन जवाब पर एक नज़र है!
किमीरियो 23

द्वारा दी गई गिनती cpu_countगलत है, यह कोर की संख्या नहीं
लौटाती है

1

यदि आप केवल भौतिक कोर गिनना चाहते हैं, तो यह आदेश मेरे लिए था।

lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w

सुंदर बुनियादी, लेकिन तार्किक गिनती को नजरअंदाज करते हुए वास्तविक भौतिक कोर की गणना करता है


0

पायथन 3 इसे प्राप्त करने के लिए कुछ सरल तरीके भी प्रदान करते हैं:

$ python3 -c "import os; print(os.cpu_count());"

4

$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"

4


यह मेरे लिए 8 वापसी करता है जब मेरे पास प्रत्येक पर 2 धागे के साथ 4 कोर होते हैं ...
एंटी हापाला


0

सारांश: भौतिक सीपीयू ऐसा करने के लिए:

grep 'core id' /proc/cpuinfo | sort -u

भौतिक और तार्किक CPU प्राप्त करने के लिए ऐसा करें:

grep -c ^processor /proc/cpuinfo

/proc << यह किसी भी जानकारी का स्वर्णिम स्रोत है जिसकी आपको प्रक्रियाओं के बारे में आवश्यकता है और

/proc/cpuinfo << किसी भी CPU जानकारी का सुनहरा स्रोत है।


भौतिक CPU गिनती बहु-सॉकेट कंप्यूटर के साथ काम नहीं करती है; है कि आप अपनी 'शारीरिक आईडी' के लिए प्रत्येक 'कोर आईडी' संबद्ध करने की आवश्यकता के लिए।
फ्रावाडोना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.