Bajo rendimiento de red en máquinas virtuales Hyper-V en Windows Server 2019
Varias veces me encontré con una situación en la que los archivos se copiaban mucho más lentamente de/a máquinas virtuales en un host Hyper-V que ejecutaba Windows Server 2019 que en una VM de la misma configuración en un host que ejecutaba Windows Server 2016. En algunas pruebas, la velocidad de lectura/escritura a través de la red a la VM en Windows Server 2019 es casi tres veces menor que la de WS2016 (se probó la copia en SMB, SSH/SCP). En este artículo, traté de describir varios métodos diferentes para mejorar el rendimiento de la red de las máquinas virtuales Hyper-V que se ejecutan en Windows Server 2019 (y las versiones más recientes de Windows 10 y 11).
Recibir fusión de segmentos (RSC) en Hyper-V vSwitch
En primer lugar, debe tener en cuenta la función Receive Segment Coalescing (RSC) que apareció en Hyper-V en Windows Server 2019/2022 (y Windows 10 1809+). La fusión de segmentos de recepción se utiliza en el nivel de conmutador virtual (vSwitch). RSC permite reducir la carga de la CPU y aumentar el rendimiento de la red al combinar varios segmentos TCP en otros más grandes. Se mejora el rendimiento de la red porque los segmentos grandes se procesan más rápido que muchos más pequeños.
En versiones anteriores de Hyper-V (Windows Server 2016/2012R2), solo se admitía el modo de fusión de segmento de recepción de hardware en el nivel de NIC.
Si la compatibilidad con RSC está habilitada, puede provocar un retraso adicional en la red en algunas configuraciones de hardware.
El problema ocurre tanto en las versiones de GUI completa de Windows Server 2019 como en el servidor Windows Hyper-V gratuito.
De manera predeterminada, RSC está habilitado para todos los vSwitches externos en Windows Server 2019.
Puede verificar si RSC está habilitado para conmutadores virtuales usando el comando:
Get-VMSwitch | Select-Object *RSC*Puede deshabilitar el uso de RSC para el tráfico IPv4 en el adaptador de red del cliente mediante el siguiente comando:
Disable-NetAdapterRsc -Name "Ethernet" -IPv4Compruebe si la velocidad de copia en una máquina virtual Hyper-V ha aumentado después de desactivar RSC. Si la velocidad de la red ha mejorado, puede deshabilitar RSC en el conmutador virtual al que está conectada la máquina virtual.
Puede comprobar el rendimiento de su red con la herramienta iperf.
Para deshabilitar el software RSC para un conmutador virtual específico, ejecute el comando:
Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $falsePuede habilitar/deshabilitar RSC sobre la marcha, no afectará ninguna conexión activa.
O puede deshabilitar completamente RSC en su host de Windows:
netsh int tcp set global rsc=disabledModo de cola de máquina virtual (VMQ) en el controlador del adaptador de red
En algunos casos, si VMQ (Cola de máquina virtual) está habilitado en un controlador de adaptador de red de un host Hyper-V físico, puede resultar en un bajo rendimiento de red en máquinas virtuales Hyper-V. VMQ es una función de hardware y, si no es compatible con su hardware pero está habilitada en el controlador, puede provocar la pérdida de paquetes y un aumento de la latencia de la red. El problema es típico de los adaptadores de red Broadcom Gigabit y ocurre en todas las versiones de Hyper-V (Windows Server 2012 R2/2016/2019).
VMQ está diseñado para mejorar el rendimiento de la red mediante el reenvío directo de paquetes desde un adaptador de red físico a máquinas virtuales.
Puede deshabilitar VMQ en las propiedades del controlador de su adaptador de red.
O puede mostrar una lista de adaptadores de red compatibles con VMQ y su estado mediante PowerShell:
Get-NetAdapterVmqPara deshabilitar VMQ para una NIC específica, ejecute el siguiente comando (el adaptador de red no estará disponible durante un par de segundos):
Set-NetAdapterVmq -Name “NICName” -Enabled $FalseDespués de deshabilitar VMQ, es mejor reiniciar el host y verificar el rendimiento de la red.
Asegúrese de que las políticas de límite de ancho de banda de QoS estén deshabilitadas en Windows.
Optimizar la configuración de TCP para Hyper-V en Windows Server 2019
Guarde la configuración de TCP actual en su host de Hyper-V y aplique la nueva configuración que hará que la configuración de TCP en Windows Server 2019 sea casi similar a la de Windows Server 2016.
Guarde la configuración actual:
Get-NetTCPSetting -SettingName Datacenter,DatacenterCustom,InternetCustom,Internet|select SettingName,CongestionProvider,CwndRestart,ForceWS|Export-csv c:\backup\ws2019_network_stack_settings_nettcp_backup.csvDe forma predeterminada en Windows Server 2019 y Windows 10 1709+, se usa la implementación CUBIC de TCP. Este algoritmo está optimizado para redes de alta velocidad con alta latencia (también se usa de forma predeterminada en el kernel de Linux 2.6.19 y posteriores).
Aplique la siguiente configuración solo en Windows Server 2019 o Hyper-V 2019.
Aplique la nueva configuración de NetTCP para LAN:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS DisabledPara WAN:
Set-NetTCPSetting -SettingName InternetCustom,Internet -CongestionProvider CTCP
Set-NetTCPSetting -SettingName InternetCustom,Internet -DelayedAckTimeoutMs 50
Set-NetTCPSetting -SettingName InternetCustom,Internet -ForceWS DisabledDeshabilite los métodos de optimización de red RSS y RSC en el nivel de pila TCP:
netsh int tcp show global
netsh int tcp set global RSS=Disabled
netsh int tcp set global RSC=Disabledo en el nivel de NIC:
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Recv Segment Coalescing (IPv4)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Recv Segment Coalescing (IPv6)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Receive Side Scaling" -DisplayValue "Disabled" -NoRestartDeshabilite vRSS para todas las máquinas virtuales:
Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSEDeshabilite la descarga de envío grande (LSO) en las NIC:
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Large Send Offload Version 2 (IPv4)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Large Send Offload Version 2 (IPv6)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Restart-NetAdapterTambién puede deshabilitar estas opciones en la pestaña Avanzado de las propiedades de su adaptador de red:
Fusión de segmentos recibidos (IPv4/IPv6)=Deshabilitado
Descarga de envío grande V2 (IPv4/IPv6)=Deshabilitado
Esta configuración de la pila TCP hará que la configuración del protocolo de red de Windows Server 2019 sea similar a la de las versiones anteriores de Windows Server.




