Низкая производительность сети на виртуальных машинах Hyper-V в Windows Server 2019
Несколько раз я сталкивался с ситуацией, когда файлы копировались из/в виртуальные машины на хосте Hyper-V под управлением Windows Server 2019 гораздо медленнее, чем в ВМ той же конфигурации на хосте под управлением Windows Server 2016. В некоторых тестах чтение Скорость /записи по сети на ВМ на Windows Server 2019 почти в три раза ниже, чем на WS2016 (проверялось копирование по SMB, SSH/SCP). В этой статье я попытался описать несколько различных методов повышения производительности сети виртуальных машин Hyper-V, работающих под управлением Windows Server 2019 (и последних сборок Windows 10 и 11).
Объединение сегментов приема (RSC) в Hyper-V vSwitch
Прежде всего, следует обратить внимание на функцию Объединение сегментов приема (RSC), которая появилась в Hyper-V на Windows Server 2019/2022 (и Windows 10 1809+). Объединение сегментов приема используется на уровне виртуального коммутатора (vSwitch). RSC позволяет снизить нагрузку на процессор и увеличить пропускную способность сети за счет объединения нескольких сегментов TCP в более крупные. Производительность сети повышается, поскольку большие сегменты обрабатываются быстрее, чем многие более мелкие.
В предыдущих версиях Hyper-V (Windows Server 2016/2012R2) на уровне сетевого адаптера поддерживался только аппаратный режим объединения сегментов приема.
Если поддержка RSC включена, это может привести к дополнительной задержке сети в некоторых конфигурациях оборудования.
Проблема возникает как в версиях Windows Server 2019 с полным графическим интерфейсом, так и в бесплатной версии Windows Hyper-V Server.
По умолчанию RSC включен для всех внешних виртуальных коммутаторов в Windows Server 2019.
Проверить, включен ли RSC для виртуальных коммутаторов, можно с помощью команды:
Get-VMSwitch | Select-Object *RSC*Вы можете отключить использование RSC для трафика IPv4 на клиентском сетевом адаптере, используя следующую команду:
Disable-NetAdapterRsc -Name "Ethernet" -IPv4Проверьте, увеличилась ли скорость копирования на виртуальной машине Hyper-V после отключения RSC. Если скорость сети улучшилась, вы можете отключить RSC на виртуальном коммутаторе, к которому подключена виртуальная машина.
Вы можете проверить пропускную способность сети с помощью инструмента iperf.
Чтобы отключить программный RSC для конкретного виртуального коммутатора, выполните команду:
Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $falseВы можете включать/отключать RSC на лету, это не повлияет на активные соединения.
Или вы можете полностью отключить RSC на своем хосте Windows:
netsh int tcp set global rsc=disabledРежим очереди виртуальной машины (VMQ) в драйвере сетевого адаптера
В некоторых случаях, если VMQ (очередь виртуальной машины) включен в драйвере сетевого адаптера физического хоста Hyper-V, это может привести к снижению производительности сети на виртуальных машинах Hyper-V. VMQ — это аппаратная функция, и если она не поддерживается вашим оборудованием, но включена в драйвере, это может привести к потере пакетов и увеличению задержки в сети. Проблема типична для гигабитных сетевых адаптеров Broadcom и возникает во всех версиях Hyper-V (Windows Server 2012 R2/2016/2019).
VMQ предназначен для повышения производительности сети за счет прямой пересылки пакетов от физического сетевого адаптера на виртуальные машины.
Вы можете отключить VMQ в свойствах драйвера сетевого адаптера.
Или вы можете отобразить список сетевых адаптеров с поддержкой VMQ и их статус с помощью PowerShell:
Get-NetAdapterVmqЧтобы отключить VMQ для определенного сетевого адаптера, выполните команду ниже (сетевой адаптер будет недоступен в течение нескольких секунд):
Set-NetAdapterVmq -Name “NICName” -Enabled $FalseПосле отключения VMQ лучше перезагрузить хост и проверить работоспособность сети.
Убедитесь, что политики ограничения пропускной способности QoS отключены в Windows.
Оптимизация настроек TCP для Hyper-V на Windows Server 2019
Сохраните текущие настройки TCP на своем хосте Hyper-V и примените новые настройки, которые сделают настройки TCP в Windows Server 2019 почти такими же, как в Windows Server 2016.
Сохраняем текущие настройки:
Get-NetTCPSetting -SettingName Datacenter,DatacenterCustom,InternetCustom,Internet|select SettingName,CongestionProvider,CwndRestart,ForceWS|Export-csv c:\backup\ws2019_network_stack_settings_nettcp_backup.csvПо умолчанию в Windows Server 2019 и Windows 10 1709+ используется реализация TCP CUBIC. Этот алгоритм оптимизирован для высокоскоростных сетей с большой задержкой (он также используется по умолчанию в ядре Linux 2.6.19 и новее).
Примените следующие параметры только в Windows Server 2019 или Hyper-V 2019.
Примените новые настройки NetTCP для локальной сети:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS DisabledДля глобальной сети:
Set-NetTCPSetting -SettingName InternetCustom,Internet -CongestionProvider CTCP
Set-NetTCPSetting -SettingName InternetCustom,Internet -DelayedAckTimeoutMs 50
Set-NetTCPSetting -SettingName InternetCustom,Internet -ForceWS DisabledОтключите методы оптимизации сети RSS и RSC на уровне стека TCP:
netsh int tcp show global
netsh int tcp set global RSS=Disabled
netsh int tcp set global RSC=Disabledили на уровне 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" -NoRestartОтключите vRSS для всех виртуальных машин:
Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSEОтключите разгрузку большой отправки (LSO) на сетевых картах:
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-NetAdapterВы также можете отключить эти параметры на вкладке «Дополнительно» свойств вашего сетевого адаптера:
Объединение сегментов приема (IPv4/IPv6)=отключено
Разгрузка большой отправки V2 (IPv4/IPv6)=отключено
Эти настройки стека TCP сделают настройки сетевого протокола Windows Server 2019 аналогичными настройкам предыдущих версий Windows Server.




