Ich verwende Ubuntu 16.04 Server. Ich kann sehen, dass Hype-Threading aktiviert ist, wenn ich den Befehl lscpu verwende.
Ich möchte es deaktivieren. Ich ging durch Ubuntu-Foren und hier und hier .
Dies sind gute Diskussionen, warum Hyper-Threading möglicherweise nicht gut ist. Aber keine endgültige Lösung, wie man es ausschaltet.
Kann jemand die Schritte zum Deaktivieren von Hyperthreading angeben? Vielen Dank .
Antworten:
Einführung
Dies ist eine interessante Frage. Wahrscheinlich eines der interessantesten seit Monaten für mich persönlich. Wie beim OP gibt es in meinem alten BIOS (erfunden 2012, aktualisiert 2016 oder so) keine Option zum Deaktivieren von Hyper-Threading.
Hyper-Threading-Fehler in Intel Skylake und Kaby Lake:
In Ask Ubuntu wurden im letzten Jahr zahlreiche Probleme mit Skylake gemeldet, und man fragt sich, wie man erkennt, welche Probleme möglicherweise durch Hyper-Threading-Fehler verursacht wurden.
Diese Antwort gliedert sich in drei Teile:
Anzeige der CPUs beim Ein- und Ausschalten von Hyper-Threading
Unten sehen Sie die CPU-Auslastung, wenn das Hyper-Threading deaktiviert und ein CPU-Stresstest durchgeführt wird. Ungefähr 10 Sekunden später wird dasselbe Skript mit aktiviertem Hyper-Threading wiederholt. 10 Sekunden später wird das Skript mit wieder deaktiviertem Hyper-Threading ausgeführt:
Die Anzeige ist in zwei Bereiche unterteilt:
set-hyper-threading
mit den Parametern 0 (aus) und dann 1 (ein) aufgerufen.conky
wird die prozentuale CPU-Auslastung von CPUS 1 bis 8 angezeigt.Führen Sie im ersten Skript Hyper Threading aus
Beim ersten Ausführen des Skripts werden die CPU-Nummern 2, 4, 6 und 8 (laut Conky) mit 3%, 2%, 2% und 2% eingefroren. Die CPU-Nummern 1, 3, 5 und 7 steigen während des Stresstests auf 100%.
Die CPU-Topologie wird mit deaktiviertem Hyper-Threading angezeigt und nur die vier Kerne werden gemeldet:
Das zweite Skript führt Hyper Threading aus
Beim zweiten Ausführen des Skripts wird Hyper-Threading aktiviert und alle CPU-Nummern 1-8 werden während des Stresstests auf 100% erhöht.
Die CPU-Topologie wird mit aktiviertem Hyper-Threading angezeigt und nur die vier Kerne plus und vier virtuelle Kerne werden gemeldet:
Das dritte Skript führt Hyper Threading aus
Beachten Sie, dass die CPUs 2, 4, 6 und 8 nach dem Ende des zweiten Skripts bei 4%, 2%, 3%, 4% im Leerlauf sind. Dies ist wichtig, da beim Ausschalten von Hyper-Threading im dritten Test die CPU-Prozentsätze beim ersten Test auf 4%, 2%, 3%, 4% anstatt auf 3%, 2%, 2% und 2% eingefroren werden.
Daher scheint das Deaktivieren von Hyper-Threading die virtuellen CPUs im aktuellen Zustand nur einzufrieren.
Beachten Sie auch, dass unabhängig davon, ob Sie Hyper-Threading aktivieren oder deaktivieren, das Skript weiterhin "Hyper-Threading unterstützt" anzeigt.
Bash-Skript zum automatischen Ein- und Ausschalten von Hyper-Threading
Beachten Sie beim Anzeigen des folgenden Skripts, dass Conky die CPUs von 1 bis 8 nummeriert, Linux jedoch die CPUs von 0 bis 7.
HINWEIS: Das Programm
stress
ist in alle Debian-Systeme integriert, von denen Ubuntu abgeleitet ist. Daher müssen Sie keine Pakete herunterladen und installieren, um dieses Skript in Ubuntu auszuführen.Wenn Sie eine Dual-Core-CPU haben, müssen Sie
#
die Zeilen, die die CPU-Nummern 5 und 7 steuern , entfernen (oder auskommentieren ).Dank an Hi-Angel für die Bash-Zeile mit der
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
Anzeige der CPU-Topologie.Conky stürzt ab, wenn das Hyper-Threading vor dem Start deaktiviert ist
Um die CPUs 2, 4, 6, 8 auf die niedrigstmögliche Auslastung zu bringen, habe ich versucht, Hyper-Threading während des Startvorgangs zu deaktivieren. Ich habe dieses Skript verwendet, um das zu tun:
Jedoch
conky
stürzt mit einem Segmentierungsfehler , wenn Hyper-Threading ausgeschaltet wird , wenn er startet. Als solches musste ich die vier@reboot
Zeilen im Skript auskommentieren.Conky-Code zur Anzeige der prozentualen CPU-Auslastung und des Auslastungsfaktors
Wenn Sie daran interessiert sind, eine ähnliche Anzeige in Conky einzurichten, finden Sie hier den entsprechenden Codeausschnitt:
HINWEIS: Der obige Nvidia-Code wurde noch nie getestet, da die Nvidia-GPU unter Ubuntu noch nicht funktioniert. Jedes Jahr bald :)
quelle
noht
nicht. Ich habe sogar nach der Option über Linux-4.13-rc1-Quellen gesucht, die ich gelegentlich habe. Ich verstehe jedoch auf jeden Fall , was Sie verwirrt haben könnte: dat bugreport beschwert sich, dass die Option nicht funktioniert, und dann wird sie geschlossen, alsnextrelease
ob sie etwas repariert hätten . Wenn Sie jedoch die Kommentare lesen, werden Sie feststellen, dass nurnoht
ein handgefertigtes Skript verwendet wird, das die Kernel-Befehlszeile auf die Option überprüft und dann die Kerne über das/sys/
Dateisystem deaktiviert . IOWnoht
ist nutzlos.noht
.Aktuelle Kernel unterstützen den Parameter maxcpus kernel.
Auf diese Weise können Sie die Anzahl der CPUs auf die Anzahl der physischen Kerne einstellen. Dies kann hilfreich sein, um Bedrohungen durch MDS-Schwachstellen auf Intel-CPUs aus Familie 6 zu mindern .
Wie:
Öffnen Sie mit sudo (root) Berechtigungen / etc / default / grub mit Ihrem bevorzugten Texteditor.
Suchen Sie die Zeile, die mit GRUB_CMDLINE_LINUX_DEFAULT = beginnt
und fügen Sie maxcpus = n zu allen vorhandenen Kernel-Parametern hinzu, z. B. den allgemeinen stillen Splash- Parametern (wobei n = die Anzahl der physischen Kerne Ihrer CPU ist).
Zum Beispiel habe ich auf meiner vertrauenswürdigen Intel (R) Core (TM) i3-3220-CPU mit 3,30 GHz Dual Core und Hyperthreading maxcpus = 2 hinzugefügt , um das Hyperthreading beim Booten zu deaktivieren .
Speichern Sie die Datei, geben Sie den Befehl ein
sudo update-grub
und starten Sie den Computer neu.Sie können den Erfolg bestätigen, indem Sie den Befehl
lscpu | grep "per core"
eingeben, der folgende Ausgabe liefern soll:Thread(s) per core: 1
Getestet auf Kernel 4.4.0
Quellen:
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html
/unix/145645/disabling-cpu-cores-on-quad-core-processor-on-linux
quelle
Sie können Hyperthreading unter Linux als Root oder mit Superuser-Berechtigungen deaktivieren mit:
Sie können den aktuellen Hyperthreading-Status anzeigen mit:
Dieser Befehl gibt Folgendes aus:
Alternativ enthalten die meisten BIOS-Firmwares auch eine Option zum Deaktivieren von Hyperthreading. Wenn es im BIOS deaktiviert ist, kehrt die obige Katze wahrscheinlich zurück
forceoff
.quelle
maxcpus=
Kernel-Parameter zum Deaktivieren von Hyperthreading nicht ausprobiert . Hauptsächlich, weil ich keine offizielle Dokumentation über die Interaktion mit Hyperthreading-Kernen finden kann. Wird das Hyperthreading garantiert immer deaktiviert, wenn Sie dies angebenmaxcpus=#real_cores
? Oder haben Sie möglicherweise die Hälfte der Real-Cores, bei denen HT auf einigen Systemen noch aktiviert ist? Außerdem ist einemaxcpus=
Einstellung nicht zwischen Maschinen mit unterschiedlichen Kernzahlen portierbar. Das Beibehalten von Variationen dieses Parameters für verschiedene Maschinen wäre mühsam und fehleranfällig.lscpu | grep "per core"
aber Sie einen vaild Punkt in Bezug auf Portabilität machen, auf der Kehrseite einmal die Kernel - Parameter Einstellung scheinen nicht zu belastend eine Aufgabe mir.Hier ist ein Skript, um die ht-Kerne zu identifizieren und sie online / offline umzuschalten.
@ WinEunuuchs2Unix , vielleicht können Sie dies zu Ihrer ausgezeichneten Antwort hinzufügen.
quelle
for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
Für Systeme, in denen das Motherboard mehrere CPU-Sockel hostet, ist eine etwas robustere Methode erforderlich, um im Kernel nach Hyperthread-Paaren zu suchen, da core_id dupliziert wird. Hier ist meine Version auf einem System mit zwei 8-Kern-Xeon-Chips (Beispiel aus Ubuntu 16.04):
Für verschiedene Zwecke möchten Sie möglicherweise auch in den Dateien suchen
quelle
Der
maxcpus=n
Parameter inGRUB_CMDLINE_LINUX_DEFAULT=
funktioniert nicht richtig. Ich hatte 2 Kerne und 4 Fäden anstelle von 4 Kernen und 4 Fäden.Ich habe eine Lösung gefunden.
In
mitigations=auto,nosmt
zuGRUB_CMDLINE_LINUX_DEFAULT=
stattGetestet unter Ubuntu 16.04 LTS mit Linux 4.4.0.
Quelle: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS
quelle
Wenn Sie Diskussionen gelesen haben, wissen Sie wahrscheinlich, dass das Deaktivieren normalerweise nicht zumutbar ist. Ich gehe also davon aus, dass Sie es zu Lernzwecken möchten.
Die Idee von HT besteht darin, mehrere Sätze von CPU-Registern für jeden physischen Kern (die sogenannten virtuellen Kerne) zu haben. . Es gibt keinen "besseren" virtuellen Kern, sie sind identisch. Mit diesem Wissen können Sie virtuelle Kerne außer einem für jeden physischen deaktivieren.
Zuerst möchten Sie wissen, welches Paar virtueller Kerne zu welchem physischen Kern im
/sys/
Dateisystem gehört. Sie können diecore_id
Datei dafür verwenden:Aus der Ausgabe können Sie schließen, dass cpu0 + cpu2 in einem physischen Kern und cpu1 + cpu3 im anderen enthalten sind. Erhöhen Sie nun die Berechtigungen und
echo
deaktivieren Sie mit jedem Befehl eines in jedem Paar:Beachten Sie, dass cpu0 keine "Online" -Datei hat und nicht deaktiviert werden kann. Daher habe ich stattdessen cpu2 deaktiviert.
quelle
Die Antwort von @ visit1985 funktioniert nicht, wenn das Trennzeichen in thread_s Geschwisters_list kein Komma ist (was beispielsweise auf meinem AMD Ryzen-System der Fall ist).
Hier ist ein Skript zum Deaktivieren von Hyper-Threading, das mit jedem Trennzeichen funktioniert:
Und hier ist eine, die das Hyper-Threading aktiviert:
quelle