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 presenti in questo argomento 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 se il traffico è lento e veloce. La tecnologia Hyper-Threading fornisce migliori prestazioni delle applicazioni quando sono presenti I/O di file, I/O di rete e altre operazioni più lente mescolate con operazioni che richiedono un utilizzo 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. Mentre il sistema operativo di solito fa un ottimo lavoro nel mappare le attività MPI su uno dei due thread di un core, il sistema operativo 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 del sistema non ottimale 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. Vedrai un output simile al seguente:
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
. Vedrai un output simile al seguente:
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 fratelli del thread.
È 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 mette la CPU 5 offline, disabilitando la tecnologia Hyper-Threading sul core 2 ma mantiene gli altri core in modalità Tecnologia Hyper-Threading come mostrato nell'esempio seguente quando si esegue il comando 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ò essere 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.