ฉันจะทดสอบว่า Ubuntu เปิดใช้งานไฮเปอร์เธรดได้อย่างไร?


13

ฉันมีความรู้สึกว่าการไฮเปอร์เธรดไม่ได้เปิดใช้งานบนพีซีของฉัน ฉันมองเข้าไป/proc/cpuinfoและมีคำอธิบายว่าพี่น้องมีจำนวนเท่ากันกับแกน CPU ซึ่งหมายความว่าไฮเปอร์เธรดไม่ได้เปิดใช้งาน ฉันจะเปิดใช้งานได้อย่างไร

ส่วนหนึ่งของ/proc/cpuinfo:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz
stepping    : 6
cpu MHz     : 2997.000
cache size  : 6144 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes

คำตอบ:


15

/ sys / bus / cpu / devices / cpu * / topology / thread_siblings_list แสดงโครงร่างของคอร์และไฮเปอร์เธรด เพื่อให้ง่ายต่อการมองเห็นผมแนะนำให้ใช้คำสั่ง lstopo ติดตั้งด้วย:

sudo apt-get install hwloc

และทำงานด้วย:

lstopo

เดสก์ทอป ivybridge ของฉันมี 4 CPU แต่ละอันมีไฮเปอร์เธรดดังนั้นเราจะได้รับไดอะแกรมที่มีคอร์ P # 0..3 และแต่ละอันมี PU สองอัน (หนึ่งในนั้นคือไฮเปอร์เธรด):

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการเพียงแค่เวอร์ชันข้อความของเอาต์พุตนี้ให้ใช้:

lstopo -

ไม่แน่ใจว่าทำไมไม่มีใคร upvoted นี้เลย ... นี่เป็นยูทิลิตี้ที่ดีจริงๆ
Huck Bennett

นี่สุดยอดมาก คุณเห็นแคชรวมแกนแกนทั้งหมดใน 1 ภาพ
Silver Moon

9

ทำงานtopในเครื่องเทอร์มินัลกดหมายเลข1บนแป้นพิมพ์ของคุณเพื่อแสดงโหลดต่อ cpu ในส่วนหัวอธิบายซีพียูจำนวนเท่าใด?

หากพวกเขาเป็นสองเท่าของแกนที่เกิดขึ้นจริงในซีพียูของคุณไฮเปอร์เธรดทำงานได้ตามที่ควร


7

การตรวจสอบว่าคุณกำลังใช้ hyperthreading (aka Intel Hyperthreading เทคโนโลยี) คุณสามารถใช้dmidecode

ในอาคารผู้โดยสาร:

sudo dmidecode > /tmp/dmidecode.txt
gksudo gedit /tmp/dmidecode.txt

ค้นหาค่าสถานะของที่มีประชากรเปิดใช้งาน (แสดงด้านล่างระหว่าง * ... *) คือ "เปิดใช้งาน" หมายความว่าการทำไฮเปอร์เธรดเปิดใช้งานอยู่

Physical CPU
Handle 0x000C, DMI type 4, 32 bytes
Processor Information
Socket Designation: Socket 1 CPU 1
Type: Central Processor
Family: Xeon
Manufacturer: GenuineIntel
ID: 43 0F 00 00 01 03 00 00
Signature: Type 0, Family 15, Model 4, Stepping 3
Flags:
FPU (Floating-point unit on-chip)
CX8 (CMPXCHG8 instruction supported)
APIC (On-chip APIC hardware supported)
Version: Intel Xeon
Voltage: 1.5 V
External Clock: 200 MHz
Max Speed: 4000 MHz
Current Speed: 3800 MHz
Status: *Populated, Enabled*
Upgrade: ZIF Socket
L1 Cache Handle: 0x0004
L2 Cache Handle: 0x0005
L3 Cache Handle: Not Provided

ใน CPU แบบลอจิคัล Hyperthreaded คุณจะเห็นค่าสถานะที่ไม่ได้มีประชากร (แสดงด้านล่างระหว่าง * ... *):

Handle 0x000D, DMI type 4, 32 bytes
Processor Information
Socket Designation: Socket 2 CPU 2
Type: Unknown
Family: Unknown
Manufacturer: Not Specified
ID: 00 00 00 00 00 00 00 00
Version: Not Specified
Voltage: 1.5 V
External Clock: 200 MHz
Max Speed: 4000 MHz
Current Speed: 3800 MHz
Status: *Unpopulated*
Upgrade: ZIF Socket
L1 Cache Handle: 0x0006
L2 Cache Handle: 0x0007
L3 Cache Handle: Not Provided

แหล่ง


เคอร์เนล Linux กำหนดจำนวนของ CPU และพี่น้องจาก CPU (ใช้การแจงนับโทโพโลยี CPUID) แทนที่จะใช้ BIOS ที่กำหนดค่าข้อมูล DMI ฉันสงสัยว่ามีการกำหนดค่าข้อมูล DMI ณ เวลาบูตจากข้อมูล CPUID เดียวกับที่เคอร์เนลใช้อย่างไรก็ตามอาจเป็นสิ่งที่ดีที่สุดที่จะเชื่อในสิ่งที่เคอร์เนล Linux กำหนดไว้แทนที่จะมาจากข้อมูล DMI ตามที่เกิดขึ้นในกรณีส่วนใหญ่ BIOS อาจทำให้ถูกต้อง
โคลินเอียนคิง

เอาท์พุท dmicode จะไม่เปลี่ยนแปลงหากการปิดใช้งานไฮเปอร์เธรดถูกปิด - เพียงแค่ระบุว่า CPU รองรับการทำไฮเปอร์เธรดหรือไม่ ตัวอย่างเช่นในระบบ CPU i7-6600U ที่มีไฮเปอร์เธรดที่ปิดใช้งานจะdmidecode | grep -i populaพิมพ์Status: Populated, Enabledด้วย ดูคำตอบของฉันด้วย
maxschlepzig

2

ในผลลัพธ์ของ dmidecode คุณสามารถได้รับสิ่งที่ชอบ

    Core Count: 6
    Core Enabled: 6
    Thread Count: 12

บนเซิร์ฟเวอร์ที่ตั้งค่าไฮเปอร์เธรดเป็น ON

หรือ

    Core Count: 6
    Core Enabled: 6
    Thread Count: 6

ที่ตั้งไว้ที่ OFF


มันใช้งานไม่ได้ Thread Countไม่เปลี่ยนแปลงถ้า hyperthreading ถูกปิดใช้งานเช่นในระบบ i7-6600U กับ Hyperthreading พิการพิมพ์dmidecode | grep '\(Core\|Thread\).*:' Core Count: 2 Core Enabled: 2 Thread Count: 4
maxschlepzig

0

สปอยเลอร์: CPU ของคุณไม่สนับสนุน hyperthreading

อีกทางเลือกหนึ่งในการปรึกษาฐานข้อมูลของผู้ขาย CPU คือการตรวจสอบ/proc/cpuinfoการhtตั้งค่าสถานะ:

$ grep -o '\<ht\>' /proc/cpuinfo

แม้ว่าไฮเปอร์เธรดถูกปิดใช้งานใน BIOS ค่าสถานะควรรวมอยู่ในผลลัพธ์นั้น

หากต้องการตรวจสอบว่ามีการเปิดใช้งานไฮเปอร์เธรดจริงหรือไม่คุณสามารถศึกษาไฟล์หลอกอื่นได้ :

$ cat /sys/devices/system/cpu/smt/control

ค่าที่เป็นไปได้คือ: on|off|forceoff|notsupported|notimplemented

คุณสามารถเปิด / ปิดการใช้งานไฮเปอร์เธรดโดยเขียนon/ offไปยังไฟล์หลอกเช่น:

# echo off > /sys/devices/system/cpu/smt/control

ของหลักสูตรนี้ไม่ทำงานถ้าพิมพ์หนึ่งก่อนหน้านี้catforceoff|notsupported|notimplemented

โดยปกติแล้วไฮเปอร์เธรดจะถูกเปิดใช้งานตามค่าเริ่มต้น และถ้ามันถูกปิดการใช้งานก็จะทำเช่นนั้นใน BIOS ถ้ามันถูกปิดการใช้งานในไบออสซึ่งไฟล์หลอกมีอยู่forceoffและคุณต้องเปลี่ยนการตั้งค่าในไบออส

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