El multiproceso 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 subprocesos múltiples de hardware. En Compute Engine, cada CPU virtual (vCPU) se implementa como un único subproceso de hardware y dos vCPU comparten cada núcleo de CPU físico de forma predeterminada.
Compute Engine te permite establecer manualmente el valor de la cantidad de subprocesos por núcleo. Por ejemplo, las cargas de trabajo con las siguientes preocupaciones podrían beneficiarse al deshabilitar SMT (estableciendo el número de subprocesos por núcleo en 1):
Rendimiento: Reducir la cantidad de subprocesos que se ejecutan en cada núcleo físico de la CPU puede ayudar a mejorar el rendimiento de cargas de trabajo que son muy paralelas o que realizan cálculos de punto flotante.
Seguridad: si una máquina virtual ejecuta código que no es de confianza, reducir la cantidad de subprocesos por núcleo puede ayudar a mitigar las vulnerabilidades de la CPU, como el muestreo de datos de microarquitectura .
Licencias: algunos acuerdos de licencia tienen requisitos relacionados con la cantidad de vCPU que consume. Reducir la cantidad de subprocesos por núcleo de 2 a 1 podría reducir los costos de licencia. Para obtener más información, consulte su acuerdo de licencia.
Para muchas tareas informáticas generales o tareas que requieren mucha E/S, SMT puede aumentar significativamente el rendimiento de la aplicación. Para trabajos vinculados a la computación en los que ambos núcleos virtuales están vinculados a la computación, SMT puede obstaculizar el rendimiento general de la aplicación y agregar variaciones impredecibles a los trabajos. En este caso, desactivar SMT permite un rendimiento más predecible y puede reducir los tiempos de trabajo.
Limitaciones
No puede establecer la cantidad de subprocesos por núcleo en máquinas virtuales para los siguientes tipos de máquinas:
- 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áquinas que tienen menos de 2 vCPU, por ejemplo,
n1-standard-1
- Tipos de máquinas de núcleo compartido , como
e2-small
.
Para las instancias bare metal C3 y X4, la cantidad de hiperprocesos a los que tiene acceso es equivalente a la cantidad de hiperprocesos 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 utilización de la CPU solo puede escalar hasta un máximo del 50 %. Cuando la cantidad de subprocesos por núcleo se establece en 2, la métrica de utilización de la CPU puede escalar hasta el 100 %.
Precios
Se le factura la cantidad de vCPU definidas por el tipo de máquina de una máquina virtual, no 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 vCPU, es decir, 2 vCPU para cada uno de los 4 núcleos físicos de la CPU. Si, con el tipo de máquina n2-standard-8
, decide ejecutar solo 1 subproceso por núcleo (efectivamente, 4 vCPU), aún se le facturarán 8 vCPU. Para obtener más información sobre cómo se le facturan las VM, consulte Precios de instancias de VM .
Cambiar la cantidad de subprocesos por núcleo durante la creación de VM
Para cambiar la cantidad de subprocesos por núcleo durante la creación de VM, use la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.
Permisos necesarios para esta tarea
Para realizar esta tarea, debe tener los siguientes permisos :
- Todos los permisos necesarios para crear una nueva VM
Consola
Para cambiar la cantidad de subprocesos por núcleo durante la creación de VM, utilice el siguiente procedimiento de la consola de Google Cloud:
En la consola de Google Cloud, vaya a la página Crear una instancia .
En el campo Nombre , ingrese un nombre para la VM.
Elija una región y una zona para la VM.
Elija una familia de máquinas y un tipo de máquina compatible.
Haga clic en Configuraciones avanzadas para expandir la sección.
En relación vCPU a núcleo , elija la cantidad de subprocesos por núcleo.
Termine de configurar otras configuraciones para la VM y haga clic en Crear .
nube de gcloud
Para cambiar la cantidad de subprocesos por núcleo durante la creación de VM, use el comando gcloud compute instances create
.
Antes de utilizar cualquiera de los datos de comando siguientes, realice los siguientes reemplazos:
- VM_NAME : el nombre de la nueva VM.
- ZONE : la zona para la nueva VM.
- MACHINE_TYPE : el tipo de máquina para la nueva VM. Debe ser un tipo de máquina con 2 o más vCPU.
- THREADS_PER_CORE : el número de subprocesos por núcleo físico. Establezca en
2
o1
.
Ejecute 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ía 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
DESCANSAR
Para cambiar la cantidad de subprocesos por núcleo durante la creación de VM, use el método instances.insert
con el campo threadsPerCore
.
Antes de utilizar cualquiera de los datos de la solicitud, realice los siguientes reemplazos:
- PROJECT_ID : el ID del proyecto.
- ZONE : la zona para la nueva VM.
- MACHINE_TYPE : el tipo de máquina para la nueva VM. Debe ser un tipo de máquina con 2 o más vCPU.
- VM_NAME : el nombre de la nueva VM.
- THREADS_PER_CORE : el número de subprocesos por núcleo físico. Establezca en
2
o1
.
Método HTTP y URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
Solicitar cuerpo JSON:
{ "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 su solicitud, expanda una de estas opciones:
Debería 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 la cantidad de subprocesos por núcleo en una VM
Para cambiar la cantidad de subprocesos por núcleo en una VM, use la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.
Permisos necesarios para esta tarea
Para realizar esta tarea, debe tener los siguientes permisos :
-
compute.instances.get
en el proyecto -
compute.instances.update
en el proyecto
Consola
Para cambiar la cantidad de subprocesos por núcleo en una VM existente, utilice el siguiente procedimiento de la consola de Google Cloud:
En la consola de Google Cloud, vaya a la página de instancias de VM .
Haga clic en el nombre de la máquina virtual.
Si el estado de la máquina virtual es En ejecución , haga clic en Detener .
Haga clic en Editar .
Haga clic en Configuraciones avanzadas para expandir la sección.
En la lista desplegable de vCPU a relación de núcleos , elija la cantidad de subprocesos por núcleo.
Haga clic en Guardar .
nube de gcloud
Para cambiar la cantidad de subprocesos por núcleo en una máquina virtual existente, haga lo siguiente:
Exporte las propiedades de la máquina virtual mediante el siguiente comando
gcloud compute instances export
:gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
Reemplace lo siguiente:
VM_NAME
: el nombre de la VM desde la cual exportar 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 VM que se guardó en FILE_PATH , actualice el valor de
threadsPerCore
. Si el valor no está en el archivo, agregue lo siguiente:advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
Actualice la máquina virtual 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
Reemplace lo siguiente:
VM_NAME
: el nombre de la VM a actualizarFILE_PATH
: la ruta al archivo de configuración de VM actualizadoZONE
: la zona que contiene la VM a actualizar
DESCANSAR
Para cambiar la cantidad de subprocesos por núcleo en una máquina virtual existente, use 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" }, ... }
Reemplace lo siguiente:
PROJECT_ID
: el ID del proyectoZONE
: la zona que contiene la VMVM_NAME
: el nombre de la VM desde la cual exportar propiedadesTHREADS_PER_CORE
: el número de subprocesos por núcleo
Ver el número de subprocesos por núcleo
Para ver la cantidad de subprocesos por núcleo, utilice el procedimiento que corresponda al sistema operativo que se ejecuta en la VM.
linux
Para ver la cantidad de subprocesos por núcleo en máquinas virtuales basadas en Linux, utilice el siguiente procedimiento:
Ejecute el comando
lscpu
.lscpu
Revise el resultado para ver la cantidad 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 ...
ventanas
Para ver la cantidad de subprocesos por núcleo en máquinas virtuales basadas en Windows, utilice el siguiente procedimiento:
Inicie Powershell.
Ejecute el siguiente comando.
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Revise el resultado para ver la cantidad 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
¿Qué sigue?
- Obtén información sobre los sistemas operativos que puedes ejecutar en las máquinas virtuales de Compute Engine .