Crea instancias de Compute Engine de ULL

En esta página, se describe cómo crear instancias de Compute Engine con latencia ultrabaja (ULL) usando los tipos de máquinas U4P o U4C de la familia de máquinas U4.

Para obtener una descripción general del proceso de configuración de la infraestructura de la solución de ULL, consulta Descripción general de la configuración de la solución de ULL.

Antes de comenzar

Antes de crear instancias de procesamiento de ULL, consulta las siguientes secciones.

Crea redes de VPC

Si aún no lo hiciste, crea redes de VPC para cada una de las interfaces de red de tu instancia, como se describe en Descripción general de la configuración de la solución de ULL.

Crear una política de posición

De manera opcional, puedes aplicar una política de posición distribuida a tu instancia de ULL para aumentar la resiliencia. Para obtener más información, consulta Crea y aplica políticas de posición de distribución en la documentación de Compute Engine.

Configura tu proyecto

Configura gcloud CLI para usar tu proyecto. Como alternativa, puedes incluir la marca --project=PROJECT_ID para cada comando en los siguientes procedimientos.

gcloud config set project PROJECT_ID

Reemplaza PROJECT_ID por el ID de tu proyecto.

Habilita las APIs

Si aún no lo hiciste, habilita las siguientes APIs.

Console

Habilita la API de Compute Engine si aún no está habilitada.

Roles necesarios para habilitar las APIs

Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

Habilitar la API

gcloud

Habilita la API de Compute Engine si aún no está habilitada:

Roles necesarios para habilitar las APIs

Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

gcloud services enable compute.googleapis.com

Roles obligatorios

Para obtener los permisos que necesitas para crear instancias de Compute Engine, pídele a tu administrador que te otorgue los siguientes roles de IAM:

  • Para crear y administrar instancias de procesamiento, usa el rol de administrador de instancias de Compute (compute.instanceAdmin) en tu proyecto.

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Descripción general de la configuración de la instancia de ULL

Para crear una instancia de procesamiento de ULL y configurarla para enviar o recibir tráfico de ULL de unidifusión y multidifusión, haz lo siguiente:

Paso Descripción
Crea una instancia de ULL Crea una instancia con un tipo de máquina U4P o U4C y conecta sus interfaces de red a una red de VPC de uso general y a una red de VPC de ULL. Si planeas usar la instancia como consumidor de transmisión por IP multidifusión, establece la marca igmp-query en IGMP_QUERY_V2.
Configura el enrutamiento para las interfaces que no son de nic0 para el tráfico de unidifusión de ULL Configura el enrutamiento basado en la fuente en el SO invitado para garantizar que los paquetes de salida salgan por la interfaz correcta y evitar el enrutamiento asimétrico.
Configura una instancia para que sea un consumidor de multicast de ULL Completa cada uno de los siguientes pasos para recibir tráfico de multidifusión en las interfaces de red de ULL:
Para optimizar aún más el rendimiento, te recomendamos que también sigas los procedimientos que se indican en Trabaja con Onload o Trabaja con DPDK.

Además, puedes usar los comandos de ejemplo de esta página para probar la conectividad de multidifusión.

Crea una instancia de ULL

En esta sección, se describe cómo crear una instancia nueva para usarla con la transmisión por unidifusión y multidifusión de ULL.

Para obtener información general sobre cómo crear instancias de procesamiento, incluidas opciones de configuración adicionales, consulta Crea y, luego, inicia una instancia de Compute Engine.

gcloud

Para crear una instancia de ULL, usa el comando compute instances create.

El tipo de interfaz de red compatible con las instancias de ULL es GVNIC. Debes incluir el campo queue-count y especificar un valor de 32 para la compatibilidad con XDP.

Para las interfaces de red que se conectan a una red de VPC de ULL, se debe especificar no-address.

Además, el siguiente comando incluye la marca igmp-query para habilitar la instancia como consumidor de transmisión multidifusión. Esta marca no es obligatoria si la instancia es solo un productor de transmisión simultánea o si la instancia solo envía y recibe transmisiones de unidifusión.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

Reemplaza los siguientes valores:

  • ZONE: Es la zona en la que se creará la instancia.
  • INSTANCE_NAME: Un nombre para la instancia
  • MACHINE_TYPE: Es el tipo de máquina U4P o U4C de la instancia.
  • IMAGE_PROJECT: Es el proyecto de imagen, como rhel-cloud. Consulta Compatibilidad del sistema operativo con los tipos de máquinas U4.
  • IMAGE_FAMILY: Es la familia de imágenes, como rhel-10-2-eus-oot-gve. Consulta Compatibilidad del sistema operativo con los tipos de máquinas U4.

    Si especificas una familia de imágenes, se creará la instancia a partir de la versión no obsoleta más reciente de la imagen de SO en la familia de imágenes. Como alternativa, puedes usar la marca --image y especificar una versión de la imagen.

  • GENERAL_PURPOSE_VPC_NETWORK, GENERAL_PURPOSE_SUBNET: La red de VPC y la subred a las que se conectará la interfaz nic0 de la instancia

  • ULL_VPC_NETWORK: la red de VPC de ULL a la que se adjuntarán las interfaces que no son de nic0

    • ULL_SUBNET_1: La subred en la red de VPC de ULL a la que se adjuntará la interfaz de nic1

    • ULL_SUBNET_2: La subred en la red de VPC de ULL a la que se adjuntará la interfaz de nic2

Configura el enrutamiento para las interfaces que no son de nic0 para el tráfico de unidifusión de ULL

De forma predeterminada, una instancia usa la ruta predeterminada asociada a su interfaz nic0 para enviar tráfico a cualquier destino fuera de su subred conectada de forma directa. Para obtener más información, consulta la descripción general de las interfaces de red múltiples.

Para que las interfaces nic1 y nic2 de tu instancia envíen y reciban correctamente tráfico de unidifusión de ULL, debes configurar el enrutamiento basado en políticas de origen en el SO invitado. Esta configuración garantiza que los paquetes salientes salgan por la interfaz correcta y evita el enrutamiento asimétrico, en el que el tráfico ingresa por una interfaz, pero intenta salir por nic0.

Para ver un ejemplo de cómo configurar el enrutamiento de políticas, consulta Configura el enrutamiento de políticas en el instructivo Configura el enrutamiento para una interfaz de red adicional.

Configura una instancia para que sea un consumidor de multicast de ULL

En esta sección, se describe cómo configurar una instancia de ULL existente para que sea un consumidor de transmisión multidifusión.

Habilita la consulta de IGMP en una instancia de ULL existente

Si no habilitaste IGMP cuando creaste tu instancia, puedes habilitarlo en tu instancia existente como se describe en esta sección.

gcloud

Para habilitar la consulta de IGMP en una instancia de ULL existente, usa el comando compute instances network-interfaces update.

Repite el siguiente comando para cada interfaz de red que quieras que reciba tráfico de multidifusión.

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

Reemplaza los siguientes valores:

  • INSTANCE_NAME: Es el nombre de la instancia.
  • ZONE: Es la zona de la instancia.
  • NETWORK_INTERFACE_NAME: Es el nombre de la interfaz de red en la que se habilitará la consulta de IGMP. En Google Cloud, el formato es nicNUMBER, como nic0, nic1 o nic2.

Configura IGMPv2 en el SO invitado

Para configurar IGMPv2 en el SO invitado de tu instancia, haz lo siguiente:

  1. Conéctate a la instancia a través de SSH.

  2. Ejecuta el siguiente comando y, luego, identifica los nombres de los dispositivos de las interfaces de red que deseas que reciban tráfico de multidifusión.

    sudo ifconfig
    
  3. Para cada interfaz de red aplicable, ejecuta el siguiente comando para forzar IGMPv2.

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    Reemplaza NETWORK_INTERFACE_DEVICE_NAME por el nombre del dispositivo de la interfaz de red, como eth0, eth1 o eth2.

Configura el filtrado de ruta de acceso inversa (rp_filter)

En algunos casos, como con las instancias de varias NIC, la validación estricta de la fuente por el filtrado de ruta inversa (rp-filter) puede provocar que se descarten paquetes de multicast legítimos. Para evitar que esto suceda, puedes configurar el filtro de ruta inversa para relajar o inhabilitar la validación de origen en las interfaces de red que no son de nic0 y que reciben tráfico de multidifusión. Por ejemplo, los siguientes comandos configuran el filtrado de ruta de acceso inversa para inhabilitar la validación de origen en eth1 y eth2 estableciendo rp_filter en 0.

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

Para obtener más información sobre rp_filter, consulta IP Sysctl en la documentación del kernel de Linux.

Aumenta el tamaño del búfer de anillo del controlador de red

En esta sección, se describe cómo aumentar el tamaño del búfer de anillo del controlador de red en tu instancia.

Para los consumidores de multicast que reciben niveles altos de tráfico, aumenta el tamaño del búfer de anillo del controlador de red a un valor de 2048 para evitar la pérdida de paquetes. Haz esto para cada interfaz de red que reciba tráfico de multidifusión.

Consulta los siguientes comandos de ejemplo, que configuran nic1 y nic2:

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

Comandos de ejemplo para probar la conectividad de multicast de ULL

En esta sección, se proporcionan comandos de ejemplo para probar el tráfico de multidifusión sin iniciar una carga de trabajo de la aplicación con la herramienta iperf. Los pasos de esta sección requieren que se complete la configuración de transmisión multidifusión que se describe en la Descripción general de la configuración de la solución de ULL.

Envía tráfico de multidifusión de ULL desde un productor de multidifusión

  1. Conéctate a la instancia a través de SSH.

  2. Si aún no lo hiciste, instala iperf. iperf3 no admite la transmisión multidifusión. El siguiente comando usa iperf, que instala iperf2.

    sudo yum install iperf
    
  3. Para enviar tráfico de multidifusión a la dirección IP del grupo de multidifusión, ejecuta el siguiente comando:

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    Reemplaza los siguientes valores:

    • MULTICAST_GROUP_ADDRESS: La dirección IP del grupo de multidifusión
    • NIC el nombre del dispositivo de la interfaz de red, como eth1 o eth2
    • NIC_IP_ADDRESS la dirección IP que se asigna a la NIC que especificaste

Unirse a un grupo y recibir tráfico de multicast de ULL de un consumidor de multicast

  1. Conéctate a la instancia a través de SSH.

  2. Si aún no lo hiciste, instala iperf.

    sudo yum install iperf
    
  3. Para unirte a un grupo de multidifusión y registrar el tráfico que recibes, ejecuta el siguiente comando:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    Reemplaza los siguientes valores:

    • MULTICAST_GROUP_ADDRESS la dirección IP del grupo de multidifusión
    • NIC el nombre del dispositivo de la interfaz de red, como eth1 o eth2

    Por ejemplo, el siguiente comando une un grupo con la dirección IP 224.1.0.176 para recibir paquetes de hasta 512 bytes y registra el tráfico recibido:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

En las interfaces de red de ULL de tu instancia, ethtool muestra el estado real del vínculo del puerto físico (up/down) y las velocidades del vínculo físico.

Para verificar el estado y la velocidad de la conexión física de una interfaz de red ULL, ejecuta el siguiente comando:

sudo ethtool NIC

Reemplaza NIC por el nombre de la interfaz de red asignada por el SO invitado, como ens8f0 o ens48f0.

¿Qué sigue?

  • Para obtener información general sobre la solución de problemas de rendimiento de la red en instancias de metal desnudo, consulta Solución de problemas de rendimiento de la red en la documentación de Compute Engine. Por ejemplo, puedes inhabilitar los estados de suspensión de la CPU para lograr un rendimiento de ancho de banda de red completo.
  • Para configurar Onload o DPDK para optimizar el rendimiento, consulta Trabaja con Onload y Trabaja con DPDK.
  • Para sincronizar el reloj del sistema de tu instancia con el reloj de la NIC física de su servidor host, consulta Configura la hora exacta.