ฉันใช้คำสั่งต่อไปนี้เพื่อรับจำนวนโปรเซสเซอร์ / คอร์ใน 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/
nproc
มีอยู่ใน Ubuntu VM ของฉัน แต่ไม่มีในเครื่องที่ใช้ RedHat 5.5 ของฉัน
nproc --all
สำหรับหน่วยประมวลผลที่ติดตั้งทั้งหมด โดยไม่ต้อง--all
, nproc
แสดงเฉพาะหน่วยประมวลผลสามารถใช้ได้กับกระบวนการปัจจุบัน อ่านหน้าคนสำหรับรายละเอียดเพิ่มเติม MMV.
เครื่องมือที่ง่ายที่สุดมาพร้อมกับ glibc และเรียกว่าgetconf
:
$ getconf _NPROCESSORS_ONLN
4
nproc
นี้ใช้งานได้ (โดยค่าเริ่มต้น) บน mac os x
_NPROCESSORS_ONLN
(หรืออะไรก็ได้ที่มี cpu, proc และอื่น ๆ ) แสดงอยู่ในเอาต์พุต ฉันหวังว่ามันจะเป็นเครื่องมือ posix ที่ใช้งานได้กับ Linux / Solaris ดังนั้นฉันจึงไม่ต้องใช้การแตกแขนง
ฉันคิดว่าวิธีที่คุณให้นั้นพกพาสะดวกที่สุดบน Linux แทนที่จะวางไข่cat
และwc
กระบวนการที่ไม่จำเป็นคุณสามารถย่อให้สั้นลงเล็กน้อย:
$ grep --count ^processor /proc/cpuinfo
2
หากคุณต้องการทำสิ่งนี้ให้ทำงานบน linux และ OS X คุณสามารถทำได้:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
psrinfo -p
แทน
สำหรับเมล็ดที่ใหม่กว่าคุณสามารถใช้/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
ดูเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติมเกี่ยวกับความหมายทั้งหมดนี้
online
ไฟล์ง่ายกว่าที่ nproc ทำ)
เมื่อมีคนถามหา "จำนวนโปรเซสเซอร์ / คอร์" มี 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
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
สำหรับผู้ที่ต้องการวิธีการนับคอร์ 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
ใช้แทน
อีกหนึ่งซับโดยไม่นับแกนไฮเปอร์เธรด :
lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }'
หากคุณต้องการวิธีการที่ไม่ขึ้นกับระบบปฏิบัติการให้ใช้งานได้กับ Windows และ Linux ใช้ python
$ python -c 'import multiprocessing as m; print m.cpu_count()'
16