Configurar multiprocesos simultáneos


Cuando sea posible, Compute Engine habilita multiprocesamiento simultáneo (SMT) de forma predeterminada. Con el SMT habilitado, un solo núcleo de CPU físico puede ejecutar 2 CPU virtuales, cada una como subprocesos independientes. Puedes inhabilitar el SMT si reduces la cantidad de subprocesos (la cantidad de CPU virtuales efectivas) por núcleo a 1. En este documento, se describe por qué podrías cambiar la cantidad de subprocesos que se ejecutan en cada núcleo de CPU físico y cómo hacerlo.

Consideraciones para configurar el SMT

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. Inhabilitar la SMT reduce la cantidad de CPU virtuales para cada núcleo de 2 a 1, lo que podría reducir los costos de licencia. Para obtener más información, consulta tu contrato de licencia.

Limitaciones

La cantidad de subprocesos por núcleo no se puede configurar en las siguientes VM:

Precios

Se te factura por la cantidad de CPU virtuales definidas 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 decides ejecutar solo 1 subproceso por núcleo, es decir, 4 CPU virtuales, de todos modos se te facturarán 8 CPU virtuales. Para obtener más información sobre cómo se facturan las VM, consulta Precios de instancias de VM.

Configura el SMT en una VM nueva

Configura el SMT en una VM nueva mediante el siguiente procedimiento.

Permisos necesarios para esta tarea

Para realizar esta tarea, debes tener los siguientes permisos:

gcloud

Inhabilita el SMT mientras creas una VM con el siguiente comando gcloud beta compute instances create.

gcloud beta compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

Reemplaza lo siguiente:

  • 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. Los procesadores actuales admiten 2 subprocesos por núcleo para SMT, que está habilitado de forma predeterminada. Para inhabilitar el SMT, configúralo como 1.

API

Configura el SMT mientras creas una VM mediante el método instances.insert con el campo threadsPerCore.

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

{
  ...
  "advancedMachineFeatures": {
    ...
    "threadsPerCore": "THREADS_PER_CORE"
  },
  ...
}

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto.

  • ZONE: Es la zona para la VM nueva.

  • THREADS_PER_CORE: Es la cantidad de subprocesos visibles por núcleo físico. Los procesadores actuales admiten 2 subprocesos por núcleo para SMT, que está habilitado de forma predeterminada. Para inhabilitar el SMT, configúralo como 1.

Configura el SMT en una VM existente

Configura el SMT en una VM existente mediante el siguiente procedimiento.

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

gcloud

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

    gcloud beta 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 propiedades

    • YAML_FILE_PATH: La ruta de acceso y el nombre de un archivo .yaml en el que se guardarán los datos de configuración exportados

    • ZONE: La zona que contiene la VM

  2. 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
    
  3. Actualiza la VM con el nuevo recuento de subprocesos por núcleo mediante el siguiente comando gcloud beta compute instances update-from-file:

    gcloud beta 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 actualizada

    • ZONE: la zona que contiene la VM que se actualizará

API

Actualiza los subprocesos por núcleo de la VM mediante el siguiente método instances.update:

PUT https://compute.googleapis.com/compute/beta/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 proyecto

  • ZONE: La zona que contiene la VM

  • VM_NAME: El nombre de la VM desde la que se exportarán las propiedades

  • THREADS_PER_CORE: La cantidad de subprocesos por núcleo

Verifica la configuración del SMT

Verifica la configuración del SMT mediante el procedimiento que corresponde al SO que se ejecuta en la VM.

Linux

Verifica la configuración del SMT en las VM basadas en Linux mediante el siguiente procedimiento:

  1. Conéctate a la VM de Linux.

  2. Ejecuta el comando lscpu.

    lscpu
    
  3. En el resultado, verifica el valor de la cantidad de subprocesos por núcleo.

    En el siguiente resultado de muestra, el valor de la cantidad de subprocesos por núcleo es 1.

    ...
    CPU(s):              1
    On-line CPU(s) list: 0
    Thread(s) per core:  1
    Core(s) per socket:  1
    Socket(s):           1
    NUMA node(s):        1
    Vendor ID:           GenuineIntel
    CPU family:          6
    Model:               85
    Model name:          Intel(R) Xeon(R) CPU
    ...
    

Windows

Verifica la configuración del SMT en las VM basadas en Windows mediante el siguiente procedimiento:

  1. Conéctate a la VM de Windows.

  2. Abre la interfaz de línea de comandos para Instrumental de administración de Windows (WMI).

    wmic
    
  3. Ejecuta el siguiente comando para ver la cantidad de núcleos y de procesadores lógicos:

    CPU Get NumberOfCores,NumberofLogicalProcessors
    
  4. En el resultado, verifica el valor de la cantidad de subprocesos por núcleo.

    En el siguiente resultado de muestra, el valor de la cantidad de subprocesos por núcleo es 1.

    NumberOfCores  NumberOfLogicalProcessors
    1              1
    

¿Qué sigue?