Exceso de compromiso de CPU en VM de usuario único


El exceso de compromiso de CPU en nodos de usuario único te permite programar instancias que puedan compartir sus ciclos de CPU libres entre sí. Esto te permite aprovisionar en exceso recursos de nodo de usuario único y programar más CPU de VM en un nodo de usuario único de lo que suele estar disponibles. El exceso de compromiso de CPU es valioso, en especial, para cargas de trabajo que no se usan lo suficiente, pero pueden experimentar aumentos de actividad que no estén relacionados del todo.

El exceso de compromiso de CPU puede ayudarte a reducir los costos por VM, ya que distribuye el costo de un nodo de usuario único en más VM. También puede reducir los costos de licencias por VM cuando se usan licencias por socket o por núcleo.

Las VM con CPU con exceso de compromiso pueden usar recursos de CPU que no se usan de las siguientes maneras:

  • Si un nodo de usuario único no está lleno, las VM con exceso de compromiso pueden utilizar núcleos no asignados.

  • Si otra VM en un nodo de usuario único no usa todos sus recursos de CPU, por ejemplo, porque la CPU está inactiva, una VM con exceso de compromiso puede usar esos recursos de CPU.

Nivel de exceso de compromiso

Puedes especificar el valor para la cantidad mínima de CPU que se asignan a una VM cuando creas una VM o después de detener una VM. El nivel de exceso de compromiso representa la cantidad mínima de subprocesos de CPU subyacentes que se garantiza que estarán disponibles para una VM. Si la VM tiene más CPU virtuales que subprocesos subyacentes disponibles, las CPU virtuales de la VM comparten los recursos de procesamiento subyacentes y se ejecutan con un rendimiento degradado.

Puedes configurar este valor para cada VM, lo que te permite aprovisionar VM con diferentes proporciones de exceso de compromiso de CPU en un solo nodo de usuario único. Los valores más bajos reducen los requisitos de capacidad a costa del rendimiento potencial si se producen aumentos de actividad correlacionados. Determinar un valor óptimo para la cantidad mínima de CPU requiere comprender el uso de la carga de trabajo y la modificación iterativa del valor.

Cuando establezcas este valor, ten en cuenta lo siguiente:

  • Si no estableces el valor para la cantidad mínima de CPU o si estableces el valor para la cantidad mínima de CPU igual a la cantidad de CPU en el tipo de máquina de la VM, la proporción de exceso de compromiso permitida de la VM será 1.0. Con una proporción de exceso de compromiso de 1.0, todas las CPU son accesibles solo para esta VM, y no hay recursos de CPU disponibles que puedan ser de exceso de compromiso para otras VM.

  • La cantidad mínima de CPU no puede ser mayor que la cantidad de CPU que especifica el tipo de máquina de la VM.

  • La suma de los valores de la cantidad mínima de CPU para todas las VM en un nodo de usuario único no puede exceder la capacidad de CPU de ese tipo de nodo de usuario único, que en el tipo de nodo n1-node-96-624 es 96.

El valor de la cantidad de CPU que especifica el tipo de máquina de la VM es un valor estático y representa la cantidad de CPU que una VM puede alcanzar en un aumento de actividad a partir de una cantidad mínima si esas CPU están disponibles. Si necesitas una cantidad de CPU diferente de la que proporcionan los tipos de máquinas fijos, puedes usar un tipo personalizado de máquina.

Consideraciones

Antes de configurar los niveles de exceso de compromiso de la CPU para las VM, considera la importancia de tu carga de trabajo. Las cargas de trabajo menos críticas, como las de desarrollo y de prueba, pueden tolerar niveles de exceso de compromiso más altos. Es posible que las cargas de trabajo más críticas, como un sistema de pagos de producción, no toleren tanto exceso de compromiso o ninguno.

También considera el uso de tu carga de trabajo. Las cargas de trabajo con alto uso de CPU no son buenas opciones para el exceso de compromiso de CPU porque no cuentan con ciclos de uso libres con el fin de que otras VM con exceso de compromiso las utilicen. Además, las cargas de trabajo con un uso de CPU de promedio bajo, pero con un uso máximo bajo, podrían beneficiarse de tipos de máquinas de diferentes tamaños.

El uso de exceso de compromiso de CPU beneficia las cargas de trabajo con picos sin correlación que tienen un uso máximo alto y un uso de promedio bajo porque es más probable que estas tengan recursos de CPU disponibles para compartir entre VM cuando algunas VM necesiten aumentar la actividad de su uso. Si todas las VM de un host aumentan su actividad a la vez, el host no tendrá recursos suficientes para las VM.

Limitaciones

Limitaciones de las cargas de trabajo

El exceso de compromiso de CPU es más adecuado para cargas de trabajo sin requisitos de rendimiento estrictos, por ejemplo, infraestructuras de escritorio virtual y cargas de trabajo de desarrollo y prueba.

Es posible que los niveles altos de exceso de compromiso de CPU no sean adecuados para las cargas de trabajo sensibles al rendimiento.

Para las cargas de trabajo con un uso promedio y máximo que es siempre bajo, Google recomienda el redimensionamiento. Es decir, en lugar de exceder el compromiso de CPU, te recomendamos que modifiques el tamaño de la instancia de VM para que coincida con los requisitos de recursos de esa carga de trabajo.

Si tus instancias tienen demasiado exceso de compromiso, muévelas a otro nodo de usuario único.

Limitaciones del tipo de máquina

Solo puedes exceder el compromiso de CPU en los siguientes casos:

Limitaciones del nivel de exceso de compromiso

Solo puedes configurar la CPU mínima en cada nodo de usuario único para la mitad de las CPU de la VM, lo que permite una proporción máxima de exceso de compromiso de nodo de usuario único de 2.0.

Limitaciones de programación de VM

Los grupos de nodos de usuario único basados en plantillas de nodo que no están configurados para el exceso de compromiso de CPU no permiten el aprovisionamiento de VM que tengan habilitado el exceso de compromiso de CPU. Es decir, no puedes programar una VM con una cantidad mínima especificada de CPU en un grupo de nodos de usuario único que no está configurado para el exceso de compromiso de CPU.

Cuota

La cuota de CPU se basa en la cantidad de CPU virtuales del tipo de nodo de usuario único, no en la cantidad máxima posible de CPU virtuales disponibles para el exceso de compromiso.

Costos

En el caso de los nodos de usuario único que tienen un exceso de compromiso de CPU seleccionado en su plantilla de nodo, se cobra un 25% adicional. Este cargo se suma al recargo del 10% por ejecutar VM en nodos de usuario único. El recargo de exceso de compromiso de CPU es fijo, sin importar el nivel de exceso de compromiso de CPU ni cuántas VM estén programadas en el nodo de usuario único.

Los nodos de usuario único ofrecen descuentos por compromiso de uso. Los descuentos por uso continuo están disponibles para el recargo de usuario único y el recargo de exceso de compromiso de CPU.

Para estimar el costo de ejecutar VM en nodos de usuario único, consulta la calculadora de precios.

Configura VM de usuario único para el exceso de compromiso

A fin de configurar VM de usuario único con el objetivo de que los recursos de CPU estén disponibles para el exceso de compromiso, haz lo siguiente:

  1. Crea una plantilla de nodo de usuario único que tenga habilitado el exceso de compromiso de CPU. Debes habilitar el exceso de compromiso de CPU mientras creas la plantilla de nodo. No puedes habilitar el exceso de compromiso de CPU después de crear una plantilla de nodo.

  2. Crea un grupo de nodos de usuario único basado en la plantilla de nodo de usuario único que tenga habilitado el exceso de compromiso de CPU.

  3. Crea una VM y haz lo siguiente:

    1. Elige un tipo de máquina para la VM. La cantidad de CPU en el tipo de máquina representa la cantidad máxima de CPU que la VM puede alcanzar en un aumento de actividad a partir de la cantidad mínima de CPU si este número es menor que la que especifica el tipo de máquina.

      Puedes elegir un tipo de máquina diferente para cada VM en un nodo de usuario único, siempre que no excedas la capacidad de CPU y memoria del nodo de usuario único.

    2. Especifica la cantidad mínima de CPU para asignar a esa VM única o usa un grupo de instancias administrado a fin de crear varias VM que tengan el mismo nivel de exceso de compromiso de CPU.

Antes de comenzar

  • Crea una plantilla de nodo de usuario único y especifica --cpu-overcommit-type=enabled.
  • Crea un grupo de nodos de usuario único basado en la plantilla de nodos de usuario único que tenga habilitado el exceso de compromiso de CPU.
  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Configura el nivel de exceso de compromiso de CPU

En los siguientes procedimientos, se muestra cómo crear una VM de usuario único con recursos de CPU disponibles para el exceso de compromiso. Si necesitas modificar el nivel de exceso de compromiso de CPU de una VM que se está ejecutando, primero debes detener la VM.

Console

En la consola de Google Cloud, crea una VM de usuario único en un grupo de nodos de usuario único creado a partir de una plantilla de nodo de usuario único que tenga habilitado el exceso de compromiso de CPU:

  1. Ve a la página Nodos de usuario único.

    Ir a Nodos de usuario único

  2. Haz clic en Grupos de nodos.

  3. Haz clic en el grupo de nodos de usuario único en el que deseas crear una VM.

  4. Haz clic en Crear instancia.

  5. Especifica el Nombre, la Región y la Zona para la VM.

  6. En Configuración de la máquina, elige un Tipo de máquina fijo o personalizado con al menos 4 CPU virtuales.

  7. En Exceso de compromiso de CPU, selecciona Habilitar el exceso de compromiso de CPU.

  8. En Cantidad mínima de CPU virtuales asignadas, ajusta el control deslizante o ingresa de forma manual la cantidad de CPU virtuales para especificar el nivel de exceso de compromiso de las CPU en esta VM.

  9. Haz clic en Crear a fin de crear una instancia de VM que tenga recursos de CPU disponibles para el exceso de compromiso.

gcloud

En el siguiente ejemplo, se muestra cómo usar el comando gcloud compute instances create a fin de crear una VM de usuario único en un tipo de máquina fijo con recursos de CPU disponibles para el exceso de compromiso.

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --min-node-cpu=MIN_VCPUS \
    --node-group=GROUP_NAME

Reemplaza lo siguiente:

  • VM_NAME: es el nombre de la VM que tendrá un exceso de compromiso de CPU.

  • MACHINE_TYPE: es el tipo de máquina en el que se aprovisionará la VM de usuario único. La cantidad de CPU que especifica el tipo de máquina es la cantidad máxima de CPU que puede alcanzar la VM en un aumento de actividad desde MIN_VCPUS.

  • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

  • GROUP_NAME: es el nombre del grupo de nodos de usuario único en el que aprovisionará la VM.

Configura el nivel de exceso de compromiso en un tipo personalizado de máquina

A fin de crear una VM de usuario único con recursos de CPU disponibles para un exceso de compromiso en un tipo personalizado de máquina, omite la marca --machine-type y, en su lugar, usa las marcas --custom-cpu y --custom-memory a fin de especificar la cantidad de CPU y de memoria, en gigabytes, para la máquina personalizada.

REST

En el siguiente ejemplo, se muestra cómo usar el comando instances.insert a fin de crear una VM de usuario único en un tipo de máquina fijo con recursos de CPU disponibles para el exceso de compromiso.

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

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "scheduling": {
    "minNodeCpus": MIN_VCPUS,
    "nodeAffinities": [
      {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
          "GROUP_NAME"
        ]
      }
    ]
  },
  ...
}

Reemplaza lo siguiente:

  • PROJECT_ID: es el ID de tu proyecto.

  • ZONE: es la zona para esta solicitud.

  • MACHINE_TYPE_ZONE: es la zona que aloja el tipo de máquina.

  • MACHINE_TYPE: es el tipo de máquina en el que se aprovisionará la VM de usuario único. La cantidad de CPU que especifica el tipo de máquina es la cantidad máxima de CPU que puede alcanzar la VM en un aumento de actividad desde MIN_VCPUS.

  • VM_NAME: es el nombre de la VM de usuario único en la que habrá un exceso de compromiso de CPU.

  • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

  • GROUP_NAME: es el nombre del grupo de nodos de usuario único en el que aprovisionará la VM.

Configura el nivel de exceso de compromiso en un tipo personalizado de máquina

A fin de crear una VM de usuario único con recursos de CPU disponibles para un exceso de compromiso en un tipo personalizado de máquina, reemplaza el valor del campo machineType por zones/zone/machineTypes/custom-CPUS-MEMORY, CPUS por la cantidad de CPU, y MEMORY con la cantidad de memoria, en megabytes, para el tipo personalizado de máquina.

Actualiza el nivel de exceso de compromiso de CPU

En los siguientes procedimientos, se muestra cómo actualizar el nivel de exceso de compromiso de CPU de una VM de usuario único.

gcloud

  1. Para modificar el nivel de exceso de compromiso de CPU de una VM que se ejecuta, primero debes detener la VM. Para detener una VM, usa el comando gcloud compute instances stop de la siguiente manera:

    gcloud compute instances stop VM_NAME
    

    Reemplaza VM_NAME por el nombre de la instancia que deseas detener.

  2. Para actualizar el nivel de exceso de compromiso de CPU de una VM de usuario único, usa el comando gcloud compute instances set-scheduling de la siguiente manera:

    gcloud compute instances set-scheduling VM_NAME \
      --min-node-cpu=MIN_VCPUS
    

    Reemplaza lo siguiente:

    • VM_NAME: es el nombre de la VM de usuario único que se usa para modificar el nivel de exceso de compromiso de CPU.

    • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

REST

  1. Para modificar el nivel de exceso de compromiso de CPU de una VM que se ejecuta, primero debes detener la VM. Para detener una VM, crea una solicitud POST mediante el método instances.stop de la siguiente manera:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: es el ID de tu proyecto.

    • ZONE: es la zona para esta solicitud.

    • VM_NAME: es el nombre de la VM de usuario único que se usa para modificar el nivel de exceso de compromiso de CPU.

  2. Para actualizar el nivel de exceso de compromiso de CPU de una VM de usuario único, usa el método instances.setScheduling de la siguiente manera:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    {
    "minNodeCpus":MIN_VCPUS
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: es el ID de tu proyecto.

    • ZONE: es la zona para esta solicitud.

    • VM_NAME: es el nombre de la VM de usuario único que se usa para modificar el nivel de exceso de compromiso de CPU.

    • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

Inhabilita el exceso de compromiso de CPU para VM de usuario único

En los siguientes procedimientos, se muestra cómo inhabilitar el exceso de compromiso de CPU de una VM de usuario único.

gcloud

En el siguiente ejemplo, se muestra cómo usar el comando gcloud compute instances set-scheduling para inhabilitar el exceso de compromiso de CPU de una VM de usuario único.

gcloud compute instances set-scheduling VM_NAME \
  --clear-min-node-cpu

Reemplaza lo siguiente:

  • VM_NAME: Es el nombre de la VM de usuario único que inhabilitará el exceso de compromiso de CPU.

REST

En el siguiente ejemplo, se muestra cómo usar el comando instances.setScheduling para inhabilitar el exceso de compromiso de CPU de una VM de usuario único.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
{
  "minNodeCpus":null
}

Reemplaza lo siguiente:

  • PROJECT_ID: es el ID de tu proyecto.

  • ZONE: es la zona para esta solicitud.

  • VM_NAME: Es el nombre de la VM de usuario único que inhabilitará el exceso de compromiso de CPU.

Visualiza el uso de CPU

Para verificar el uso de CPU de las VMs de usuario único en un grupo de nodos de usuario único, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Nodos de usuario único.

    Ir a Nodos de usuario único

  2. Haz clic en Grupos de nodos.

  3. Haz clic en el grupo de nodos de usuario único que contiene el nodo de usuario único que tiene la VM con exceso de compromiso de CPU.

  4. Haz clic en el nodo de usuario único que tiene la VM con exceso de compromiso de CPU.

  5. En el nombre del nodo de usuario único, consulta el Uso de CPU, el Tipo de exceso de compromiso de CPU y la Utilización mínima de CPU.

    • El Uso de CPU muestra la cantidad máxima de CPU para todas las VM en este nodo de usuario único dividida por la cantidad de CPU especificadas por el tipo de nodo de usuario único.

      La cantidad de CPU en el nodo disponible para el exceso de compromiso es el numerador menos el denominador, y el nivel de exceso de compromiso es el cociente del numerador y el denominador

    • La Utilización mínima de CPU muestra la suma de la cantidad mínima de CPU asignadas para todas las VM en un nodo de usuario único dividida por la cantidad de CPU que especifica el tipo de nodo.

Optimiza los niveles de exceso de compromiso de CPU

Para ayudar a optimizar el ajuste de los niveles de exceso de compromiso de CPU, Compute Engine proporciona la métrica Tiempo de espera del programador. La métrica Tiempo de espera del programador indica el tiempo de espera total para todas las CPU virtuales en la VM y te ayuda a determinar el impacto del exceso de compromiso de CPU en el rendimiento de la VM.

La sensibilidad de la carga de trabajo varía, pero una regla general es usar 20 milisegundos de tiempo de espera del programador acumulado por segundo (20 ms/s) como el tiempo de espera máximo para cada CPU virtual. Por ejemplo, si una VM está configurada en 8 CPU virtuales, entonces un umbral de regla general es 160 ms/s, lo que da como resultado un tiempo de espera del programador promedio aceptable de 20 ms/s por CPU virtual. Los requisitos de rendimiento de la carga de trabajo dictarán, en última instancia, umbrales aceptables.

  1. En la consola de Google Cloud, ve a la página Supervisión.

    Ir a Monitoring

  2. Haga clic en Explorador de métricas.

  3. En el campo Tipo de recurso, ingresaInstancia de VM.

  4. En el campo Métrica, ingresa Tiempo de espera del programador.

  5. De manera opcional, haz clic en Alertas si deseas configurar alertas a fin de activarlas para los umbrales de tiempo de espera de VM.

¿Qué sigue?