Il multi-threading simultaneo (SMT), noto sui processori Intel come tecnologia Hyper-Threading (HTT), consente a un core della CPU di funzionare come due multithread hardware. In Compute Engine, ogni CPU virtuale (vCPU) viene implementata come un singolo multithread hardware e, per impostazione predefinita, due vCPU condividono ciascun core della CPU fisica.
Compute Engine ti consente di impostare manualmente il valore del numero di thread per core. Ad esempio, i workload con i seguenti problemi potrebbero beneficiare della disattivazione di SMT (impostando il numero di thread per core su 1):
Prestazioni: la riduzione del numero di thread in esecuzione su ogni core della CPU fisica può contribuire a migliorare le prestazioni di workload altamente paralleli o che eseguono calcoli di rappresentazione in virgola mobile.
Sicurezza: se una VM esegue un codice non attendibile, la riduzione del numero di thread per core può contribuire a mitigare le vulnerabilità della CPU, come il Microarchitectural Data Sampling.
Licenze: alcuni contratti di licenza prevedono requisiti relativi al numero di vCPU utilizzate. La riduzione del numero di thread per core da 2 a 1 potrebbe ridurre i costi di licenza. Per ulteriori informazioni, consulta il tuo contratto di licenza.
Per molte attività di calcolo generiche o che richiedono molto I/O, SMT può aumentare notevolmente il throughput delle applicazioni. Per i job con vincoli di calcolo in cui entrambi i core virtuali sono legati al calcolo, SMT può ostacolare le prestazioni complessive dell'applicazione e aggiungere una varianza imprevedibile ai job. In questo caso, la disattivazione di SMT consente prestazioni più prevedibili e può ridurre i tempi di esecuzione dei job.
Limitazioni
Non puoi impostare il numero di thread per core sulle VM per i seguenti tipi di macchina:
- Tutti i tipi di macchina C4A
- Tutti i tipi di macchina H3
- Tutti i tipi di macchina Tau T2A
- Tutti i tipi di macchina Tau T2D
- Tipi di macchina con meno di 2 vCPU, ad esempio
n1-standard-1
- Tipi di macchina con core condivisi, ad esempio
e2-small
Per le istanze Bare Metal C3 e X4, il numero di hyperthread a cui hai accesso è equivalente al numero di hyperthread sulla macchina.
Nella console Google Cloud , quando il numero di thread per core è impostato su 1, la metrica di utilizzo della CPU può scalare up solo fino a un massimo del 50%. Quando il numero di thread per core è impostato su 2, la metrica di utilizzo della CPU può scalare fino al 100%.
Prezzi
Ti viene addebitato il costo per il numero di vCPU definite dal tipo di macchina di una VM, non per il
numero di thread in esecuzione su ogni core. Ad esempio, il tipo di macchina n2-standard-8
può eseguire fino a 8 vCPU, ovvero 2 vCPU per ciascuno dei 4 core
della CPU fisica. Se, con il tipo di macchina n2-standard-8
, decidi di eseguire un solo
thread per core, ovvero 4 vCPU, ti verranno comunque addebitate 8
vCPU. Per ulteriori informazioni su come vengono fatturate le VM, vedi Prezzi delle istanze
VM.
Modifica il numero di thread per core durante la creazione della VM
Per modificare il numero di thread per core durante la creazione della VM, utilizza la consoleGoogle Cloud , gcloud CLI o l'API Compute Engine.
Autorizzazioni richieste per questa attività
Per eseguire questa attività, devi disporre delle seguenti autorizzazioni:
- Tutte le autorizzazioni necessarie per creare una nuova VM
Console
Per modificare il numero di thread per core durante la creazione della VM, utilizza la seguente procedura della consoleGoogle Cloud :
Nella console Google Cloud , vai alla pagina Crea un'istanza.
Nel campo Nome, inserisci un nome per la VM.
Seleziona una regione e una zona per la VM.
Seleziona una famiglia di macchine e un tipo di macchina supportato.
Fai clic su Configurazioni avanzate per espandere la sezione.
In Rapporto vCPU/core, scegli il numero di thread per core.
Completa la configurazione delle altre impostazioni per la VM e fai clic su Crea.
gcloud
Per modificare il numero di thread per core durante la creazione della VM, utilizza il
comando gcloud compute instances create
.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- VM_NAME: il nome della nuova VM
- ZONE: la zona della nuova VM
- MACHINE_TYPE: il tipo di macchina per la nuova VM. Deve essere un tipo di macchina con 2 o più vCPU.
- THREADS_PER_CORE: il numero di thread per core fisico. Imposta su
2
o1
.
Esegui questo comando:
Linux, macOS o Cloud Shell
gcloud compute instances create VM_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --threads-per-core=THREADS_PER_CORE
Windows (PowerShell)
gcloud compute instances create VM_NAME ` --zone=ZONE ` --machine-type=MACHINE_TYPE ` --threads-per-core=THREADS_PER_CORE
Windows (cmd.exe)
gcloud compute instances create VM_NAME ^ --zone=ZONE ^ --machine-type=MACHINE_TYPE ^ --threads-per-core=THREADS_PER_CORE
Dovresti ricevere una risposta simile alla seguente:
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME]. NAME: VM_NAME ZONE: ZONE MACHINE_TYPE: MACHINE_TYPE PREEMPTIBLE: INTERNAL_IP: EXTERNAL_IP EXTERNAL_IP: INTERNAL_IP STATUS: RUNNING
REST
Per modificare il numero di thread per core durante la creazione della VM, utilizza il
metodo instances.insert
con il
campo threadsPerCore
.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- PROJECT_ID: l'ID progetto
- ZONE: la zona della nuova VM
- MACHINE_TYPE: il tipo di macchina per la nuova VM. Deve essere un tipo di macchina con 2 o più vCPU.
- VM_NAME: il nome della nuova VM
- THREADS_PER_CORE: il numero di thread per core fisico. Imposta su
2
o1
.
Metodo HTTP e URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
Corpo JSON della richiesta:
{ "machineType": "projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "advancedMachineFeatures": { "threadsPerCore": THREADS_PER_CORE }, "disks": [ { "type": "PERSISTENT", "boot": true, "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/family/debian-11" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ] }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "kind": "compute#operation", "id": "7334609091572405391", "name": "operation-1663806045894-5e939085735d8-7499db32-c12fcc03", "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME", "targetId": "1226375378512516273", "status": "RUNNING", "user": "EMAIL_ADDRESS", "progress": 0, "insertTime": "2022-09-21T17:20:48.751-07:00", "startTime": "2022-09-21T17:20:48.751-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1663806045894-5e939085735d8-7499db32-c12fcc03" }
Modifica il numero di thread per core su una VM
Per modificare il numero di thread per core su una VM, utilizza la consoleGoogle Cloud , gcloud CLI o l' API Compute Engine.
Autorizzazioni richieste per questa attività
Per eseguire questa attività, devi disporre delle seguenti autorizzazioni:
-
compute.instances.get
sul progetto -
compute.instances.update
sul progetto
Console
Per modificare il numero di thread per core su una VM esistente, utilizza la seguente procedura della console Google Cloud :
Nella console Google Cloud , vai alla pagina Istanze VM.
Fai clic sul nome della VM.
Fai clic su
Arresta per arrestare la VM. Se non è presente l'opzione Arresta, fai clic su Altre azioni > Arresta.Fai clic su Modifica.
Fai clic su Configurazioni avanzate per espandere la sezione.
Nell'elenco a discesa Rapporto vCPU/core, scegli il numero di thread per core.
Fai clic su Salva.
gcloud
Per modificare il numero di thread per core in una VM esistente, svolgi questi passaggi:
Esporta le proprietà della VM utilizzando il seguente comando
gcloud compute instances export
:gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
Sostituisci quanto segue:
VM_NAME
: il nome della VM da cui esportare le proprietàYAML_FILE_PATH
: il percorso e il nome di un file .yaml in cui salvare i dati di configurazione esportatiZONE
: la zona che contiene la VM
Nel file di configurazione della VM salvato in FILE_PATH, aggiorna il valore di
threadsPerCore
. Se il valore non è nel file, aggiungi quanto segue:advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
Aggiorna la VM con il nuovo numero di thread per core utilizzando il seguente comando
gcloud compute instances update-from-file
:gcloud compute instances update-from-file VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE
Sostituisci quanto segue:
VM_NAME
: il nome della VM da aggiornareFILE_PATH
: il percorso del file di configurazione della VM aggiornataZONE
: la zona contenente la VM da aggiornare
REST
Per modificare il numero di thread per core in una VM esistente, utilizza il
seguente metodo instances.update
:
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART { ... "advanced_machine_features": { ... "threadsPerCore": "THREADS_PER_CORE" }, ... }
Sostituisci quanto segue:
PROJECT_ID
: l'ID progettoZONE
: la zona che contiene la VMVM_NAME
: il nome della VM da cui esportare le proprietàTHREADS_PER_CORE
: il numero di thread per core
Visualizza il numero di thread per core
Per visualizzare il numero di thread per core, utilizza la procedura corrispondente al sistema operativo in esecuzione sulla VM.
Linux
Per visualizzare il numero di thread per core nelle VM basate su Linux, segui questa procedura:
Esegui il comando
lscpu
.lscpu
Esamina l'output per visualizzare il numero di thread per core.
Nel seguente output di esempio di una macchina
n2-standard-16
, il valore del numero di thread per core è1
, come mostrato nella rigaThread(s) per core
.... CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) CPU @ 2.80GHz ...
Windows
Per visualizzare il numero di thread per core nelle VM basate su Windows, segui questa procedura:
Avvia PowerShell.
Esegui questo comando.
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Esamina l'output per visualizzare il numero di thread per core.
Nel seguente output di esempio di una macchina
n2-standard-16
, il valore del numero di thread per core è1
, come mostrato nella colonnaThread(s) per core
.NumberOfCores Thread(s) per core ------------- ------------------ 8 1