Sollte ich das Hyperthreading deaktivieren?

6

Ich werde ein paar Kisten voll ausschöpfen, auf denen eine starke CPU-intensive Verarbeitung ausgeführt wird.

Jeder Prozess verwendet nur 1 Thread, sodass ich sie parallel ausführen werde. Ich verwende Maschinen mit 4 Kernen, also 8 mit aktiviertem Hyperthreading.

Jeder Prozess verwendet auch 1 GB RAM, sodass ich 8 GB RAM pro Computer benötige, wenn Hyper-Threading aktiviert ist, oder 4 GB, wenn es deaktiviert ist.

Meine Frage ist: Soll ich Hyperthreading aktivieren oder deaktivieren?

Die Kosten des RAM sind nicht das Problem, sondern die Geschwindigkeit, mit der die Verarbeitung durchgeführt werden kann. Wäre es effizienter, wenn Hyperthreading aktiviert oder deaktiviert wäre?

Alasdair
quelle
1
Auf welcher Art von CPU laufen Sie? Das Hyperthreading des alten P4 war ziemlich schlecht, aber das neue Zeug auf i7 und neuer ist eigentlich ziemlich gut.
Marcin
Es ist Intel Sandy Bridge.
Alasdair
Kann ich eine dumme Frage stellen? Können Sie versuchen, einen Lauf in die eine Richtung und dann den anderen zu machen und sehen, welchen Unterschied Sie sehen?
OG Chuck Low

Antworten:

8

Der einzige Weg, um sicher zu wissen, ist Benchmarking.

Das heißt, es gibt nur sehr wenige Szenarien, in denen HT die Leistung einer modernen CPU verlangsamt. Wenn Sie jedoch von 4 auf 8 Prozesse umsteigen, kann dies zu genügend E / A führen, damit andere Bereiche des Systems zu einem Engpass werden (Festplatte, Netzwerk, RAM-Bandbreite usw.). )

Ich denke, dass, egal was, HT aktiviert bleiben sollte, aber Sie müssen Ihr System benchmarken, um zu sehen, wie viele Jobs gleichzeitig für maximalen Durchsatz ausgeführt werden können.

Wenn nicht anders angegeben, kann das Betriebssystem möglicherweise einige zusätzliche Ausführungsressourcen verwenden.

afrazier
quelle
Das Benchmarking ist nicht so einfach, da ich keinen physischen Zugriff auf die Server habe. I / O sollte aber kein Problem sein, da die Festplatte nicht zu stark ausgelastet ist.
Alasdair
4
@Alasdair Wenn Sie keinen Zugriff auf die Server haben, wie planen Sie, HT zu deaktivieren?
Scott Chamberlain
2
+1: Wenn Sie es nicht messen können, müssen Sie es nicht ändern.
Surfasb
Ich kann eine spezielle Anfrage stellen, um die HP zu deaktivieren, wenn ich muss.
Alasdair
4

Ein kurzes Skript zum Deaktivieren von Hyperthread-CPUs finden Sie unten. Dies könnte für das Benchmarking nützlich sein. Funktioniert auf Centos 6.2 (2.6.32 Kernel).

#!/bin/sh
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
sort -u |
while read sibs
do
    case "$sibs" in
            *,*)
                    oldIFS="$IFS"
                    IFS=",$IFS"
                    set $sibs
                    IFS="$oldIFS"

                    shift
                    while [ "$1" ]
                    do
                            echo Disabling CPU $1 ..
                            echo 0 > /sys/devices/system/cpu/cpu$1/online
                            shift
                    done
                    ;;
            *)
                    ;;
    esac
done
Aidan Williams
quelle
3

Testen Sie die Ausführung eines Prozesses mit deaktiviertem HT.

Wenn der Prozess den einzelnen Kern bei deaktiviertem HT nicht maximal ausnutzt, ist die Ausführung mit aktiviertem HT effizienter, da Sie weniger CPU-Zyklen "verschwenden" würden.

Wenn das Core-Out maximal ist, sollte theoretisch für beide Situationen die gleiche Ausführungszeit erforderlich sein. Nachdem Sie die Antwort von afrazier und Ihre Antwort gelesen haben, scheint dies der einzige gültige Benchmark zu sein, den Sie möglicherweise durchführen müssen.

Melikoth
quelle