Блог

В данной статье мы рассмотрим проблему снижения скорости копирования файлов по сети на виртуальных машинах 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 — от 2770 ₽

Windows Server 2019 — от 2640 ₽

Receive Segment Coalescing в Hyper-V 2019

В первую очередь необходимо обратить внимание на технологию 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 в драйвере сетевого адаптера

В некоторых случаях включенная опция 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 для Windows Server 2019 Hyper-V

Сохраните текущие настройки 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 и минимизировать проблемы, связанные с низкой скоростью передачи данных по сети.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии