เพื่อให้ได้ภาพที่สมบูรณ์แบบที่คุณต้องดูที่จำนวนของหัวข้อต่อหลักแกนต่อซ็อกเก็ตและซ็อกเก็ต หากคุณคูณตัวเลขเหล่านี้คุณจะได้รับจำนวนCPUในระบบของคุณ
CPUs = เธรดต่อ core X แกนต่อซ็อกเก็ต X ซ็อกเก็ต
ซีพียูคือสิ่งที่คุณเห็นเมื่อคุณเรียกใช้htop
(สิ่งเหล่านี้ไม่เท่ากับ CPU จริง)
นี่คือตัวอย่างจากเครื่องเดสก์ท็อป:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
และเซิร์ฟเวอร์:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
การส่งออกของnproc
สอดคล้องกับจำนวนของ CPU lscpu
จาก สำหรับเครื่องเดสก์ท็อปด้านบนสิ่งนี้ควรตรงกับ 8 CPU ที่รายงานโดยlscpu
:
$ nproc --all
8
ผลลัพธ์ของ/proc/cpuinfo
ควรตรงกับข้อมูลนี้ตัวอย่างเช่นในระบบเดสก์ท็อปด้านบนเราจะเห็นว่ามีโปรเซสเซอร์ 8 ตัว (CPUs) และ 4 คอร์ (คอร์ id 0-3):
$ grep -E 'processor|core id' /proc/cpuinfo
processor : 0
core id : 0
processor : 1
core id : 0
processor : 2
core id : 1
processor : 3
core id : 1
processor : 4
core id : 2
processor : 5
core id : 2
processor : 6
core id : 3
processor : 7
core id : 3
cpu cores
รายงานโดย/proc/cpuinfo
สอดคล้องกับรายงานโดยCore(s) per socket
lscpu
สำหรับเครื่องเดสก์ท็อปด้านบนสิ่งนี้ควรตรงกับ 4 คอร์ต่อซ็อกเก็ตที่รายงานโดย lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
ในการตอบคำถามของคุณโดยเฉพาะคุณบอกจำนวนคอร์ที่คุณมีโดยการคูณจำนวนคอร์ที่คุณมีต่อซ็อกเก็ตด้วยจำนวนซ็อกเก็ตที่คุณมี
แกน = แกนต่อซ็อกเก็ต X Sockets
สำหรับตัวอย่างระบบด้านบนเดสก์ท็อปมี 4 คอร์:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
ในขณะที่เซิร์ฟเวอร์มี 16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
ยูทิลิตี้ที่มีประโยชน์อื่นคือข้อมูลdmidecode
ขาออกต่อซ็อกเก็ต ในกรณีของระบบเซิร์ฟเวอร์ที่ระบุไว้ด้านบนเราคาดว่าจะเห็น 8 คอร์ต่อซ็อกเก็ตและ 16 เธรดต่อซ็อกเก็ต:
$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
Socket Designation: CPU1
Core Count: 8
Thread Count: 16
Socket Designation: CPU2
Core Count: 8
Thread Count: 16
lscpu
คำสั่งมีจำนวนของตัวเลือกที่มีประโยชน์ที่คุณอาจต้องการตรวจสอบตัวอย่างเช่น:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
ดูman lscpu
รายละเอียดที่
สรุป:
- คุณต้องระวังซ็อกเก็ตคอร์และเธรด
- คุณต้องระวังคำว่า CPU เนื่องจากมันหมายถึงสิ่งต่าง ๆ ในบริบทที่แตกต่างกัน