come posso verificare se Ubuntu ha attivato l'hyperthreading?


13

Ho la sensazione che l'hyperthreading non sia attivato sul mio PC. Ho dato un'occhiata /proc/cpuinfoe viene descritto che i fratelli hanno lo stesso numero dei core della CPU. Ciò significa che l'hyperthreading non è attivato. Come posso attivarlo?

Voci della parte di /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

Risposte:


15

/ sys / bus / cpu / devices / cpu * / topology / thread_siblings_list mostra il layout di core e hyperthreads. Per semplificare la visualizzazione, ti consiglio di utilizzare il comando lstopo, installa con:

sudo apt-get install hwloc

e corri con:

lstopo

Il mio desktop Ivybridge ha 4 CPU; ognuno ha un hyperthread, quindi otteniamo un diagramma con i core P # 0..3 e ognuno ha due PU (uno di questi è l'hyperthread):

inserisci qui la descrizione dell'immagine

Se si desidera solo una versione testuale di questo output, utilizzare:

lstopo -

Non sono sicuro del motivo per cui nessuno ha ancora votato questo ... Questa è davvero una bella utility.
Huck Bennett,

è fantastico. vedete la cache totale, i core, ipertesti tutti in 1 immagine
Silver Moon

9

Esegui topin un terminale, premi il numero 1sulla tastiera per mostrare il carico per cpu nell'intestazione, quanti cpus sono descritti lì?

Se sono il doppio dei core effettivi nella tua CPU, l'hyperthreading funziona come dovrebbe.


7

Per rilevare se si utilizza hyperthreading (alias Intel Hyperthreading Technology) è possibile utilizzare dmidecode .

In un terminale:

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

Cercare un valore di stato di Popolato, Abilitato (mostrato di seguito tra * ... *) ovvero "Abilitato" significa che l'hyperthreading è attivo

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

In una CPU logica hyperthread verrà visualizzato un valore di stato non popolato (mostrato di seguito tra * ... *):

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

fonte


Il kernel Linux determina il numero di CPU e fratelli dalla CPU (utilizzando l'enumerazione della topologia CPUID) anziché utilizzare i dati DMI configurati dal BIOS. Sospetto che i dati DMI siano configurati all'avvio dagli stessi dati CPUID utilizzati dal kernel, tuttavia è probabilmente meglio fidarsi di ciò che il kernel Linux ha determinato piuttosto che dai dati DMI. Come succede, nella maggior parte dei casi il BIOS probabilmente funziona bene.
Colin Ian King,

L'output del dmicode non cambia se l'hyperthreading è disabilitato - indica solo se la CPU supporta l'hyperthreading. Ad esempio, su un sistema CPU i7-6600U con hyperthreading disabilitato viene dmidecode | grep -i populaanche stampato Status: Populated, Enabled. Vedi anche la mia risposta .
maxschlepzig,

2

nel risultato di dmidecode, puoi ottenere qualcosa di simile

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

su server con hyper thread impostato su ON

o

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

su quelli impostati su OFF


Questo non funziona Il Thread Countnon cambia se l'hyperthreading è disabilitato, per esempio su un sistema i7-6600U con Hyperthreading disabili dmidecode | grep '\(Core\|Thread\).*:'stampe Core Count: 2 Core Enabled: 2 Thread Count: 4.
maxschlepzig,

0

Spoiler: la tua CPU non supporta l'hyperthreading .

Un'alternativa alla consultazione del database del fornitore della CPU è verificare /proc/cpuinfola presenza del htflag:

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

Anche se l'hyperthreading è disabilitato nel BIOS, il flag dovrebbe essere incluso in quell'output.

Per verificare se l'hyperthreading è effettivamente abilitato, puoi consultare un altro pseudo file :

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

I valori possibili sono: on|off|forceoff|notsupported|notimplemented

Puoi abilitare / disabilitare l'hyperthreading scrivendo on/ offin quel pseudo file, ad esempio:

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

Naturalmente, questo non funziona se quello catprecedentemente stampato forceoff|notsupported|notimplemented.

Di solito, l'hyperthreading è abilitato, per impostazione predefinita. E se è disabilitato, lo fa comunemente nel BIOS. Se è disabilitato nel BIOS che probabilmente contiene lo pseudo file forceoffe devi modificare l'impostazione nel BIOS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.