Windows Server 2019가 설치된 Hyper-V 호스트의 가상 머신(VM)에서 파일을 복사할 때, 동일한 사양의 Windows Server 2016 호스트 VM보다 현저히 느린 현상을 여러 차례 경험했습니다. 일부 테스트에서는 Windows Server 2019 VM의 네트워크 읽기/쓰기 속도가 WS2016보다 거의 3배까지 느린 것으로 나타났습니다(SMB, SSH/SCP 복사 기준). 이 글에서는 Windows Server 2019(및 최신 Windows 10, 11 빌드)에서 실행되는 Hyper-V 가상 머신의 네트워크 성능을 개선할 수 있는 여러 가지 방법을 소개합니다.
Hyper-V vSwitch의 RSC(Receive Segment Coalescing)
먼저 Windows Server 2019/2022(및 Windows 10 1809 이상)의 Hyper-V에 새롭게 도입된 RSC(Receive Segment Coalescing, 수신 세그먼트 병합) 기능에 주목할 필요가 있습니다. RSC는 가상 스위치(vSwitch) 수준에서 작동하며, 여러 개의 TCP 세그먼트를 더 큰 세그먼트로 병합하여 CPU 부하를 줄이고 네트워크 처리량을 높입니다. 큰 세그먼트가 작은 세그먼트 여러 개보다 빠르게 처리되기 때문에 네트워크 성능이 향상됩니다.
이전 버전의 Hyper-V(Windows Server 2016/2012 R2)에서는 NIC 수준의 하드웨어 RSC 모드만 지원했습니다.
다만 RSC가 활성화되어 있으면 일부 하드웨어 구성에서 추가적인 네트워크 지연이 발생할 수 있습니다.
이 문제는 Windows Server 2019 GUI(데스크톱 경험) 버전과 무료 Windows Hyper-V Server 모두에서 발생합니다.
기본적으로 Windows Server 2019에서는 모든 외부 vSwitch에 대해 RSC가 활성화되어 있습니다.
다음 명령으로 가상 스위치에 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

RSC는 실시간으로 활성화/비활성화할 수 있으며, 활성 연결에는 영향을 주지 않습니다.
또는 Windows 호스트에서 RSC를 완전히 비활성화할 수도 있습니다:
netsh int tcp set global rsc=disabled
네트워크 어댑터 드라이버의 VMQ(Virtual Machine Queue) 모드
경우에 따라 물리적 Hyper-V 호스트의 네트워크 어댑터 드라이버에서 VMQ(Virtual Machine Queue, 가상 머신 큐)가 활성화되어 있으면 Hyper-V 가상 머신의 네트워크 성능이 저하될 수 있습니다. VMQ는 하드웨어 기능으로, 하드웨어가 지원하지 않는데도 드라이버에서 활성화되어 있으면 패킷 손실과 네트워크 지연 증가를 초래할 수 있습니다. 이 문제는 Broadcom 기가비트 네트워크 어댑터에서 흔히 발생하며, 모든 Hyper-V 버전(Windows Server 2012 R2/2016/2019)에서 나타날 수 있습니다.
VMQ는 물리적 네트워크 어댑터에서 가상 머신으로 패킷을 직접 전달하여 네트워크 성능을 향상시키기 위한 기능입니다.
네트워크 어댑터 드라이버 속성에서 VMQ를 비활성화할 수 있습니다.

또는 PowerShell을 사용하여 VMQ를 지원하는 네트워크 어댑터 목록과 상태를 확인할 수 있습니다:
Get-NetAdapterVmq
특정 NIC에 대해 VMQ를 비활성화하려면 다음 명령을 실행합니다(네트워크 어댑터가 몇 초간 일시적으로 사용 불가 상태가 됩니다):
Set-NetAdapterVmq -Name "NICName" -Enabled $False

VMQ를 비활성화한 후에는 호스트를 재시작하고 네트워크 성능을 확인하는 것이 좋습니다.
Windows에서 QoS 대역폭 제한 정책이 비활성화되어 있는지도 함께 확인하세요.
Windows Server 2019 Hyper-V를 위한 TCP 설정 최적화
Hyper-V 호스트의 현재 TCP 설정을 백업한 후, Windows Server 2019의 TCP 설정을 Windows Server 2016과 거의 유사하게 만드는 새 설정을 적용합니다.
먼저 현재 설정을 백업합니다:
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 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
네트워크 어댑터 속성의 고급 탭에서도 다음 옵션들을 비활성화할 수 있습니다:
- Recv Segment Coalescing (IPv4/IPv6) = 사용 안 함
- Large Send Offload V2 (IPv4/IPv6) = 사용 안 함

이러한 TCP 스택 설정을 적용하면 Windows Server 2019의 네트워크 프로토콜 설정이 이전 Windows Server 버전과 유사해지며, Hyper-V 가상 머신의 네트워크 성능 저하 문제를 개선할 수 있습니다.