Poor Network Performance on Windows Server 2019 Hyper-V Virtual Machines with Intel 10Gbps X540, X552 and X710 NICs

I migrated my pfSense VM from a Server 2016 to 2019 host and noticed a precipitous drop in WAN transfer speeds.

  1. I installed the latest Intel Network Adapter Driver for Windows Server 2019 1 for my Intel X552 NIC on my physical Hyper-V host on Server 2019.
  2. I continued to notice strange window scaling behaviour, with my WAN speed almost 1/10th of the speed once the VM was migrated to 2019. Migrating the VM back to a 2016 instantly brought performance back up to expected levels.
  3. SMB server performance on the 2019 host was also slow. File shares located on this server were sluggish/slow and resulted in unexpectedly low transfer speeds.
  4. I issued the following PowerShell commands to restore performance 2:
     #RUN ONLY ON NATIVE2019, HV2019, VM2019
     #Change the TCP-Stack-Settings back to state of Server 2016 
     #Get-NetTCPSetting | ft -AutoSize
     Set-NetTCPSetting -SettingName "InternetCustom" -CongestionProvider CTCP
     Set-NetTCPSetting -SettingName "InternetCustom" -DelayedAckTimeoutMs 50
     Set-NetTCPSetting -SettingName "InternetCustom" -ForceWS Disabled
    
     Set-NetTCPSetting -SettingName "DatacenterCustom" -CongestionProvider DCTCP
     Set-NetTCPSetting -SettingName "DatacenterCustom" -CwndRestart True
     Set-NetTCPSetting -SettingName "DatacenterCustom" -ForceWS Disabled
    
     Set-NetTCPSetting -SettingName "Compat" -ForceWS Disabled
    
     Set-NetTCPSetting -SettingName "Datacenter" -CongestionProvider DCTCP
     Set-NetTCPSetting -SettingName "Datacenter" -CwndRestart True
     Set-NetTCPSetting -SettingName "Datacenter" -ForceWS Disabled
    
     Set-NetTCPSetting -SettingName "Internet" -CongestionProvider CTCP
     Set-NetTCPSetting -SettingName "Internet" -DelayedAckTimeoutMs 50
     Set-NetTCPSetting -SettingName "Internet" -ForceWS Disabled
    
     #RUN ONLY ON NATIVE2019, HV2019, VM2019
     #Disable RSS & RSC on the TCP-Stack 
     #netsh int tcp show global
     netsh int tcp set global RSS=Disabled
     netsh int tcp set global RSC=Disabled
    
     #RUN ONLY ON HV2019
     #Disable Software RSC on all vSwitches
     Get-VMSwitch | Set-VMSwitch -EnableSoftwareRsc $false
        
     #Disable vRSS on all VMs on the host
     Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE
    
  5. I’d recommend avoiding Intel 10Gbps NICs in the future. X552 and X7xx series have caused a lot of performance problems for me.