Los subprocesos múltiples simultáneos (SMT), que se conocen en los procesadores Intel como tecnología de hipersubprocesos (HTT), permiten que un núcleo de CPU se ejecute como dos subprocesos múltiples de hardware. En Compute Engine, cada CPU virtual se implementa como un solo subproceso múltiple de hardware único, y dos CPU virtuales comparten cada núcleo de la CPU física de forma predeterminada.
Compute Engine te permite configurar de forma manual el valor para la cantidad de subprocesos por núcleo. Por ejemplo, las cargas de trabajo con los siguientes problemas podrían beneficiarse por inhabilitar los SMT (la configuración de la cantidad de subprocesos por núcleo en 1):
Rendimiento: Reducir la cantidad 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 muy paralelas o que realizan cálculos de punto flotante.
Seguridad: Si una VM ejecuta código no confiable, reducir la cantidad de subprocesos por núcleo puede ayudar a mitigar las vulnerabilidades de CPU, como el muestreo de datos de microarquitectura.
Licencias: Algunos contratos de licencia tienen requisitos relacionados con la cantidad de CPU virtuales que consumes. Reducir la cantidad de subprocesos por núcleo de 2 a 1 puede reducir los costos de licencia. Para obtener más información, consulta tu contrato de licencia.
En el caso de que haya muchas tareas generales de procesamiento o tareas que requieren mucha E/S, se puede aumentar la capacidad de procesamiento de la aplicación de manera significativa mediante los SMT. En el caso de que existan trabajos vinculados al procesamiento en los que ambos núcleos virtuales estén vinculados al procesamiento, los SMT pueden afectar el rendimiento general de la aplicación y agregar una varianza impredecible a los trabajos. En este caso, desactivar los SMT permite un rendimiento más predecible y puede disminuir los tiempos de trabajo.
Limitaciones
No puedes establecer la cantidad de subprocesos por núcleo en las VM para los siguientes tipos de máquinas:
- 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áquinas que tienen menos de 2 CPU virtuales, por ejemplo,
n1-standard-1
- Tipos de máquinas de núcleo compartido, como
e2-small
.
Para las instancias de equipos físicos C3 y X4, la cantidad de hipersubprocesos a los que tienes acceso es equivalente a la cantidad de hipersubprocesos en la máquina.
En la consola de Google Cloud, cuando la cantidad de subprocesos por núcleo se establece en 1, la métrica de uso de CPU solo puede escalar verticalmente hasta un 50%. Cuando la cantidad de subprocesos por núcleo se establece en 2, la métrica de uso de CPU puede escalar hasta el 100%.
Precios
Se te factura por la cantidad de CPU virtuales definida por el tipo de máquina de una VM, no por la cantidad de subprocesos que se ejecutan en cada núcleo. Por ejemplo, el tipo de máquina n2-standard-8
puede ejecutar hasta 8 CPU virtuales, que son 2 CPU virtuales para 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 subproceso por núcleo, es decir, 4 CPU virtuales, se te cobrarán 8 CPU virtuales. Para obtener más información sobre cómo se te facturan las VMs, consulta Precios de instancias de VM.
Cambia la cantidad de subprocesos por núcleo durante la creación de la VM
Para cambiar la cantidad de subprocesos por núcleo durante la creación de la VM, usa la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.
Permisos necesarios para esta tarea
Para realizar esta tarea, debes tener los siguientes permisos:
- Todos los permisos necesarios para crear una VM nueva
Console
Para cambiar la cantidad de subprocesos por núcleo durante la creación de la VM, usa el siguiente procedimiento de la consola de Google Cloud:
En la consola de Google Cloud, ve a la página Crea una instancia.
En el campo Nombre, ingresa 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 expandir la sección.
En Proporción de CPU virtuales a núcleo, elige la cantidad de subprocesos por núcleo.
Termina de configurar otras opciones de configuración para la VM y haz clic en Crear.
gcloud
Para cambiar la cantidad de subprocesos por núcleo durante la creación de la VM, usa el siguiente comando gcloud compute instances create
.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- VM_NAME: Es el nombre de la VM nueva.
- ZONE: Es la zona para la VM nueva.
- MACHINE_TYPE: Es el tipo de máquina para la nueva VM. Debe ser un tipo de máquina con 2 CPU virtuales o más.
- THREADS_PER_CORE: Es la cantidad de subprocesos visibles por núcleo físico. Se establece en
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 que figura a continuación:
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 la cantidad de subproceso por núcleo durante la creación de la VM, usa el método instances.insert
con el campo threadsPerCore
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID del proyecto.
- ZONE: Es la zona para la VM nueva.
- MACHINE_TYPE: Es el tipo de máquina para la nueva VM. Debe ser un tipo de máquina con 2 CPU virtuales o más.
- VM_NAME: Es el nombre de la VM nueva.
- THREADS_PER_CORE: Es la cantidad de subprocesos visibles por núcleo físico. Se establece en
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, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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" }
Cambia la cantidad de subprocesos por núcleo en una VM
Para cambiar la cantidad de subprocesos por núcleo en una VM, usa la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.
Permisos necesarios para esta tarea
Para realizar esta tarea, debes tener los siguientes permisos:
-
compute.instances.get
en el proyecto -
compute.instances.update
en el proyecto
Console
Para cambiar la cantidad de subprocesos por núcleo en una VM existente, usa el siguiente procedimiento de la consola de Google Cloud:
En la consola de Google Cloud, ve a la página Instancias de VM.
Haz clic en el nombre de la VM.
Si el Estado de la VM es En ejecución, haz clic en Detener.
Haz clic en Editar.
Haz clic en Configuración avanzada para expandir la sección.
En la lista desplegable CPU virtuales para proporción de núcleos, elige la cantidad de subprocesos por núcleo.
Haz clic en Guardar.
gcloud
Para cambiar la cantidad de subprocesos por núcleo en una VM existente, haz lo siguiente:
Exporta las propiedades de la VM mediante el siguiente comando
gcloud compute instances export
:gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
Reemplaza lo siguiente:
VM_NAME
: El nombre de la VM desde la que se exportarán las propiedadesYAML_FILE_PATH
: La ruta de acceso y el nombre de un archivo .yaml en el que se guardarán los datos de configuración exportadosZONE
: La zona que contiene la VM
En el archivo de configuración de VM que se guardó en FILE_PATH, actualiza el valor de
threadsPerCore
. Si el valor no está en el archivo, agrega lo siguiente:advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
Actualiza la VM con el nuevo recuento de subprocesos por núcleo mediante el siguiente 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
Reemplaza lo siguiente:
VM_NAME
: El nombre de la VM que se actualizaráFILE_PATH
: La ruta de acceso al archivo de configuración de VM actualizadaZONE
: la zona que contiene la VM que se actualizará
REST
Para cambiar la cantidad de subprocesos por núcleo en una VM existente, usa el siguiente método 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" }, ... }
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyectoZONE
: La zona que contiene la VMVM_NAME
: El nombre de la VM desde la que se exportarán las propiedadesTHREADS_PER_CORE
: La cantidad de subprocesos por núcleo
Visualiza la cantidad de subprocesos por núcleo
Para ver la cantidad de subprocesos por núcleo, usa el procedimiento que corresponde al SO que se ejecuta en la VM.
Linux
Para ver la cantidad de subprocesos por núcleo en VM basadas en Linux, usa el siguiente procedimiento:
Ejecuta el comando
lscpu
.lscpu
Revisa el resultado para ver la cantidad de subprocesos por núcleo.
En el siguiente resultado de muestra de una máquina
n2-standard-16
, el valor de la cantidad 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 la cantidad de subprocesos por núcleo en las VMs basadas en Windows, usa el siguiente procedimiento:
Inicia PowerShell.
Ejecuta el siguiente comando.
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Revisa el resultado para ver la cantidad de subprocesos por núcleo.
En el siguiente resultado de muestra de una máquina
n2-standard-16
, el valor de la cantidad de subprocesos por núcleo es1
como se muestra en la columnaThread(s) per core
.NumberOfCores Thread(s) per core ------------- ------------------ 8 1
¿Qué sigue?
- Obtén más información sobre los sistemas operativos que puedes ejecutar en las VM de Compute Engine.