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.
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:
|
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 instanciaMACHINE_TYPE: Es el tipo de máquina U4P o U4C de la instancia.IMAGE_PROJECT: Es el proyecto de imagen, comorhel-cloud. Consulta Compatibilidad del sistema operativo con los tipos de máquinas U4.IMAGE_FAMILY: Es la familia de imágenes, comorhel-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
--imagey 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 interfaznic0de la instanciaULL_VPC_NETWORK: la red de VPC de ULL a la que se adjuntarán las interfaces que no son denic0ULL_SUBNET_1: La subred en la red de VPC de ULL a la que se adjuntará la interfaz denic1ULL_SUBNET_2: La subred en la red de VPC de ULL a la que se adjuntará la interfaz denic2
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 esnicNUMBER, comonic0,nic1onic2.
Configura IGMPv2 en el SO invitado
Para configurar IGMPv2 en el SO invitado de tu instancia, haz lo siguiente:
Conéctate a la instancia a través de SSH.
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
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_NAMEpor el nombre del dispositivo de la interfaz de red, comoeth0,eth1oeth2.
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
Conéctate a la instancia a través de SSH.
Si aún no lo hiciste, instala
iperf.iperf3no admite la transmisión multidifusión. El siguiente comando usaiperf, que instalaiperf2.sudo yum install iperf
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ónNICel nombre del dispositivo de la interfaz de red, comoeth1oeth2NIC_IP_ADDRESSla 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
Conéctate a la instancia a través de SSH.
Si aún no lo hiciste, instala
iperf.sudo yum install iperf
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_ADDRESSla dirección IP del grupo de multidifusiónNICel nombre del dispositivo de la interfaz de red, comoeth1oeth2
Por ejemplo, el siguiente comando une un grupo con la dirección IP
224.1.0.176para 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
Verifica el estado y la velocidad del vínculo de ULL
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.