Definir el número de hilos por núcleo


El multihilo simultáneo (SMT), conocido en los procesadores Intel como tecnología Hyper-Threading (HTT), permite que un núcleo de CPU se ejecute como dos multihilos de hardware. En Compute Engine, cada CPU virtual (vCPU) se implementa como un único multihilo de hardware y dos vCPUs comparten cada núcleo de CPU física de forma predeterminada.

Compute Engine te permite definir manualmente el valor del número de hilos por núcleo. Por ejemplo, las cargas de trabajo con los siguientes problemas pueden beneficiarse de la inhabilitación de SMT (establecer el número de hilos por núcleo en 1):

  • Rendimiento: reducir el número de subprocesos que se ejecutan en cada núcleo de CPU físico puede ayudar a mejorar el rendimiento de las cargas de trabajo que son altamente paralelas o que realizan cálculos de coma flotante.

  • Seguridad: si una VM ejecuta código no fiable, reducir el número de subprocesos por núcleo puede ayudar a mitigar las vulnerabilidades de la CPU, como el muestreo de datos microarquitectónicos.

  • Licencias: algunos contratos de licencia tienen requisitos relacionados con el número de vCPUs que consumes. Si reduces el número de subprocesos por núcleo de 2 a 1, es posible que se reduzcan los costes de licencia. Para obtener más información, consulta tu contrato de licencia.

En muchas tareas de computación generales o tareas que requieren muchas operaciones de E/S, SMT puede aumentar significativamente el rendimiento de las aplicaciones. En las tareas que dependen de la computación y en las que ambos núcleos virtuales dependen de la computación, SMT puede dificultar el rendimiento general de las aplicaciones y añadir variaciones impredecibles a las tareas. En este caso, desactivar SMT permite que el rendimiento sea más predecible y puede reducir los tiempos de las tareas.

Limitaciones

Precios

Se te facturará el número de vCPUs definido por el tipo de máquina de la VM, no el número de hilos que se ejecutan en cada núcleo. Por ejemplo, el tipo de máquina n2-standard-8 puede ejecutar hasta 8 vCPUs, es decir, 2 vCPUs por cada uno de los 4 núcleos de CPU físicos. Si, con el tipo de máquina n2-standard-8, decides ejecutar solo 1 hilo por núcleo (es decir, 4 vCPUs), se te seguirá facturando por 8 vCPUs. Para obtener más información sobre cómo se te factura por las VMs, consulta los precios de las instancias de VM.

Cambiar el número de hilos por núcleo durante la creación de la VM

Para cambiar el número de hilos por núcleo durante la creación de la VM, utiliza laGoogle Cloud consola, la CLI de gcloud o la API de Compute Engine.

Permisos que se necesitan para completar esta tarea

Para realizar esta tarea, debes tener los siguientes permisos:

Consola

Para cambiar el número de hilos por núcleo durante la creación de la VM, sigue este procedimiento en la consola:Google Cloud

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. En el campo Nombre, introduce un nombre para la VM.

  3. Elige una región y una zona para la VM.

  4. Elige una familia de máquinas y un tipo de máquina compatible.

  5. Haz clic en Configuración avanzada para desplegar la sección.

  6. En Relación entre vCPUs y núcleos, elige el número de hilos por núcleo.

  7. Termina de configurar los demás ajustes de la VM y haz clic en Crear.

gcloud

Para cambiar el número de hilos por núcleo durante la creación de la VM, usa el comando gcloud compute instances create.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • VM_NAME: el nombre de la nueva VM.
  • ZONE: la zona de la nueva VM.
  • MACHINE_TYPE: el tipo de máquina de la nueva VM. Debe ser un tipo de máquina con 2 o más vCPUs.
  • THREADS_PER_CORE: el número de hilos por núcleo físico. Su valor debe ser 2 o 1.

Ejecuta el siguiente 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

Deberías recibir una respuesta similar a la siguiente:

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

Para cambiar el número de hilos por núcleo durante la creación de la VM, usa el método instances.insert con el campo threadsPerCore.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto.
  • ZONE: la zona de la nueva VM.
  • MACHINE_TYPE: el tipo de máquina de la nueva VM. Debe ser un tipo de máquina con 2 o más vCPUs.
  • VM_NAME: el nombre de la nueva VM.
  • THREADS_PER_CORE: el número de hilos por núcleo físico. Su valor debe ser 2 o 1.

Método HTTP y URL:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Cuerpo JSON de la solicitud:

{
  "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"
    }
  ]
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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"
}

Cambiar el número de hilos por núcleo en una VM

Para cambiar el número de hilos por núcleo de una VM, usa laGoogle Cloud consola, la CLI de gcloud o la API de Compute Engine.

Permisos que se necesitan para completar esta tarea

Para realizar esta tarea, debes tener los siguientes permisos:

  • compute.instances.get en el proyecto
  • compute.instances.update en el proyecto

Consola

Para cambiar el número de hilos por núcleo en una VM, sigue este procedimiento en la consola: Google Cloud

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a instancias de VM

  2. Haz clic en el nombre de la VM.

  3. Haz clic en Detener para detener la VM. Si no aparece la opción Detener, haz clic en Más acciones > Detener.

  4. Haz clic en Editar.

  5. Haz clic en Configuración avanzada para desplegar la sección.

  6. En la lista desplegable Relación entre vCPUs y núcleos, elige el número de hilos por núcleo.

  7. Haz clic en Guardar.

gcloud

Para cambiar el número de hilos por núcleo en una VM, sigue estos pasos:

  1. Exporta las propiedades de la VM con el siguiente comando gcloud compute instances export:

    gcloud compute instances export VM_NAME \
        --destination=YAML_FILE_PATH \
        --zone=ZONE
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la VM de la que se van a exportar las propiedades

    • YAML_FILE_PATH: la ruta y el nombre de archivo de un archivo YAML en el que guardar los datos de configuración exportados

    • ZONE: la zona que contiene la VM

  2. En el archivo de configuración de la VM que has guardado en FILE_PATH, actualiza el valor de threadsPerCore. Si el valor no está en el archivo, añade lo siguiente:

    advancedMachineFeatures:
      threadsPerCore: THREADS_PER_CORE
    
  3. Actualiza la VM con el nuevo número de hilos por núcleo mediante el siguiente 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
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la VM que se va a actualizar

    • FILE_PATH: la ruta al archivo de configuración de la VM actualizado

    • ZONE: la zona que contiene la VM que se va a actualizar

REST

Para cambiar el número de hilos por núcleo en una VM, usa el siguiente instances.update método:

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"
  },
  ...
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto

  • ZONE: la zona que contiene la VM

  • VM_NAME: el nombre de la VM de la que se van a exportar las propiedades

  • THREADS_PER_CORE: número de hilos por núcleo

Ver el número de cadenas por núcleo

Para ver el número de subprocesos por núcleo, siga el procedimiento correspondiente al SO que se esté ejecutando en la VM.

Linux

Para ver el número de hilos por núcleo en las máquinas virtuales basadas en Linux, sigue este procedimiento:

  1. Conéctate a la VM de Linux.

  2. Ejecuta el comando lscpu.

    lscpu
    
  3. Revisa la salida para ver el número de subprocesos por núcleo.

    En el siguiente ejemplo de salida de una máquina n2-standard-16, el valor del número de subprocesos por núcleo es 1, como se muestra en la línea 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

Para ver el número de hilos por núcleo en las VMs basadas en Windows, sigue este procedimiento:

  1. Conéctate a la VM de Windows.

  2. Inicia PowerShell.

  3. Ejecuta el siguiente comando:

    Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
    
  4. Revisa la salida para ver el número de subprocesos por núcleo.

    En el siguiente ejemplo de salida de una máquina n2-standard-16, el valor del número de subprocesos por núcleo es 1, como se muestra en la columna Thread(s) per core.

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

Siguientes pasos