Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Nhiều lần tôi gặp tình huống copy file chậm hơn nhiều từ/đến máy ảo trên host Hyper-V chạy Windows Server 2019 so với VM cùng cấu hình trên host chạy Windows Server 2016. Trong một số test, tốc độ đọc/ghi qua mạng đến VM trên Windows Server 2019 gần gấp 3 lần thấp hơn so với WS2016 (test copy qua SMB, SSH/SCP). Trong bài này, tôi mô tả một số phương pháp khác nhau cải thiện hiệu suất mạng của máy ảo Hyper-V chạy trên Windows Server 2019 (và các bản Windows 10/11 mới nhất).

Receive Segment Coalescing (RSC) trong Hyper-V vSwitch

Trước hết, lưu ý tính năng Receive Segment Coalescing (RSC) xuất hiện trong Hyper-V trên Windows Server 2019/2022 (và Windows 10 1809+). Receive Segment Coalescing dùng ở cấp virtual switch (vSwitch). RSC cho phép giảm tải CPU và tăng throughput mạng bằng cách gộp nhiều segment TCP thành segment lớn hơn. Hiệu suất mạng cải thiện vì segment lớn xử lý nhanh hơn nhiều segment nhỏ.

Trong các phiên bản Hyper-V trước (Windows Server 2016/2012R2), chỉ hỗ trợ chế độ Receive Segment Coalescing phần cứng ở cấp NIC.

Nếu hỗ trợ RSC được bật, có thể gây độ trễ mạng thêm trong một số cấu hình phần cứng.

Vấn đề xảy ra cả trên Windows Server 2019 Full GUI và free Windows Hyper-V Server.

Mặc định, RSC được bật cho tất cả external vSwitch trên Windows Server 2019.

Bạn có thể kiểm tra RSC có bật cho virtual switch không bằng lệnh:

Get-VMSwitch | Select-Object *RSC*

Bạn có thể tắt dùng RSC cho traffic IPv4 trên network adapter client bằng lệnh:

Disable-NetAdapterRsc -Name "Ethernet" -IPv4

Kiểm tra xem tốc độ copy trong VM Hyper-V có tăng sau khi tắt RSC không. Nếu tốc độ mạng cải thiện, bạn có thể tắt RSC trên virtual switch VM kết nối.

Bạn có thể kiểm tra throughput mạng dùng công cụ iperf.

Để tắt software RSC cho virtual switch cụ thể, chạy lệnh:

Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $false
Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Bạn có thể bật/tắt RSC ngay lập tức, nó không ảnh hưởng kết nối đang hoạt động.

Hoặc bạn có thể tắt hoàn toàn RSC trên host Windows:

netsh int tcp set global rsc=disabled

Chế độ Virtual Machine Queue (VMQ) trong driver card mạng

Trong một số trường hợp, nếu VMQ (Virtual Machine Queue) được bật trong driver card mạng vật lý của host Hyper-V, có thể dẫn đến hiệu suất mạng kém trong VM Hyper-V. VMQ là tính năng phần cứng và nếu phần cứng không hỗ trợ nhưng bật trong driver, có thể gây mất gói tin và tăng độ trễ mạng. Vấn đề điển hình với card mạng Broadcom Gigabit và xảy ra ở mọi phiên bản Hyper-V (Windows Server 2012 R2/2016/2019).

VMQ thiết kế để cải thiện hiệu suất mạng bằng cách chuyển tiếp gói tin trực tiếp từ card mạng vật lý đến máy ảo.

Bạn có thể tắt VMQ trong properties driver card mạng.

Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Hoặc hiển thị danh sách card mạng hỗ trợ VMQ và trạng thái bằng PowerShell:

Get-NetAdapterVmq

Để tắt VMQ cho NIC cụ thể, chạy lệnh dưới (network adapter sẽ không khả dụng vài giây):

Set-NetAdapterVmq -Name “NICName” -Enabled $False
Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Sau khi tắt VMQ, tốt nhất khởi động lại host và kiểm tra hiệu suất mạng.

Đảm bảo policy giới hạn băng thông QoS bị tắt trong Windows.

Tối ưu cài đặt TCP cho Hyper-V trên Windows Server 2019

Lưu cài đặt TCP hiện tại trên host Hyper-V và áp dụng cài đặt mới làm cho TCP settings trong Windows Server 2019 gần giống Windows Server 2016.

Lưu cài đặt hiện tại:

Get-NetTCPSetting -SettingName Datacenter,DatacenterCustom,InternetCustom,Internet|select SettingName,CongestionProvider,CwndRestart,ForceWS|Export-csv c:\backup\ws2019_network_stack_settings_nettcp_backup.csv

Mặc định trong Windows Server 2019 và Windows 10 1709+, triển khai CUBIC của TCP được dùng. Thuật toán này tối ưu cho mạng tốc độ cao độ trễ cao (cũng dùng mặc định trong Linux kernel 2.6.19+).

Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Áp dụng cài đặt sau chỉ trong Windows Server 2019 hoặc Hyper-V 2019.

Áp dụng NetTCP settings mới cho LAN:

Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled

Cho WAN:

Set-NetTCPSetting -SettingName InternetCustom,Internet -CongestionProvider CTCP
Set-NetTCPSetting -SettingName InternetCustom,Internet -DelayedAckTimeoutMs 50
Set-NetTCPSetting -SettingName InternetCustom,Internet -ForceWS Disabled

Tắt phương pháp tối ưu mạng RSS và RSC ở cấp TCP stack:

netsh int tcp show global
netsh int tcp set global RSS=Disabled
netsh int tcp set global RSC=Disabled

Hoặc ở cấp 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

Tắt vRSS cho tất cả VM:

Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE

Tắt Large Send Offload (LSO) trên NICs:
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

Bạn cũng có thể tắt các tùy chọn này trong tab Advanced của properties network adapter:

  • Recv Segment Coalescing (IPv4/IPv6) = Disabled
  • Large Send Offload V2 (IPv4/IPv6) = Disabled
Hiệu suất mạng kém trên VM Hyper-V trong Windows Server 2019

Các cài đặt TCP stack này sẽ làm cài đặt giao thức mạng Windows Server 2019 tương tự các phiên bản Windows Server trước.