Я кілька разів зустрічався з тим, що швидкість копіювання файлів над V/на віртуальних машинах на Hyper-V у Windows Server 2019 значно нижча, ніж у VMI подібної конфігурації на хості з Windows Server 2016. У деяких тестах швидкість запису/читання даних у мережі на VM у Windows Server 2019 майже втричі нижча, ніж у WS2016 (копіювання SMB, SSH/SCP тестували). Ця стаття не претендує на абсолютну істину, але в ній я намагався зібрати різні методи покращення продуктивності мережі на віртуальних машинах Hyper-V на Windows Server 2019 (та останні збірки Windows 10).
Отримати сегмент, що зливається в Hyper-V 2019
Перш за все, вам потрібно згадати технологію Отримати сегмент з’єднання (RSC), який з'явився в Hyper-V на Windows Server 2019/2022 (і в Windows 10, починаючи з Build 1809). Отримати сегмент Coalescing використовується на віртуальному комутаторі (vSwitch), дозволяє зменшити навантаження на процесор та збільшити пропускну здатність мережі, поєднуючи кілька сегментів TCP у меншу кількість більших сегментів. Збільшення продуктивності мережі досягається через те, що кілька великих сегментів обробляються швидше, ніж багато малих.
У попередніх версіях Hyper-V на Windows Server 2016/2012R2 було підтримано лише апаратна версія сегмента прийому на рівні мережевої картки.Наявність підтримки RSC часто є джерелом додаткової затримки мережі в деяких залізних комбінаціях.
Проблема проявляється як у повноцінному сервері Windows 2019 з графічним інтерфейсом, так і у безкоштовній версії сервера Windows Hyper-V.За замовчуванням Windows Server 2019 RSC включений для всіх зовнішніх (зовнішніх) VSwitches.
Перевірте, чи можна включити RSC на віртуальні комутатори:
Get-vmswitch | Виберіть -Object *rsc *
Ви можете заборонити використовувати RSC для трафіку IPv4 на рівні адаптера клієнтської мережі:
Відключити -netadapterrsc -name "Ethernet" -ipv4
Перевірте, чи швидкість копіювання в HM на Hyper-V зросте, коли RSC відключиться. Якщо швидкість мережі зросла, ви можете вимкнути RSC на віртуальному комутаторі, до якого підключений VM.
Пропускна здатність мережі можна виміряти за допомогою утиліти IPERF.Щоб вимкнути програмне забезпечення RSC для певного віртуального комутатора, виконайте команду:
Set -vmswitch -name vswitchname -enablesoftwarersc $ false
Або ви можете повністю вимкнути RSC на хості:
Netsh int tcp set global rsc = вимкнено
Режим VMQ в мережевому адаптері
У деяких випадках наявність VMQ (черга віртуальної машини) У драйвері мережевого адаптера фізичного хоста Hyper-V може призвести до низької продуктивності мережі у віртуальних машинах Hyper-V. Це пов’язано з тим, що VMQ є апаратною функцією, і якщо вона не підтримується залізом, але включена до драйвера, це спричиняє втрату пакетів та збільшує затримку мережі. Ця проблема характерна для мережевих карт Gigabit Broadcom і зустрічається у всіх версіях Hyper-V на Windows 2012 R2/2016/2019.
VMQ призначений для підвищення продуктивності мережі, передаючи пакети з фізичного мережевого адаптера безпосередньо на віртуальні машини.Ви можете відключити VMQ у властивості драйвера мережевого адаптера.
Або ви можете відобразити список мережевих адаптерів із підтримкою VMQ та їх статусом за допомогою PowerShell:
Get-netadaptervmq
Щоб вимкнути VMQ для конкретного адаптера, виконайте команду (мережевий адаптер буде недоступним протягом декількох секунд):
Set -netadaptervmq -name “nicname” -Enabled $ fals
Після відключення VMQ краще перезапустити хост і перевірити продуктивність мережі.
Переконайтесь, що Windows не має обмежень швидкості QoS.Оптимізація параметрів протоколу TCP для Windows Server 2019 Hyper-V
Збережіть поточні параметри TCP на хості Hyper-V та використовуйте нові налаштування, які зроблять параметри протоколу TCP у Windows Server 2019 як подібним до Windows Server 2016.
Збережіть поточні налаштування:
Get-netcpsetting -settingname Datacenter, DataCenterCustom, InternetCusta, Інтернет | Виберіть Налаштування, CongestionProvider, Cwndrestart, ForceWs | Export-csv C: \ ps \ nettcp_.CSV
Застосовуйте нові налаштування для мережі LAN:
Встановіть -nettcpsetting -settingname datacentcentercustom, datacenter -congestprovider dctcp
Встановити -nettcpsetting -settingname datacentcentercustom, Datacenter -Cwndrestart true
Встановіть -nettcpsetting -settingname datacentcentercustom, Datacenter -forcews вимкнено
Для WAN Network:
Встановіть -nettcpsetting -settingname Internetcusta, Інтернет -congestsprovider ctcp
Встановіть -nettcpsetting -settingname InternetCustom, Інтернет -delayedacktioutms 50
Встановіть -nettcpsetting -settingname InternetCustom, Інтернет -forcews вимкнено
Відключіть методи оптимізації мережі RSS та RSC на стеку TCP:
Netsh Intsp показує глобальний
Netsh int tcp set global rss = вимкнено
Netsh int tcp set global rsc = вимкнено
або на рівні мережевих адаптерів:
Get-Netadapter | Set -netadaptaradwancedproperty -displayname "Сегмент recv coalescing (ipv4)" -displayvalue "
Get-Netadapter | Set -netadaptaradwancedproperty -displayname "Сегмент recv coalescing (ipv6)" -displayvalue "
Get-Netadapter | Set -netadaptaradwancedproperty -displayname "Отримати бічне масштабування" -displayValue "ywaindabled" -norestart
Відключіть VRSS для всіх VM:
Get-vm | Set -vmnetworkadapter -vrssenabled $ false
Відключіть велику функцію відправлення (LSO) на мережеві картки:
Get-Netadapter | Set -netadaptaradwancedproperty -displayname "Великий відправлення Offloy 2 (ipv4)" -displayvalue "indivabled -norestart
Get-Netadapter | Set -netadaptaradwancedproperty -displayname "Великий надсилання Offloy 2 (ipv6)" -displayValue "вимкнено -norestart
Get-Netadapter | Перезапуск-Нетадаптер
- Сегмент RECV Coalescing (IPv4/IPv6) = вимкнено
- Великий надсилання V2 (ipv4/ipv6) = вимкнено
Налаштування стека TCP уважно закриються як можливі налаштування мережевих протоколів Windows Server 2019 до попередніх версій Windows Server.