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
No puedes definir el número de hilos por núcleo en las VMs de los siguientes tipos de máquina:
- Todos los tipos de máquinas C4A
- Todos los tipos de máquinas H3
- Todos los tipos de máquinas Tau T2A
- Todos los tipos de máquinas Tau T2D
- Tipos de máquina que tienen menos de 2 vCPUs, como
n1-standard-1
- Tipos de máquinas de núcleo compartido, como
e2-small
.
En el caso de las instancias de bare metal, el número de hiperhilos a los que tienes acceso es equivalente al número de hiperhilos de la máquina.
En la consola Google Cloud , cuando el número de hilos por núcleo es 1, la métrica de uso de CPU solo puede aumentar hasta un máximo del 50%. Si el número de hilos por núcleo es 2, la métrica de utilización de la CPU puede aumentar hasta el 100%.
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:
- Todos los permisos necesarios para crear una VM
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
En la Google Cloud consola, ve a la página Crear una instancia.
En el campo Nombre, introduce un nombre para la VM.
Elige una región y una zona para la VM.
Elige una familia de máquinas y un tipo de máquina compatible.
Haz clic en Configuración avanzada para desplegar la sección.
En Relación entre vCPUs y núcleos, elige el número de hilos por núcleo.
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
o1
.
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
o1
.
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
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en el nombre de la VM.
Haz clic en
Detener para detener la VM. Si no aparece la opción Detener, haz clic en Más acciones > Detener.Haz clic en Editar.
Haz clic en Configuración avanzada para desplegar la sección.
En la lista desplegable Relación entre vCPUs y núcleos, elige el número de hilos por núcleo.
Haz clic en Guardar.
gcloud
Para cambiar el número de hilos por núcleo en una VM, sigue estos pasos:
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 propiedadesYAML_FILE_PATH
: la ruta y el nombre de archivo de un archivo YAML en el que guardar los datos de configuración exportadosZONE
: la zona que contiene la VM
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
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 actualizarFILE_PATH
: la ruta al archivo de configuración de la VM actualizadoZONE
: 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 proyectoZONE
: la zona que contiene la VMVM_NAME
: el nombre de la VM de la que se van a exportar las propiedadesTHREADS_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:
Ejecuta el comando
lscpu
.lscpu
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 es1
, como se muestra en la líneaThread(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:
Inicia PowerShell.
Ejecuta el siguiente comando:
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
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 es1
, como se muestra en la columnaThread(s) per core
.NumberOfCores Thread(s) per core ------------- ------------------ 8 1