จำนวนโปรเซสเซอร์ / คอร์ในบรรทัดคำสั่ง


109

ฉันใช้คำสั่งต่อไปนี้เพื่อรับจำนวนโปรเซสเซอร์ / คอร์ใน Linux:

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

ใช้งานได้ แต่ดูไม่หรูหรา คุณจะแนะนำให้ปรับปรุงอย่างไร


ความเป็นไปได้ที่ซ้ำกันของObtain the number of CPUs / cores in Linux
Ciro Santilli 郝海东冠状病六四事件法轮功

คำตอบ:


138

nproc คือสิ่งที่คุณกำลังมองหา

เพิ่มเติมที่นี่: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
ดี - แต่ไม่แพร่หลายเท่า / proc / cpuinfo nprocมีอยู่ใน Ubuntu VM ของฉัน แต่ไม่มีในเครื่องที่ใช้ RedHat 5.5 ของฉัน
Digital Trauma

8
ตรวจสอบให้แน่ใจnproc --allสำหรับหน่วยประมวลผลที่ติดตั้งทั้งหมด โดยไม่ต้อง--all, nprocแสดงเฉพาะหน่วยประมวลผลสามารถใช้ได้กับกระบวนการปัจจุบัน อ่านหน้าคนสำหรับรายละเอียดเพิ่มเติม MMV.
JamesThomasMoon1979

96

เครื่องมือที่ง่ายที่สุดมาพร้อมกับ glibc และเรียกว่าgetconf:

$ getconf _NPROCESSORS_ONLN
4

8
ยิ่งไปกว่านั้นมันเป็นยูทิลิตี้ POSIX: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html
BCran

2
ซึ่งแตกต่างจากnprocนี้ใช้งานได้ (โดยค่าเริ่มต้น) บน mac os x
Alec Jacobson

น่าเสียดายที่ในขณะที่ยูทิลิตี้นี้มีอยู่ใน Solaris _NPROCESSORS_ONLN(หรืออะไรก็ได้ที่มี cpu, proc และอื่น ๆ ) แสดงอยู่ในเอาต์พุต ฉันหวังว่ามันจะเป็นเครื่องมือ posix ที่ใช้งานได้กับ Linux / Solaris ดังนั้นฉันจึงไม่ต้องใช้การแตกแขนง
Brian Vandenberg

39

ฉันคิดว่าวิธีที่คุณให้นั้นพกพาสะดวกที่สุดบน Linux แทนที่จะวางไข่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
ใน Solaris คุณต้องใช้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) ฉันคิดว่าอันนี้เป็นอินเทอร์เฟซที่ดีกว่า
Tobu

2
และ getconf ยังอาศัยอินเทอร์เฟซนี้ ( onlineไฟล์ง่ายกว่าที่ nproc ทำ)
Tobu

6

เมื่อมีคนถามหา "จำนวนโปรเซสเซอร์ / คอร์" มี 2 คำตอบที่ถูกร้องขอ จำนวน "โปรเซสเซอร์" จะเป็นหมายเลขทางกายภาพที่ติดตั้งในซ็อกเก็ตบนเครื่อง

จำนวน "คอร์" จะเป็นแกนทางกายภาพ แกน Hyperthreaded (เสมือน) จะไม่รวมอยู่ด้วย (อย่างน้อยก็ในใจของฉัน) ในฐานะคนที่เขียนโปรแกรมจำนวนมากด้วยเธรดพูลคุณจำเป็นต้องทราบจำนวนคอร์จริงเทียบกับคอร์ / ไฮเปอร์เธรด ดังกล่าวคุณสามารถแก้ไขสคริปต์ต่อไปนี้เพื่อรับคำตอบที่คุณต้องการ

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

ผลลัพธ์ของเครื่องที่มีโปรเซสเซอร์ทางกายภาพ Xeon X5650 2 รุ่นซึ่งแต่ละตัวมีแกนทางกายภาพ 6 คอร์ที่รองรับไฮเปอร์เธรด:

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

บนเครื่องที่มีโปรเซสเซอร์ Xeon E5472 2 mdeol แต่ละตัวมี 4 คอร์ทางกายภาพที่ไม่รองรับไฮเปอร์เธรด

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

นี่คือคำตอบที่ละเอียดถี่ถ้วนที่สุดที่ให้ข้อมูลที่ฉันต้องการ
woodenToaster

4

lscpu(1)คำสั่งให้โดยutil ลินุกซ์โครงการนอกจากนี้ยังอาจจะมีประโยชน์:

$ 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

สำหรับผู้ที่ต้องการวิธีการนับคอร์ cpu แบบพกพาบน * bsd, * nix หรือ solaris (ยังไม่ได้ทดสอบกับ aix และ hp-ux แต่ควรใช้งานได้) มันได้ผลสำหรับฉันเสมอ

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

โซลาริสgrep& egrepไม่มี-oตัวเลือกจึงsedใช้แทน



0

หากคุณต้องการวิธีการที่ไม่ขึ้นกับระบบปฏิบัติการให้ใช้งานได้กับ Windows และ Linux ใช้ python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.