В данной статье мы рассмотрим проблему снижения скорости копирования файлов по сети на виртуальных машинах Hyper-V, работающих под управлением Windows Server 2019. Нередко скорость передачи данных на таких виртуальных машинах значительно ниже по сравнению с аналогичными конфигурациями на хостах с Windows Server 2016. В некоторых тестах скорость записи и чтения данных по сети на ВМ в Windows Server 2019 может быть почти в три раза ниже, чем в WS2016 (проверялось копирование по SMB, SSH/SCP). Мы собрали различные методики улучшения производительности сети в виртуальных машинах Hyper-V на Windows Server 2019 и последних сборках Windows 10.
Приобрести оригинальные ключи Windows Server можно у нас в каталоге:
Windows Server 2022 — от 2790 ₽
Windows Server 2019 — от 2740 ₽
В первую очередь необходимо обратить внимание на технологию Receive Segment Coalescing (RSC), которая появилась в Hyper-V на Windows Server 2019/2022 (и в Windows 10 начиная с билда 1809). Receive Segment Coalescing используется на уровне виртуального коммутатора (vSwitch) и позволяет снизить нагрузку на CPU и увеличить пропускную способность сети за счет объединения нескольких TCP сегментов в меньшее количество более крупных сегментов. Это улучшает производительность сети, поскольку обработка нескольких больших сегментов эффективнее, чем множества мелких.
В предыдущих версиях Hyper-V на Windows Server 2016/2012R2 поддерживалась только аппаратная версия RSC на уровне сетевой карты. Наличие включенной поддержки RSC часто становится источником дополнительной сетевой задержки в некоторых комбинациях оборудования.
Проблема проявляется как в полной версии Windows Server 2019 с графическим интерфейсом, так и в бесплатной редакции Windows Hyper-V Server. По умолчанию в Windows Server 2019 RSC включен для всех внешних (External) vSwitches.
Проверить, включен ли 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 на хосте:
netsh int tcp set global rsc=disabled
В некоторых случаях включенная опция VMQ (Virtual Machine Queue) в драйвере сетевого адаптера физического хоста Hyper-V может привести к низкой производительности сети в виртуальных машинах Hyper-V. Это связано с тем, что VMQ — аппаратная функция, и если она не поддерживается оборудованием, но включена в драйвере, это вызывает потерю пакетов и увеличение сетевой задержки. Данная проблема характерна для сетевых карт Broadcom Gigabit и встречается во всех версиях Hyper-V на Windows Server 2012 R2/2016/2019.
VMQ предназначен для повышения производительности сети за счет передачи пакетов от физического сетевого адаптера напрямую виртуальным машинам.
Вы можете отключить VMQ в свойствах драйвера сетевого адаптера.
Также можно вывести список сетевых адаптеров с поддержкой VMQ и их статус с помощью PowerShell:
Get-NetAdapterVmq
Чтобы отключить VMQ для определенного адаптера, выполните команду (сетевой адаптер будет недоступен в течение нескольких секунд):
Set-NetAdapterVmq -Name "NICName" -Enabled $False
После отключения VMQ рекомендуется перезагрузить хост и проверить сетевую производительность.
Убедитесь также, что в Windows не действуют политики ограничения скорости QoS.
Сохраните текущие настройки 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:\ps\nettcp_backup.csv
В Windows Server 2019 и Windows 10 1709+ по умолчанию используется реализация протокола TCP — CUBIC. Этот алгоритм оптимизирован для высокоскоростных сетей с большой задержкой (также используется в ядре Linux начиная с версии 2.6.19).
Внимание: Следующие настройки следует применять только на Windows Server 2019 или Hyper-V 2019.
Примените новые настройки для LAN-сети:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled
Для WAN-сети:
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
Или на уровне сетевых адаптеров:
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
Отключите функцию Large Send Offload (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
Эти опции также можно отключить в свойствах сетевого адаптера на вкладке Advanced:
— Recv Segment Coalescing (IPv4/IPv6) = Disabled
— Large Send Offload V2 (IPv4/IPv6) = Disabled
Применение данных настроек стека TCP максимально приблизит параметры сетевых протоколов Windows Server 2019 к предыдущим версиям Windows Server, что может положительно сказаться на производительности сети.
Следуя этим рекомендациям, вы сможете улучшить сетевую производительность виртуальных машин Hyper-V на Windows Server 2019 и минимизировать проблемы, связанные с низкой скоростью передачи данных по сети.