Computer >> 컴퓨터 >  >> 체계 >> Windows Server

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

Windows Server 2016을 실행하는 호스트에서 동일한 구성의 VM에서보다 Windows Server 2019를 실행하는 Hyper-V 호스트에서 가상 머신 간에 파일을 복사하는 속도가 훨씬 느린 상황을 여러 번 접했습니다. 일부 테스트에서 읽기 Windows Server 2019의 VM에 대한 네트워크를 통한 /쓰기 속도는 WS2016의 속도보다 거의 3배 낮습니다(SMB를 통한 복사, SSH/SCP가 테스트됨). 이 기사에서는 Windows Server 2019(및 최신 Windows 10 및 11 빌드)에서 실행되는 Hyper-V 가상 머신의 네트워크 성능을 개선하기 위한 여러 가지 방법을 설명하려고 했습니다.

Hyper-V vSwitch에서 세그먼트 병합(RSC) 수신

우선 Receive Segment Coalescing(RSC)에 주의해야 합니다. Windows Server 2019/2022(및 Windows 10 1809+)의 Hyper-V에 나타난 기능입니다. 수신 세그먼트 병합은 가상 스위치 수준(vSwitch)에서 사용됩니다. RSC를 사용하면 여러 TCP 세그먼트를 더 큰 세그먼트로 결합하여 CPU 부하를 줄이고 네트워크 처리량을 늘릴 수 있습니다. 큰 세그먼트가 많은 작은 세그먼트보다 빠르게 처리되기 때문에 네트워크 성능이 향상됩니다.

이전 Hyper-V 버전(Windows Server 2016/2012R2)에서는 하드웨어 수신 세그먼트 병합 모드만 NIC 수준에서 지원되었습니다.

RSC 지원이 활성화되면 일부 하드웨어 구성에서 추가 네트워크 지연이 발생할 수 있습니다.

이 문제는 Windows Server 2019 전체 GUI 버전과 무료 Windows Hyper-V Server에서 모두 발생합니다.

기본적으로 RSC는 Windows Server 2019의 모든 외부 vSwitch에 대해 활성화되어 있습니다.

다음 명령을 사용하여 가상 스위치에 대해 RSC가 활성화되었는지 확인할 수 있습니다.

Get-VMSwitch | Select-Object *RSC*

다음 명령을 사용하여 클라이언트 네트워크 어댑터에서 IPv4 트래픽에 대해 RSC를 사용하지 않도록 설정할 수 있습니다.

Disable-NetAdapterRsc -Name "Ethernet" -IPv4

RSC를 비활성화한 후 Hyper-V VM의 복사 속도가 증가했는지 확인합니다. 네트워크 속도가 향상되면 VM이 연결된 가상 스위치에서 RSC를 비활성화할 수 있습니다.

iperf 도구를 사용하여 네트워크 처리량을 확인할 수 있습니다.

특정 가상 스위치에 대해 소프트웨어 RSC를 비활성화하려면 다음 명령을 실행하십시오.

Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $false

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

RSC를 즉석에서 활성화/비활성화할 수 있으며 활성 연결에는 영향을 미치지 않습니다.

또는 Windows 호스트에서 RSC를 완전히 비활성화할 수 있습니다.

netsh int tcp set global rsc=disabled

네트워크 어댑터 드라이버의 VMQ(Virtual Machine Queue) 모드

경우에 따라 VMQ(가상 머신 대기열) 물리적 Hyper-V 호스트의 네트워크 어댑터 드라이버에서 활성화된 경우 Hyper-V 가상 컴퓨터에서 네트워크 성능이 저하될 수 있습니다. VMQ는 하드웨어 기능이며 하드웨어에서 지원하지 않지만 드라이버에서 활성화된 경우 패킷 손실 및 네트워크 대기 시간 증가가 발생할 수 있습니다. 이 문제는 Broadcom 기가비트 네트워크 어댑터에 일반적이며 모든 Hyper-V 버전(Windows Server 2012 R2/2016/2019)에서 발생합니다.

VMQ는 물리적 네트워크 어댑터에서 가상 머신으로 패킷을 직접 전달하여 네트워크 성능을 향상시키도록 설계되었습니다.

네트워크 어댑터 드라이버의 속성에서 VMQ를 비활성화할 수 있습니다.

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

또는 PowerShell을 사용하여 VMQ를 지원하는 네트워크 어댑터 및 해당 상태 목록을 표시할 수 있습니다.

Get-NetAdapterVmq

특정 NIC에 대해 VMQ를 비활성화하려면 아래 명령을 실행하십시오(네트워크 어댑터는 몇 초 동안 사용할 수 없음).

Set-NetAdapterVmq -Name “NICName” -Enabled $False

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

VMQ를 비활성화한 후 호스트를 다시 시작하고 네트워크 성능을 확인하는 것이 좋습니다.

Windows에서 QoS 대역폭 제한 정책이 비활성화되어 있는지 확인하십시오.

Windows Server 2019에서 Hyper-V용 TCP 설정 최적화

Hyper-V 호스트에 현재 TCP 설정을 저장하고 Windows Server 2019의 TCP 설정을 Windows Server 2016의 TCP 설정과 거의 비슷하게 만드는 새 설정을 적용하십시오.

현재 설정 저장:

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+에서는 CUBIC TCP 구현이 사용됩니다. 이 알고리즘은 대기 시간이 긴 고속 네트워크에 최적화되어 있습니다(Linux 커널 2.6.19 이상에서도 기본적으로 사용됨).

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

다음 설정은 Windows Server 2019 또는 Hyper-V 2019에서만 적용하십시오.

LAN에 대한 새 NetTCP 설정 적용:

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

TCP 스택 수준에서 네트워크 RSS 및 RSC 네트워크 최적화 방법 비활성화:

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

모든 VM에 대해 vRSS 비활성화:

Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE

NIC에서 LSO(Large Send Offload) 비활성화:
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) =비활성화됨
  • Large Send Offload V2(IPv4/IPv6) =비활성화됨

Windows Server 2019의 Hyper-V VM에서 네트워크 성능 저하

이러한 TCP 스택 설정은 Windows Server 2019 네트워크 프로토콜 설정을 이전 Windows Server 버전과 유사하게 만듭니다.