ฉันจะรู้ได้อย่างไรว่าตัวประมวลผลใดคือแกนประมวลผลทางกายภาพ


15

ฉันมี Intel i7 2700k ที่นี่และฉันต้องการทราบว่าฉันสามารถบอกได้อย่างไรว่าโปรเซสเซอร์ใดที่มีอยู่จริงและเป็นเวอร์ชวล (เช่น: ไฮเปอร์เธรด) ฉันกำลังเรียกใช้สคริปต์ Conky เพื่อแสดงความเร็ว CPU, ความถี่และโหลดของฉัน แต่ฉันไม่แน่ใจว่าฉันทำถูกต้องแล้ว:

น่ากลัว

ฉันเขียนสคริปต์ของตัวเองเพื่อให้ได้อุณหภูมิและความถี่i7zแต่สิ่งเหล่านี้สอดคล้องกับแกนทางกายภาพเท่านั้น ฉันกำลังแสดงคอร์แต่ละแบบดังนี้:

${cpu cpu1} ${lua display_temp 0} ${lua display_load 0}
${cpu cpu2}
${cpu cpu3} ${lua display_temp 1} ${lua display_load 1}
${cpu cpu4}
# ...

ฉันไม่แน่ใจว่าสิ่งนี้ถูกต้องเพราะบางครั้งฉันเห็นอุณหภูมิและอุณหภูมิ ใน/proc/cpuinfoแกนจะเรียงลำดับอย่างไร ก่อนอื่นจริงแล้วทั้งหมดเสมือน? แต่ละฟิสิคัลคอร์แล้วแกนเสมือน (s)? พวกเขาจัดเรียงอย่างไร

คำตอบ:


16

คุณสามารถรู้เกี่ยวกับโปรเซสเซอร์แต่ละคอร์โดยตรวจสอบแต่ละรายการ cpuinfo:

processor       : 0
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0

processor       : 1
[...]
physical id     : 0
siblings        : 8
core id         : 1
cpu cores       : 4
apicid          : 2 

processor       : 2
[...]
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 4 

processor       : 3
[...]
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 6

processor       : 4
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 1

[and so on]

physical idแสดงรหัสของโปรเซสเซอร์ ยกเว้นว่าคุณมีการตั้งค่ามัลติโปรเซสเซอร์ (มีตัวประมวลผลทางกายภาพสองตัวแยกจากกันในเครื่อง) มันจะเป็น 0 เสมอ

siblings แสดงจำนวนตัวประมวลผลที่ต่ออยู่กับตัวประมวลผลทางกายภาพเดียวกัน

core idcpu coresแสดงตัวบ่งชี้ของแกนปัจจุบันออกไปทั้งหมด คุณสามารถใช้ข้อมูลนี้เพื่อเชื่อมโยงตัวประมวลผลเสมือนที่เข้ากันในคอร์เดียว

apicid(และoriginal apicid) แสดงจำนวนโปรเซสเซอร์ (เสมือน) ตามที่ไบออสกำหนด

โปรดทราบว่ามี 8 พี่น้องและ 4 คอร์ดังนั้นจึงมี 2 โปรเซสเซอร์เสมือนต่อหนึ่งคอร์ ไม่มีความแตกต่างระหว่าง "เสมือน" หรือ "ของจริง" ในไฮเปอร์เธรด แต่การใช้ข้อมูลนี้คุณสามารถเชื่อมโยงโปรเซสเซอร์ที่มาจากคอร์เดียวกัน


5

/sysระบบแฟ้มถือเป็นภาพรวมที่ดีของข้อมูลนี้ นี่คือตัวอย่างจากกล่อง Quadcore SMP ที่มี Hyperthreading:

# grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\t | sed 's,^,    ,'
/sys/devices/system/cpu/cpu0/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu1/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu2/topology/thread_siblings   00000000,00000404
/sys/devices/system/cpu/cpu3/topology/thread_siblings   00000000,00000808
/sys/devices/system/cpu/cpu4/topology/thread_siblings   00000000,00001010
/sys/devices/system/cpu/cpu5/topology/thread_siblings   00000000,00002020
/sys/devices/system/cpu/cpu6/topology/thread_siblings   00000000,00004040
/sys/devices/system/cpu/cpu7/topology/thread_siblings   00000000,00008080
/sys/devices/system/cpu/cpu8/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu9/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu10/topology/thread_siblings  00000000,00000404
/sys/devices/system/cpu/cpu11/topology/thread_siblings  00000000,00000808
/sys/devices/system/cpu/cpu12/topology/thread_siblings  00000000,00001010
/sys/devices/system/cpu/cpu13/topology/thread_siblings  00000000,00002020
/sys/devices/system/cpu/cpu14/topology/thread_siblings  00000000,00004040
/sys/devices/system/cpu/cpu15/topology/thread_siblings  00000000,00008080

เนื้อหาที่เหมือนกันหมายถึงกระทู้ของแกนเดียวกัน กล่าวคือ

  • cpu0 / cpu8
  • cpu1 / cpu9
  • เป็นต้น

มีข้อมูลที่คล้ายกันในcore_siblingsไฟล์หลอกพร้อมกับข้อมูลทอพอโลยีเพิ่มเติม


3

หากคุณเห็น 'htแฟ/proc/cpuinfoล็ก ' คุณต้องเปิดใช้งานไฮเปอร์เธรดและแต่ละคอร์จริงถูกแบ่งออกเป็นหลายเธรดไม่มีแนวคิดของเธรดจริงและเธรดเสมือนจริง: ทั้งคู่เป็นเสมือนจริงอย่างมีประสิทธิภาพ

สิ่งที่คุณอาจต้องการตรวจสอบคือการเปรียบเทียบคอร์และซ็อกเก็ตให้ใช้physical idตัวระบุโทโพโลยีเพื่อจัดกลุ่มคอร์ด้วยกัน


การhtตั้งค่าสถานะบ่งชี้ว่า CPU สนับสนุนหลายเธรด (HTT) เท่านั้น - ไม่ใช่ว่าเปิดใช้งานหรือไม่ ถึงอย่างนั้นมันก็ไม่สามารถไว้ใจได้เสมอไปเช่นมันบ่งบอกอย่างไม่ถูกต้องว่า i5 i5-6500 รองรับ HTT: ark.intel.com/content/www/us/en/ark/products/88184/ …
Anthony G - ความยุติธรรมสำหรับโมนิก้า

1

คำตอบก่อนหน้านี้น่าสนใจมาก

หลังจาก googling ฉันพบวิชาที่เกี่ยวข้อง:

ในลิงค์สุดท้ายสคริปต์ไพ ธ อนไม่ทำงานเมื่อโฮสต์ของคุณมีรหัสทางกายภาพมากมาย ฉันพยายามแก้ไขโดยมีเงื่อนไขแตกต่างกันในตอนท้าย:

การเปลี่ยนแปลง:

if p > 0:

ถึง

if p % 2 == 1:

แต่มันไม่ทำงานตามที่คาดไว้ตามข้อความก่อนหน้า โดยวิธีการที่คุณสามารถทำสิ่งที่ครอบคลุมมากกว่า:

grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\\t | sed -r 's,^,\s\s\s\s,'

ด้วย:

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

[ ... ]

สิ่งที่น่าสนใจในโฮสต์หลายคอร์ที่มีการเปิดใช้งานไฮเปอร์เธรดคือการกระจายโลจิคัลคอร์บนฮาร์ดแวร์

ตัวอย่างเช่นบนหนึ่งในคอมพิวเตอร์ของฉัน (48 ตรรกะหลัก, 2 ตัวประมวลผลทางกายภาพ, 24 (12 * 2) 'แกนกลางจริง' (เช่นนั้นยังมี 24 แกนเสมือนจริง):

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

 /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu24/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu1/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu25/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu26/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu2/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu27/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu3/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu28/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu4/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu29/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu5/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu30/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu6/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu31/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu7/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu32/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu8/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu33/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu9/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu10/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu34/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu11/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu35/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu12/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu36/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu13/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu37/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu14/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu38/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu15/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu39/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu16/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu40/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu17/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu41/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu18/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu42/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu19/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu43/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu20/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu44/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu21/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu45/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu22/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu46/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu23/topology/thread_siblings_list 23,47
 /sys/devices/system/cpu/cpu47/topology/thread_siblings_list 23,47

มันหมายถึง cpu0 และ cpu24 แบ่งปัน "ที่อยู่" ฮาร์ดแวร์ทางกายภาพเดียวกัน สิ่งเดียวกันสำหรับ cpu1 และ cpu25 ...

ดังนั้นโดยทั่วไปถ้าฉันต้องการปิดการใช้งานไฮเปอร์เธรดจากระบบปฏิบัติการ linux ของฉันฉันควรใส่ '0' ลงใน cpu {24..47} / ออนไลน์ด้วย

for fake_cpu in {24..47}; do echo 0 > /sys/devices/system/cpu/cpu$fake_cpu/online;done

คุณจะสังเกตเห็นว่าความน่าสนใจของระบบของฉันคือการระบุจำนวนแกน


โปรดใช้บล็อคโค้ดแทนการเสนอราคาสำหรับสิ่งต่าง ๆ บนเครื่องเทอร์มินัล อ่านง่ายกว่ามาก
HalosGhost

1

คุณยังสามารถใช้ lscpu:

# lscpu --all --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3:L4 ONLINE MAXMHZ    MINMHZ
0   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
1   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
2   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
3   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000
4   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
5   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
6   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
7   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000

ตรรกะแกนนี่ 0 และ 4 ไปที่แกน 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.