IBM Cloud Docs
Intel® Hyper-Threading-Technologie inaktivieren

Intel® Hyper-Threading-Technologie inaktivieren

Wenn Ihre Infrastrukturkonfiguration und Anwendungseinrichtung dies erfordert, können Sie die Intel Hyper-Threading-Technologie (Intel HT-Technologie) auf Ihrer virtuellen Gastmaschine inaktivieren.

Die Anweisungen in diesem Thema zum Inaktivieren der Intel Hyper-Threading-Technologie auf Gast-VMs gelten nur für virtuelle Server, die auf Hosts bereitgestellt wurden, die Intel-basierte Prozessoren verwenden.

Gründe für die Inaktivierung der Intel Hyper-Threading-Technologie

Intel Hyper-Threading-Technologie ist ein Begriff, der simultanes Multithreading (SMT) beschreibt. Die Hyper-Threading-Technologie spaltet jeden physischen Kern in zwei virtuelle Prozessoren. Um das Konzept der Hyper-Threading-Technologie zu verstehen, kann man sich eine breite Straße mit einer einzigen Fahrspur vorstellen, die in zwei entsprechend schmalere Fahrspuren unterteilt wird. Wenn es langsam und schnell fließenden Verkehr gibt, bietet die zweispurige Autobahn einen besseren Service gegenüber der einspurigen Straße. Die Hyper-Threading-Technologie bietet eine bessere Anwendungsleistung, wenn Datei-E/A, Netz-E/A und andere langsamere Operationen mit CPU-intensiven Operationen vermischt werden. Der Leistungsvorteil der Hyper-Threading-Technologie liegt in der Regel bei 0 bis 30 % gegenüber dem Einzelthreadmodus. Bei einige Anwendungen kann es auch zu einem Leistungsabfall kommen.

Der Einsatz der Hyper-Threading-Technologie ist nicht immer empfehlenswert. In diesem Fall sollten Sie sie möglicherweise lieber inaktivieren und die Kerne im Einzelthreadmodus auszuführen. Es gibt drei Hauptgründe, die die Inaktivierung der Hyper-Threading-Technologie in Betracht ziehen. Der erste Grund steht im Zusammenhang mit der Softwarelizenzierung. Viele ältere Softwareanbieter wie EDA-Toolanbieter (Electronic Design Automation, Entwicklung integrierter Schaltkreise) benötigen für jede CPU eine Lizenz, unabhängig davon, ob sie die Hyper-Threading-Technologie oder den Einzelthreadmodus verwenden. Wenn sich der Kern im Hyper-Threading-Technologie-Modus befindet, benötigen Sie doppelt so viele Lizenzen wie im Einzelthreadmodus, auch wenn die Anwendung dabei gegenüber dem Einzelthreadmodus nicht von einer doppelt so hohen Leistung profitiert. Als Ergebnis inaktivieren EDA und andere Anwender die Hyper-Threading-Technologie und führen ihre Software lieber im Einzelthreadmodus aus.

Der zweite Grund für die Inaktivierung von Hyper-Threading-Technologie ist die Vermeidung von Problemen bei Lastausgleich und von Betriebssystem-Overhead, der mit Hyper-Threading-Technologie einhergeht. HPC-Anwendungen (High Performance Computing) erstellen in der Regel so viele MPI-Tasks (Message Passing Interface) wie die Anzahl der physischen Kerne und lassen das Betriebssystem jede MPI-Task für einen bestimmten physischen Kern verwalten. Wenn die Hyper-Threading-Technologie aktiviert ist, sind für das Betriebssystem doppelt so viele CPUs vorhanden. In der Regel ordnet das Betriebssystem die MPI-Tasks problemlos einem der beiden Threads eines Kerns zu. Gelegentlich kommt es jedoch vor, das das Betriebssystem beide Tasks auf einen physischen Kern platziert und andere Kerne freilässt. Dies führt zu einer suboptimalen Systemauslastung und einer schwankenden Anwendungsleistung. Außerdem ordnet der Betriebssystemkernel Datenstrukturen für jede der aktiven CPUs zu und aktualisiert sie kontinuierlich, sodass mehr Kernelspeicher im Hyper-Threading-Technologiemodus zugeordnet wird und der Verwaltungsaufwand verringert wird. Indem der Betriebssystem-Overhead durch die Inaktivierung der Hyper-Threading-Technologie ausgeglichen wird, können viele HPC-Anwendungen eine optimale Leistung erzielen.

Der dritte Grund für die Inaktivierung der Hyper-Threading-Technologie bezieht sich auf die Sicherheit. Einige Benutzer bevorzugen es, die Hyper-Threading-Technologie zu inaktivieren, um mögliche Seitenkanalangriffe zu vermeiden, die mit der Ausführung der Hyper-Threading-Technologie verbunden sind. IBM Cloud nutzt keinen physischen Kern zwischen den virtuellen Maschinen von zwei Kunden, sodass diese Art von Angriff nicht möglich ist.

Wenn Sie feststellen, dass die Inaktivierung der Hyper-Threading-Technologie für Ihre Konfiguration die richtige Entscheidung ist, können Sie eine der folgenden Methoden verwenden, um sie auf den virtuellen Gastmaschinen (VMs) in IBM Cloud zu inaktivieren.

Status der Hyper-Threading-Technologie überprüfen und in der eigenen Gast-VM ändern: Grundlagen

Wenn eine virtuelle Maschine betriebsbereit ist, können Sie den Status der Hyper-Threading Technologie mithilfe des Befehls lscpu unter Linux-Betriebssystemen überprüfen. Die Ausgabe sieht in etwa folgendermaßen aus:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
...

Beachten Sie in diesem Beispiel, dass für Threads pro Kern (Thread(s) per core) der Wert 2 angezeigt wird, was darauf hinweist, dass die Hyper-Threading-Technologie aktiviert ist. Die VM verfügt über 4 physische Kerne und 8 virtuelle CPUs. Moderne Versionen des Linux-Kernels ermöglichen es Benutzern, die Hyper-Threading-Technologie pro Kern zu inaktivieren. Sie können einige Kerne mit einer aktivierten Hyper-Threading-Technologie und andere Kerne mit einer inaktivierten Hyper-Threading-Technologie ausführen. Um dies auf einer Pro-Kern-Basis anzuzeigen, können Sie den Befehl lscpu --extended verwenden. Die Ausgabe sieht in etwa folgendermaßen aus:

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       0             0           2                5:5:2:0       yes
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

Die obige Beispielausgabe zeigt, dass jeder Kern 2 CPUs hat und beide CPUs online sind. Kern 0 hat gleichgeordnete Komponenten: CPU 0 und CPU 1. Die entsprechenden Daten aus der Liste gleichgeordneter Komponenten können Sie in Form von thread_sibling_list im Einheitendateisystem abrufen, wie im folgenden Beispiel gezeigt:

cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
0-1
0-1
2-3
2-3
4-5
4-5
6-7
6-7

Einige Kernel und CPU-Architekturen verwenden ein Komma (,) anstelle eines Bindestrichs (-) in dieser Liste.

Sie können die Hyper-Threading-Technologie für einen einzelnen Kern deaktivieren, indem Sie eine Null (0) in das Online-Feld im Gerätedateisystem für die entsprechende CPU schreiben. Um beispielsweise die Hyper-Threading-Technologie für Kern 2 (CPU 5 im vorherigen Beispiel) zu inaktivieren, führen Sie den folgenden Befehl aus:

echo 0 > /sys/devices/system/cpu/cpu5/online

Dieser Befehl versetzt CPU 5 in den Offline-Modus, inaktiviert dabei die Hyper-Threading-Technologie für Kern 2, behält aber die anderen Kerne im Hyper-Threading-Technologie-Modus, wie im folgenden Beispiel gezeigt, wenn Sie den Befehl lscpu --extended ausführen:

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       -             -           -                :::           no
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

Sie können den vorherigen Prozess für jeden Kern wiederholen, um die Hyper-Threading-Technologie für die VM zu inaktivieren. Wenn die VM über viele CPUs verfügt, kann dies schwierig sein. Das folgende Skript ist ein sehr einfaches Bash-Script, um die Hyper-Threading-Technologie auf jedem Kern zu inaktivieren:

#!/bin/bash
     for vcpu in `cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2 | cut -d- -f2 | uniq`; do
          echo 0 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Hyper-Threading-Technologie für einen bestimmten Kern und zugehörige CPU aktivieren

Wenn Sie die Hyper-Threading-Technologie wieder aktivieren möchten, können Sie dies tun, indem Sie für jede der CPUs eine '1' in das Online-Feld schreiben.

echo 1 > /sys/devices/system/cpu/cpu5/online

Hyper-Threading-Technologie für alle Kerne in der VM aktivieren

Alternativ dazu können Sie das folgende einfache Bash-Script verwenden, um die Hyper-Threading-Technologie für die VM zu aktivieren.

#!/bin/bash
     for vcpu in `lscpu --extended | grep "no" | awk '{print $1}'`; do
          echo 1 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Hyper-Threading-Technologie in der eigenen Gast-VM aktivieren und inaktivieren: Script

Sie können auch dieses Skript von Wyatt Gorman zum Aktivieren und Deaktivieren der Hyper-Threading-Technologie verwenden. Wenn Sie das Script herunterladen und ausführen, erhalten Sie die folgenden Optionen:

OPTIONS
-d | --disable             Disable Hyper-Threaded vCPUs
-e | --enable              Enable Hyper-Threaded vCPUs
-s | --show                Show Hyper-Threading status
-h | --help                Display this usage output

Sie können den Status der Hyper-Threading-Technologie abrufen, die Hyper-Threading-Technologie inaktivieren und die Hyper-Threading-Technologie für alle Kerne in der VM aktivieren. Wenn Sie die Hyper-Threading-Technologie jedoch für eine Untergruppe der Kerne inaktivieren müssen, führen Sie die Schritte im Abschnitt 'Grundlagen' aus.

Hyper-Threading-Technologie auf der eigenen Gast-VM zur Bootzeit aktivieren und inaktivieren: Benutzerdaten

IBM Cloud bietet eine Möglichkeit, bei der Erstellung einer Virtual Server-Instanz optionale Daten anzugeben, um Instanzen zu konfigurieren oder Scripts auszuführen, wenn die Instanz bereitgestellt wird. Diese werden als Benutzerdaten bezeichnet.

Während des Erstellungsprozesses der Virtual Server-Instanz können Sie den folgenden Beispielcode im Abschnitt 'Benutzerdaten' der IBM Cloud-Konsole angeben:

#cloud-config
bootcmd:
 - for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2- | tr ',' '\n' | sort -un); do echo 0 > /sys/devices/system/cpu/cpu$cpunum/online; done

Das Script, das Sie im Feld 'Benutzerdaten' angeben, inaktiviert die Hyper-Threading-Technologie während des Bootprozesses der Instanz. Es werden Nachrichten angezeigt, die darauf hinweisen, dass die CPUs inaktiviert sind:

dmesg |grep offline
[    9.488364] smpboot: CPU 1 is now offline
[    9.544370] smpboot: CPU 3 is now offline
[    9.572823] smpboot: CPU 5 is now offline
[    9.600633] smpboot: CPU 7 is now offline

Sie können einen ähnlichen Ansatz verwenden, um diesen Prozess in Terraform einzufügen.