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.