Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las máquinas virtuales (VM) de Azure tienen una configuración de red predeterminada que se puede optimizar para mejorar aún más el rendimiento de la red. En este artículo se describe cómo optimizar el rendimiento de red para máquinas virtuales Windows y Linux, incluidas las principales distribuciones, como Ubuntu y Red Hat.
Máquinas virtuales Windows
Si la máquina virtual Windows admite red acelerada, habilite esa característica para lograr un rendimiento óptimo. Para más información, consulte Creación de una máquina virtual Windows con redes aceleradas.
En el caso de otras máquinas virtuales Windows, el uso de escalado en el lado de la recepción (RSS) pueden logar un rendimiento máximo mayor que las que no lo usan. En las máquinas virtuales Windows, RSS se puede deshabilitar de forma predeterminada. Para comprobar si RSS está habilitado y habilitarlo, siga estos pasos:
Compruebe si RSS está habilitado para un adaptador de red con el comando Get-NetAdapterRss de PowerShell. En el ejemplo siguiente, la salida devuelta desde el
Get-NetAdapterRssRSS no está habilitada.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : FalsePara habilitar RSS escriba el siguiente comando:
Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}Este comando no tiene ninguna salida. El comando cambia la configuración de la tarjeta de interfaz de red (NIC). Provoca una pérdida temporal de conectividad durante aproximadamente un minuto. Durante la pérdida de conectividad, aparece un cuadro de diálogo Reconectando. La conectividad se suele restaurar al tercer intento.
Confirme que RSS está habilitado en la máquina virtual, para lo que debe volver a escribir el comando
Get-NetAdapterRss. Si se realiza correctamente, se devuelve la siguiente salida de ejemplo:Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : True
Máquinas virtuales Linux
RSS siempre está habilitado de forma predeterminada en una máquina virtual Linux en Azure. Los kernels de Linux lanzados desde octubre de 2017 incluyen nuevas opciones de optimización de red que permiten que las máquinas virtuales Linux logren un mayor rendimiento de la red.
Habilitación de redes aceleradas de Azure para un rendimiento óptimo
Azure proporciona redes aceleradas que realmente pueden mejorar el rendimiento de la red, la latencia y la vibración. Actualmente hay dos tecnologías diferentes que se usan en función del tamaño de la máquina virtual, Mellanox , que es ampliamente disponible y MANA desarrollado por Microsoft.
Kernels optimizados de Azure
Algunas distribuciones como Ubuntu (canónica) y SUSE tienen kernels optimizados para Azure.
Use el comando siguiente para asegurarse de que usa el kernel de Azure, que normalmente tiene la azure cadena en la nomenclatura.
uname -r
#sample output on Azure kernel on a Ubuntu Linux VM
6.8.0-1017-azure
Otras distribuciones de Linux
La mayoría de las distribuciones modernas presentan mejoras significativas con los kernels más recientes. Compruebe la versión actual del kernel para asegurarse de que está ejecutando un kernel más reciente que la 4.19, que incluye algunas mejoras importantes en las redes, por ejemplo, compatibilidad con BBR Congestion-Based Control de congestión.
Lograr velocidades de transferencia coherentes en máquinas virtuales Linux en Azure
Las máquinas virtuales Linux suelen experimentar problemas de rendimiento de red, especialmente al transferir archivos grandes (de 1 GB a 50 GB) entre regiones, como Oeste de Europa y Oeste de EE. UU. Estos problemas se deben a las versiones anteriores del kernel, así como a las configuraciones predeterminadas del kernel, la configuración predeterminada del búfer de red y los algoritmos de control de congestión predeterminados, lo que da lugar a paquetes retrasados, rendimiento limitado y uso ineficaz de recursos.
Para obtener un rendimiento de red coherente, considere la posibilidad de implementar las siguientes optimizaciones probadas en muchas situaciones en Azure:
-
Configuración del búfer de red: ajuste los parámetros del kernel para maximizar los búferes de memoria de lectura y escritura. Agregue estas configuraciones a
/etc/sysctl.d/99-azure-network-buffers.conf:
net.ipv4.tcp_mem = 4096 87380 67108864
net.ipv4.udp_mem = 4096 87380 33554432
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_default = 33554432
net.core.wmem_default = 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
net.core.wmem_max = 134217728
net.core.rmem_max = 134217728
net.core.busy_poll = 50
net.core.busy_read = 50
-
Congestion-Based Control de congestión para kernels 4.19 y versiones posteriores: Habilitar el control de congestión BBR (Bottleneck Bandwidth and Round-trip propagation time) a menudo puede resultar en un mejor rendimiento. Agregue esta configuración a
/etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr
-
Parámetros TCP adicionales que normalmente ayudarán con una mejor coherencia, rendimiento: agregue estas configuraciones a
/etc/sysctl.d/99-azure-network-extras.conf:
# For deployments where the Linux VM is BEHIND an Azure Load Balancer, timestamps MUST be set to 0
net.ipv4.tcp_timestamps = 1
# Reuse does require tcp_timestamps to be enabled. If tcp_timestamps are disabled because of load balancers, you should set reuse to 2.
net.ipv4.tcp_tw_reuse = 1
# Allowed local port range. This will increase the number of locally available ports (source ports)
net.ipv4.ip_local_port_range = 1024 65535
# Maximum number of packets taken from all interfaces in one polling cycle (NAPI poll). In one polling cycle interfaces which are # registered to polling are probed in a round-robin manner.
net.core.netdev_budget = 1000
# For high-performance environments, it's recommended to increase from the default 20KB to 65KB, in some extreme cases, for environments that support 100G+ networking, you can
# increase it to 1048576
net.core.optmem_max = 65535
# F-RTO is not recommended on wired networks.
net.ipv4.tcp_frto = 0
# Increase the number of incoming connections / number of connections backlog
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.dev_weight = 64
-
Materia de cola (qdisc):el procesamiento de paquetes en Azure se mejora estableciendo el qdisc predeterminado en
fq. Agregue esta configuración a/etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq
-
Optimizar los búferes de anillo NIC para TX/RX: cree una regla udev en
/etc/udev/rules.d/99-azure-ring-buffer.rulespara asegurarse de que se aplican a las interfaces de red:
# Setup Accelerated Interface ring buffers (Mellanox / Mana)
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
# Setup Synthetic interface ring buffers (hv_netvsc)
SUBSYSTEM=="net", DRIVERS=="hv_netvsc*", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
- Cree una regla udev en
/etc/udev/rules.d/99-azure-qdisc.rulespara asegurarse de que qdisc se aplica a las interfaces de red:
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="enP*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root noqueue"
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root fq“
-
Programación de solicitudes de interrupción(IRQ): en función de la carga de trabajo, es posible que desee restringir el servicio irqbalance de programar IRQ en determinados nodos. Al usar IRQBalance, puede actualizar
/etc/default/irqbalancepara especificar qué CPUs no deben tener IRQ programados. Deberá determinar la máscara que excluirá las CPUs que necesitan ser excluidas.
Más información sobre cómo calcular la máscara disponible aquí.
En el ejemplo siguiente se supone que desea excluir las CPU 8-15
IRQBALANCE_BANNED_CPULIST=0000ff00
-
Reglas UDEV: Agregue reglas para optimizar el tamaño de la cola y administrar las marcas de dispositivo eficazmente. Cree la siguiente regla en
/etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“
En el caso de los paquetes retrasados dos veces
Cuando se trata de redes de rendimiento de Linux, usamos SR-IOV con controladores Mellanox (mlx4 o mlx5), algo específico de Azure es que esto crea dos interfaces sintéticas y una interfaz virtual. Más información.
Notas adicionales
Los administradores del sistema pueden implementar estas soluciones editando archivos de configuración como /etc/sysctl.d/, /etc/modules-load.d/y /etc/udev/rules.d/. Asegúrese de que las actualizaciones del controlador de kernel y las configuraciones del sistema se revisen para ver posibles regresiones.
Para más información sobre configuraciones específicas y solución de problemas, consulte la documentación de Azure sobre el rendimiento de redes.
Contenido relacionado
- Implemente las VM próximas entre sí para obtener una latencia baja con los grupos con ubicación por proximidad.
- Vea el resultado con las pruebas de ancho de banda y rendimiento para su escenario.
- Aprenda cómo el ancho de banda se asigna a las máquinas virtuales.
- Obtenga más información con las preguntas más frecuentes acerca de Azure Virtual Network.