Wie kann ich testen, ob Ubuntu Hyperthreading aktiviert hat?

13

Ich habe das Gefühl, dass Hyperthreading auf meinem PC nicht aktiviert ist. Ich habe mich umgesehen /proc/cpuinfound dort ist beschrieben, dass Geschwister die gleiche Anzahl haben wie CPU-Kerne. Dies bedeutet, dass das Hyperthreading nicht aktiviert ist. Wie kann ich es aktivieren?

Teileinträge von /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
Grenzfrequenz
quelle

Antworten:

15

/ sys / bus / cpu / devices / cpu * / topology / thread_siblings_list zeigt das Layout von Kernen und Hyperthreads. Um die Visualisierung zu vereinfachen, empfehle ich die Verwendung des Befehls lstopo. Installieren Sie mit:

sudo apt-get install hwloc

und laufe mit:

lstopo

Mein ivybridge-Desktop verfügt über 4 CPUs. Jeder hat einen Hyperthread, daher erhalten wir ein Diagramm mit den Kernen P # 0..3 und jeder hat zwei PUs (einer davon ist der Hyperthread):

Bildbeschreibung hier eingeben

Wenn Sie nur eine Textversion dieser Ausgabe möchten, verwenden Sie:

lstopo -
Colin Ian King
quelle
Ich bin mir nicht sicher, warum noch niemand darüber abgestimmt hat ... Dies ist ein wirklich nettes Dienstprogramm.
Huck Bennett
Das ist super cool. Sie sehen den gesamten Cache, Kerne, Hyperthreads alle in 1 Bild
Silver Moon
9

Führen Sie topein Terminal aus und drücken Sie die Nummer 1auf Ihrer Tastatur, um die Auslastung pro CPU in der Kopfzeile anzuzeigen. Wie viele CPUs sind dort beschrieben?

Wenn es sich um das Doppelte der tatsächlichen Kerne in Ihrer CPU handelt, funktioniert das Hyperthreading ordnungsgemäß.

Bruno Pereira
quelle
7

Um festzustellen, ob Sie Hyperthreading (auch bekannt als Intel Hyperthreading Technology) verwenden, können Sie dmidecode verwenden .

In einem Terminal:

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

Suchen Sie nach dem Statuswert "Bestückt", "Aktiviert" (siehe unten zwischen * ... *). "Aktiviert" bedeutet, dass das Hyperthreading aktiv ist

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 einer logischen Hyperthread-CPU wird der Statuswert " unbestückt" angezeigt (siehe unten zwischen * ... *):

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

Quelle

fossfreedom
quelle
Der Linux-Kernel ermittelt die Anzahl der CPUs und Geschwister aus der CPU (unter Verwendung der CPUID-Topologie-Aufzählung), anstatt die vom BIOS konfigurierten DMI-Daten zu verwenden. Ich vermute, dass die DMI-Daten beim Booten aus denselben CPUID-Daten konfiguriert werden, die der Kernel verwendet. Es ist jedoch wahrscheinlich am besten, dem zu vertrauen, was der Linux-Kernel ermittelt hat, und nicht aus DMI-Daten. In den meisten Fällen stimmt das BIOS wahrscheinlich.
Colin Ian King
Die dmicode-Ausgabe ändert sich nicht, wenn das Hyperthreading deaktiviert ist. Sie gibt lediglich an, ob die CPU das Hyperthreading unterstützt. Beispielsweise wird auf einem i7-6600U-CPU-System mit deaktiviertem Hyperthreading dmidecode | grep -i populaauch gedruckt Status: Populated, Enabled. Siehe auch meine Antwort .
Maxschlepzig
2

im ergebnis von dmidecode kann man sowas bekommen

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

auf Servern mit Hyper-Thread auf ON gesetzt

oder

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

auf diejenigen, die auf OFF gesetzt sind

user56344
quelle
Das geht nicht. Das Thread Countändert sich nicht , wenn Hyperthreading deaktiviert ist , zB auf einem i7-6600U System mit behindertem Hyperthreading dmidecode | grep '\(Core\|Thread\).*:'druckt Core Count: 2 Core Enabled: 2 Thread Count: 4.
Maxschlepzig
0

Spoiler: Ihre CPU unterstützt kein Hyperthreading .

Eine Alternative zur Abfrage der Datenbank des CPU-Herstellers besteht darin, /proc/cpuinfonach dem htFlag zu suchen :

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

Auch wenn Hyperthreading im BIOS deaktiviert ist, sollte das Flag in dieser Ausgabe enthalten sein.

Um zu überprüfen, ob Hyperthreading tatsächlich aktiviert ist, können Sie eine andere Pseudodatei konsultieren :

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

Mögliche Werte sind: on|off|forceoff|notsupported|notimplemented

Sie können das Hyperthreading aktivieren / deaktivieren, indem Sie on/ offin diese Pseudodatei schreiben , z.

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

Dies funktioniert natürlich nicht, wenn der catzuvor gedruckte von forceoff|notsupported|notimplemented.

Normalerweise ist Hyperthreading standardmäßig aktiviert. Und wenn es deaktiviert ist, geschieht dies normalerweise im BIOS. Wenn es im BIOS deaktiviert ist, enthält diese Pseudodatei wahrscheinlich forceoffund Sie müssen die Einstellung im BIOS ändern.

maxschlepzig
quelle