Disattivazione della tecnologia Intel Hyper-Threading

Se la configurazione dell'infrastruttura e l'impostazione dell'applicazione lo richiedono, è possibile disabilitare la tecnologia Intel Hyper-Threading (tecnologia Intel HT) sulla macchina virtuale ospite.

Le istruzioni per disabilitare la tecnologia Intel Hyper-Threading sulle macchine virtuali guest si applicano solo ai server virtuali forniti su host che utilizzano processori basati su Intel.

Comprendere i motivi per disabilitare la tecnologia Intel Hyper-Threading

La tecnologia Intel Hyper-Threading è un termine che descrive il multithreading simultaneo (SMT). La tecnologia Hyper-Threading divide ciascun core fisico in due processori virtuali. La tecnologia Hyper-Threading è come prendere una strada larga con un'unica corsia e trasformarla in due corsie relativamente più strette. L'autostrada a due corsie offre un servizio migliore rispetto alla strada a corsia unica in caso di traffico lento e veloce. La tecnologia Hyper-Threading offre prestazioni applicative migliori quando sono presenti operazioni di I/O file, I/O rete e altre operazioni più lente combinate con operazioni che richiedono un uso intensivo della CPU. Il vantaggio prestazionale della tecnologia Hyper-Threading varia generalmente dallo 0 al 30% rispetto alla modalità a thread singolo. Alcune applicazioni potrebbero anche riscontrare un calo delle prestazioni.

La tecnologia Hyper-Threading non è sempre auspicabile. In questo caso, potresti preferire disabilitarlo ed eseguire i core in modalità a thread singolo. Esistono tre ragioni principali per considerare la disabilitazione della tecnologia Hyper-Threading. Il primo motivo è legato alle licenze del software. Molti fornitori di software legacy, come i fornitori di strumenti EDA (Electronic Design Automation), richiedono una licenza per ciascuna CPU, indipendentemente dal fatto che utilizzino la tecnologia Hyper-Threading o la modalità a thread singolo. Quando il core è in modalità tecnologia Hyper-Threading, sono necessarie il doppio delle licenze rispetto alla modalità a thread singolo, anche se l'applicazione non ottiene prestazioni due volte migliori rispetto alla modalità a thread singolo. Di conseguenza, EDA e altri professionisti disabilitano la tecnologia Hyper-Threading e preferiscono eseguire il proprio software in modalità a thread singolo.

Il secondo motivo per disabilitare la tecnologia Hyper-Threading è evitare problemi di bilanciamento del carico e sovraccarico del sistema operativo forniti con la tecnologia Hyper-Threading. Le applicazioni HPC (High Performance Computing) creano in genere tante attività MPI (Message Passing Interface) quanti sono i core fisici e consentono al sistema operativo di gestire ciascuna attività MPI su un core fisico distinto. Quando la tecnologia Hyper-Threading è abilitata, il sistema operativo vede il doppio delle CPU. Sebbene il sistema operativo di solito svolga un ottimo lavoro nell'assegnare le attività MPI a uno dei due thread di un core, occasionalmente potrebbe collocare entrambe le attività su un core fisico e lasciare liberi gli altri core. Avere entrambe le attività su un core fisico con altri core liberi comporta un utilizzo non ottimale del sistema e prestazioni variabili delle applicazioni. Inoltre, il kernel del sistema operativo alloca strutture dati per ciascuna delle CPU attive e le aggiorna continuamente in modo da allocare più spazio nel kernel in modalità tecnologia Hyper-Threading e ridurre il sovraccarico di gestione. Alleviare il sovraccarico del sistema operativo disabilitando la tecnologia Hyper-Threading aiuta molte applicazioni HPC a raggiungere prestazioni ottimali.

Il terzo motivo per disabilitare la tecnologia Hyper-Threading è la sicurezza. Alcuni utenti preferiscono disabilitare la tecnologia Hyper-Threading per evitare qualsiasi possibilità di attacco del canale laterale associato all'esecuzione della tecnologia Hyper-Threading. IBM Cloud non condivide un nucleo fisico tra le macchine virtuali di due clienti, quindi questo tipo di attacco non è possibile.

Se stabilisci che disabilitare la tecnologia Hyper-Threading è adatto alla tua configurazione, puoi utilizzare uno dei seguenti metodi per disabilitarla sulle tue macchine virtuali (VM) guest in IBM Cloud.

Controllo dello stato della tecnologia Hyper-Threading e modificarlo nella mia VM ospite: nozioni di base

Quando una macchina virtuale è attiva e in esecuzione, è possibile verificare lo stato della tecnologia Hyper-Threading utilizzando il file lscpu comando su Linux sistemi operativi. Verrà visualizzato un output simile al seguente esempio:

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
...

In questo esempio, si noti che vengono visualizzati i thread per core 2, indicando che la tecnologia Hyper-Threading è abilitata. La VM ha 4 core fisici e 8 CPU virtuali. Versioni moderne del Linux kernel consente agli utenti di disabilitare la tecnologia Hyper-Threading in base al core. È possibile eseguire alcuni core con la tecnologia Hyper-Threading abilitata e altri core con la tecnologia Hyper-Threading disabilitata. Per vederlo in base al core, puoi utilizzare il comando lscpu --extended. Verrà visualizzato un output simile al seguente esempio:

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

L'output dell'esempio precedente mostra che ciascun core ha 2 CPU ed entrambe le CPU sono online. Il Core 0 ha fratelli: CPU0 E CPU1. Per ottenere l'elenco dei fratelli, puoi trovare i dati in thread_sibling_list nel file system dei dispositivi come mostrato nell'esempio seguente:

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

Alcuni kernel e architetture CPU utilizzano una virgola (, ) invece di un trattino (-) nell'elenco dei thread fratelli.

È possibile disabilitare la tecnologia Hyper-Threading per un singolo core scrivendo uno zero ( 0 ) nel campo online nel file system del dispositivo per la CPU corrispondente. Ad esempio, per disabilitare la tecnologia Hyper-Threading sul core 2 (CPU 5 nell'esempio precedente), eseguire il comando seguente:

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

Questo comando disattiva la CPU 5, disabilitando la tecnologia Hyper-Threading sul core 2, ma mantiene gli altri core in modalità Hyper-Threading, come mostrato nell'esempio seguente quando si esegue il lscpu --extended comando:

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

È possibile ripetere la procedura precedente per ciascun core per disabilitare la tecnologia Hyper-Threading per la VM. Quando la VM ha molte CPU, questo può risultare difficile. Il seguente script è uno script bash molto semplice per disabilitare la tecnologia Hyper-Threading su ciascun core:

#!/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

Abilitazione della tecnologia Hyper-Threading per un core specifico e una CPU associata

Se desideri riattivare la tecnologia Hyper-Threading, puoi farlo scrivendo un 1 nel campo online per ciascuna delle CPU.

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

Abilitazione della tecnologia Hyper-Threading per tutti i core nella VM

In alternativa, è possibile utilizzare il seguente semplice script bash per abilitare la tecnologia Hyper-Threading per la VM.

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

Abilitazione e disabilitazione della tecnologia Hyper-Threading nella mia VM ospite: Script

Puoi anche provare questo sceneggiatura, creato da Wyatt Gorman, per abilitare e disabilitare la tecnologia Hyper-Threading. Quando scarichi ed esegui lo script, ottieni queste opzioni:

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

È possibile ottenere lo stato della tecnologia Hyper-Threading, disabilitare la tecnologia Hyper-Threading e abilitare la tecnologia Hyper-Threading per tutti i core nella VM. Tuttavia, se è necessario disabilitare la tecnologia Hyper-Threading su un sottoinsieme di core, seguire i passaggi nella sezione Nozioni di base.

Abilitazione e disabilitazione della tecnologia Hyper-Threading nella mia VM ospite all'avvio: dati utente

IBM Cloud fornisce un modo per specificare dati facoltativi quando crei un'istanza del server virtuale per configurare istanze o eseguire script quando viene eseguito il provisioning dell'istanza; questi sono chiamati Dati Utente.

Durante il processo di creazione dell'istanza del server virtuale, puoi specificare il seguente codice di esempio nella sezione Dati utente del file IBM Cloud consolle:

#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

Lo script fornito nel campo Dati utente disabilita la tecnologia Hyper-Threading durante il processo di avvio dell'istanza. Vengono visualizzati messaggi che indicano che le CPU sono disabilitate:

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

Puoi utilizzare un approccio simile per inserire questo processo in Terraform.