Imposta il numero di thread per core

Il multi-threading simultaneo (SMT), noto nei processori Intel come La tecnologia Hyper-Threading (HTT) consente di eseguire un core della CPU come due componenti hardware multi-thread. In Compute Engine, ogni CPU virtuale (vCPU) è implementata come un singolo multithread hardware e due vCPU condividono ciascun core CPU fisica predefinito.

Compute Engine ti consente di impostare manualmente il valore per il numero di thread per core. Ad esempio, i carichi di lavoro che presentano i seguenti problemi traggono vantaggio dalla disattivazione di SMT (impostando il numero di thread per core su 1):

  • Prestazioni: riduzione del numero di thread in esecuzione su ogni CPU fisica il core può aiutare a migliorare le prestazioni dei carichi di lavoro altamente paralleli o che eseguono calcoli con rappresentazione in virgola mobile.

  • Sicurezza: se una VM esegue codice non attendibile, riduce il numero di thread per core può aiutare a mitigare le vulnerabilità della CPU come Microarchitectural Data Campionamento.

  • Licenze: alcuni contratti di licenza hanno requisiti relativi alle e il numero di vCPU che utilizzi. Ridurre il numero di thread per core da 2 a 1 potrebbero ridurre i costi delle licenze. Per ulteriori informazioni, consulta il contratto di licenza.

Per molte attività di calcolo generali o che richiedono molti I/O, SMT può aumentare significativamente la velocità effettiva dell'applicazione. Per i job legati al calcolo in cui entrambi i core virtuali sono legati al calcolo, SMT può ostacolare l'applicazione delle prestazioni e può aggiungere variazioni imprevedibili ai job. In questo caso, la rotazione da SMT consente prestazioni più prevedibili e può ridurre i tempi dei job.

Limitazioni

  • Non puoi impostare il numero di thread per core sulle VM per quanto segue tipi di macchina:

  • Nella console Google Cloud, quando è impostato il numero di thread per core a 1, la metrica di utilizzo della CPU può fare lo scale 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ò fino al 100%.

Prezzi

Ti viene addebitato il costo per il numero di vCPU definito dal tipo di macchina di una VM, non di thread eseguiti su ciascun core. Ad esempio, n2-standard-8 di tipo di macchina può eseguire fino a 8 vCPU, ovvero 2 vCPU per ciascuna delle 4 vCPU Core della CPU. Se, con il tipo di macchina n2-standard-8, decidi di eseguire solo 1 di thread per core (effettivamente 4 vCPU), ti vengono comunque addebitati 8 di memoria per vCPU. Per saperne di più sulle modalità di fatturazione per le VM, consulta Istanza VM pricing.

Modificare 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 nella console Google Cloud, gcloud CLI o l'API Compute Engine.

Autorizzazioni richieste per questa attività

Per eseguire questa attività, devi disporre delle seguenti autorizzazioni:

Console

Per modificare il numero di thread per core durante la creazione della VM, usa quanto segue Procedura della console Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Nel campo Nome, inserisci un nome per la VM.

  3. Scegli una regione e una zona per la VM.

  4. Scegli una Famiglia di macchine e un Tipo di macchina supportato.

  5. Fai clic su Configurazioni avanzate per espandere la sezione.

  6. In Rapporto tra vCPU e core, scegli il numero di thread per core.

  7. Completa la configurazione delle altre impostazioni della VM e fai clic su Crea.

gcloud

Per modificare il numero di thread per core durante la creazione della VM, utilizza Comando gcloud compute instances create.

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • VM_NAME: il nome della nuova VM.
  • ZONE: la zona per la 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 o 1.

Esegui la persone che seguo :

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 instances.insert predefinito con threadsPerCore.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto.
  • ZONE: la zona per la 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 o 1.

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 delle seguenti 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"
}

Modificare il numero di thread per core su una VM

Per modificare il numero di thread per core su una VM, utilizza nella console Google 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 nel progetto
  • compute.instances.update nel progetto

Console

Per modificare il numero di thread per core su una VM esistente, utilizza seguendo la procedura della console Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Fai clic sul nome della VM.

  3. Se lo stato della VM è In esecuzione, fai clic su Arresta.

  4. Fai clic su Modifica.

  5. Fai clic su Configurazioni avanzate per espandere la sezione.

  6. Nell'elenco a discesa Rapporto tra vCPU e core, scegli il numero di thread per core.

  7. Fai clic su Salva.

gcloud

Per modificare il numero di thread per core su una VM esistente, seguenti:

  1. 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 proprietà di esportazione

    • YAML_FILE_PATH: il percorso e il nome del file di un File .yaml in cui salvare i dati di configurazione esportati

    • ZONE: la zona che contiene la VM

  2. Nel file di configurazione della VM salvato in FILE_PATH, aggiorna il valore di threadsPerCore. Se il valore non è presente nel file, aggiungi quanto segue:

    advancedMachineFeatures:
      threadsPerCore: THREADS_PER_CORE
    
  3. Aggiorna la VM con il nuovo conteggio di thread per core utilizzando il metodo persone che seguo: gcloud compute instances update-from-file comando:

    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 aggiornare

    • FILE_PATH: il percorso della VM aggiornata file di configurazione

    • ZONE: la zona che contiene la VM da aggiornare

REST

Per modificare il numero di thread per core su una VM esistente, utilizza persone che seguo: 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 del progetto

  • ZONE: la zona che contiene la VM

  • VM_NAME: il nome della VM da cui proprietà di esportazione

  • 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 a il sistema operativo in esecuzione sulla VM.

Linux

Per visualizzare il numero di thread per core nelle VM basate su Linux, usa quanto segue procedura:

  1. Connettiti alla VM Linux.

  2. Esegui il comando lscpu.

    lscpu
    
  3. Esamina l'output per visualizzare il numero di thread per core.

    Nel seguente output di esempio da una macchina n2-standard-16, il valore per il numero di thread per il core è 1, come mostrato nella riga Thread(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, utilizza seguente procedura:

  1. Connettiti alla VM Windows.

  2. Avvia Powershell.

  3. Esegui questo comando.

    Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
    
  4. Esamina l'output per visualizzare il numero di thread per core.

    Nel seguente output di esempio da una macchina n2-standard-16, il valore per il numero di thread per il core è 1 come mostrato nella colonna Thread(s) per core.

    NumberOfCores Thread(s) per core
    ------------- ------------------
                8                  1
    

Passaggi successivi