En este documento, se describe cómo configurar el rendimiento de las redes de nivel 1 para ciertas instancias de máquina virtual (VM) en Google Distributed Cloud (GDC) aislado. Las VMs con opciones de configuración de red de nivel 1 son especialmente útiles para cargas de trabajo de procesamiento grandes y distribuidas con mucha comunicación entre nodos, como la computación de alto rendimiento (HPC), el aprendizaje automático (AA) y el aprendizaje profundo (DL).
Este documento está dirigido a los desarrolladores de grupos de administradores de plataformas o operadores de aplicaciones que configuran redes para VMs en un entorno de Distributed Cloud. Para obtener más información, consulta Públicos de la documentación de Google Distributed Cloud aislado.
Antes de comenzar
Para usar los comandos de la interfaz de línea de comandos (CLI) de gdcloud, asegúrate de haber descargado, instalado,
y configurado la CLI de gdcloud.
Todos los comandos de Distributed Cloud usan la CLI de gdcloud o kubectl y requieren un entorno de sistema operativo (SO).
Obtén la ruta de acceso del archivo kubeconfig
Para ejecutar comandos en el servidor de la API de Management, asegúrate de tener los siguientes recursos:
Accede y genera el archivo kubeconfig para el servidor de la API de Management si no tienes uno.
Usa la ruta de acceso al archivo kubeconfig del servidor de la API de Management para reemplazar
MANAGEMENT_API_SERVERen estas instrucciones.
Solicita roles de IAM
Comunícate con el administrador de IAM del proyecto para solicitar los siguientes roles en tu proyecto:
Administrador del proyecto de Virtual Machine (
project-vm-admin): Crea, modifica, enumera y borra VMs en el espacio de nombres del proyecto.Visualizador del proyecto(
project-viewer): Visualiza todos los recursos dentro de los espacios de nombres del proyecto.
Todos los roles de VM deben vincularse al espacio de nombres del proyecto en el que reside la VM. Sigue los pasos para verificar tu acceso.
Limitaciones
Las redes de nivel 1 son compatibles con los tipos de máquinas N2, N3, N4, A2 y A3 que tienen al menos 4 CPUs virtuales.
Niveles de ancho de banda
El límite de ancho de banda de entrada y salida representa la cantidad máxima posible de datos por unidad de tiempo, como gigabits por segundo (Gbps), que GDC permite que una instancia de VM transmita o reciba desde sus interfaces de red (NIC). El ancho de banda incluye los datos transferidos entre las instancias de VM y el almacenamiento de objetos.
GDC tiene los siguientes límites de ancho de banda:
- El límite de ancho de banda predeterminado es de 10 Gbps.
- Las redes de nivel 1 aumentan el límite de ancho de banda de salida máximo para las instancias de procesamiento. El límite máximo de ancho de banda de salida varía de 16 Gbps a 25 Gbps, según el tamaño y el tipo de máquina de la instancia.
- El ancho de banda de salida real siempre es menor o igual que el límite de ancho de banda de salida.
Para lograr el ancho de banda de salida más alto posible, se deben cumplir todas las siguientes condiciones:
- Las instancias de procesamiento de envío y recepción deben estar en la misma zona.
- Los paquetes enviados entre las instancias deben usar destinos de dirección IP interna.
- La cantidad de flujos de TCP debe ser entre 4 y 128 flujos.
- Las instancias de envío deben tener habilitada la descarga de segmentación de TCP (TSO), y las instancias de recepción deben tener habilitada la descarga de recepción genérica (GRO).
- El SO invitado en la instancia de envío tiene configurado el anclaje de la dirección de paquetes de transmisión (XPS) y la solicitud de interrupción (IRQ). Para obtener más información, consulta Configura el anclaje del SO invitado.
VMs N2 y N3
| vCPUs | IP interna | IP interna de nivel 1 |
|---|---|---|
| 2 | 10 Gbps | No aplicable |
| 4 | 10 Gbps | No aplicable |
| 8 | 10 Gbps | 16 Gbps |
| 12 | 10 Gbps | 25 Gbps |
| 16 | 10 Gbps | 25 Gbps |
| 32 | 10 Gbps | 25 Gbps |
| 64 | 10 Gbps | 25 Gbps |
VMs N4
| vCPUs | IP interna | IP interna de nivel 1 |
|---|---|---|
| 4 | 10 Gbps | No aplicable |
| 8 | 10 Gbps | No aplicable |
| 16 | 10 Gbps | 25 Gbps |
| 32 | 10 Gbps | 25 Gbps |
| 48 | 10 Gbps | 25 Gbps |
| 64 | 10 Gbps | 25 Gbps |
| 80 | 10 Gbps | 25 Gbps |
| 160 | 10 Gbps | 25 Gbps |
VMs A2
| vCPUs | IP interna | IP interna de nivel 1 |
|---|---|---|
| 12 | 10 Gbps | 18 Gbps |
| 24 | 10 Gbps | 25 Gbps |
VMs A3
| vCPUs | IP interna | IP interna de nivel 1 |
|---|---|---|
| 28 | 10 Gbps | 25 Gbps |
| 56 | 10 Gbps | 25 Gbps |
| 112 | 10 Gbps | 25 Gbps |
Configura una VM con redes de nivel 1
Crea instancias y contenedores que usan redes de nivel 1:
gdcloud
gdcloud compute instances create VM_NAME \
--machine-type=MACHINE_TYPE \
--image=BOOT_DISK_IMAGE_NAME --image-project=vm-system \
--boot-disk-size=BOOT_DISK_SIZE \
--network-performance-tier=tier_1
Reemplaza lo siguiente:
| Variable | Definición |
|---|---|
VM_NAME |
El nombre de la VM nueva. El nombre solo debe contener caracteres alfanuméricos y guiones, y no debe tener más de 53 caracteres. |
MACHINE_TYPE |
El tipo predefinido de máquina para la VM nueva. Selecciona un tipo de máquina disponible:
gdcloud compute machine-types list
|
BOOT_DISK_IMAGE_NAME |
El nombre de la imagen que se usará para el disco de arranque de la VM nueva. |
BOOT_DISK_SIZE |
El tamaño del disco de arranque, como 20GB.Este valor siempre debe ser mayor o igual que el minimumDiskSize de la imagen del disco de arranque. |
API
kubectl --kubeconfig MANAGEMENT_API_SERVER \
apply -n PROJECT -f - <<EOF
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachineDisk
metadata:
name: VM_BOOT_DISK_NAME
spec:
source:
image:
name: BOOT_DISK_IMAGE_NAME
namespace: vm-system
size: BOOT_DISK_SIZE
---
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
name: VM_NAME
spec:
compute:
virtualMachineType: MACHINE_TYPE
disks:
- virtualMachineDiskRef:
name: VM_BOOT_DISK_NAME
boot: true
autoDelete: BOOT_DISK_AUTO_DELETE
network:
networkPerformanceTier: Tier_1
EOF
Reemplaza lo siguiente:
| Variable | Definición |
|---|---|
MANAGEMENT_API_SERVER |
El archivo kubeconfig del servidor de la API de Management. |
PROJECT |
El proyecto de Distributed Cloud para crear la VM. |
VM_BOOT_DISK_NAME |
El nombre del disco de arranque de la VM nueva. |
BOOT_DISK_IMAGE_NAME |
El nombre de la imagen que se usará para el disco de arranque de la VM nueva. |
BOOT_DISK_SIZE |
El tamaño del disco de arranque, como 20Gi.Este valor siempre debe ser mayor o igual que el minimumDiskSize de la imagen del disco de arranque. |
VM_NAME |
El nombre de la VM nueva. El nombre solo debe contener caracteres alfanuméricos y guiones, y no debe tener más de 53 caracteres. |
MACHINE_TYPE |
El tipo predefinido de máquina para la VM nueva. Selecciona un tipo de máquina disponible:
kubectl --kubeconfig MANAGEMENT_API_SERVER
get virtualmachineimage.virtualmachine.gdc.goog --namespace PROJECT
|
BOOT_DISK_AUTO_DELETE |
true o false, lo que indica si el disco de arranque se borra automáticamente cuando se borra la instancia de VM. |
Configura el anclaje del SO invitado para un rendimiento coherente
Para evitar las caídas de capacidad de procesamiento de la red y mantener un ancho de banda de red coherente en las VMs invitadas que usan redes de nivel 1, configura el anclaje de la dirección de paquetes de transmisión (XPS) y la solicitud de interrupción (IRQ) en el sistema operativo invitado.
Sin estas configuraciones, el programador del SO invitado podría consolidar todas las colas de transmisión y las interrupciones de red en un solo núcleo de CPU con una carga de red pesada, lo que limitaría el rendimiento.
Antes de configurar el anclaje de XPS y IRQ, busca la cantidad de CPUs virtuales (vCPUs) asignadas a tu VM ejecutando el siguiente comando en la VM invitada:
nproc
Usa este número para reemplazar NUM_VCPUS en las siguientes configuraciones.
Configura el anclaje de XPS
Distribuye las colas de transmisión (TX) en las CPUs virtuales (vCPUs) asignadas a la VM. Una distribución uniforme mejora la localidad de la caché y equilibra el procesamiento.
Para configurar el anclaje de XPS en la VM invitada, ejecuta la siguiente secuencia de comandos:
NUM_VCPUS=NUM_VCPUS
for i in $(seq 0 $((NUM_VCPUS - 1))); do
cpu=$(( i % (NUM_VCPUS / 4) ))
mask=$(printf "%x" $((1 << cpu)))
echo "Queue tx-$i -> CPU $cpu (mask $mask)"
echo $mask > /sys/class/net/enp1s0/queues/tx-$i/xps_cpus
done
Configura el anclaje de IRQ
Vincula las interrupciones de la interfaz de red directamente a los núcleos de CPU específicos responsables de procesar esas colas. Esta alineación minimiza las interrupciones entre procesadores (IPI) y las invalidaciones de caché.
Para configurar el anclaje de IRQ en la VM invitada, ejecuta la siguiente secuencia de comandos:
NUM_VCPUS=NUM_VCPUS
irqs=$(grep "virtio0-" /proc/interrupts | awk -F: '{print $1}' | tr -d ' ')
idx=0
for irq in $irqs; do
cpu=$(( idx % (NUM_VCPUS / 4) ))
mask=$(printf "%x" $((1 << cpu)))
echo "Mapping IRQ $irq to CPU $cpu (mask $mask)"
echo $mask > /proc/irq/$irq/smp_affinity
idx=$(( idx + 1 ))
done