Windows OS Hub
  • Windows Server
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Windows Server 2008 R2
    • SCCM
  • Active Directory
    • Active Directory Domain Services (AD DS)
    • Group Policies
  • Windows Clients
    • Windows 11
    • Windows 10
    • Windows 8
    • Windows 7
    • Windows XP
    • MS Office
    • Outlook
  • Virtualization
    • VMWare
    • Hyper-V
    • KVM
  • PowerShell
  • Exchange
  • Cloud
    • Azure
    • Microsoft 365
    • Office 365
  • Linux
    • CentOS
    • RHEL
    • Ubuntu
  • Home
  • About

Windows OS Hub

  • Windows Server
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Windows Server 2008 R2
    • SCCM
  • Active Directory
    • Active Directory Domain Services (AD DS)
    • Group Policies
  • Windows Clients
    • Windows 11
    • Windows 10
    • Windows 8
    • Windows 7
    • Windows XP
    • MS Office
    • Outlook
  • Virtualization
    • VMWare
    • Hyper-V
    • KVM
  • PowerShell
  • Exchange
  • Cloud
    • Azure
    • Microsoft 365
    • Office 365
  • Linux
    • CentOS
    • RHEL
    • Ubuntu

 Windows OS Hub / Virtualization / Hyper-V / Poor Network Performance on Hyper-V VMs in Windows Server 2019

January 20, 2022 Hyper-VPowerShellVirtualizationWindows Server 2016Windows Server 2019

Poor Network Performance on Hyper-V VMs in Windows Server 2019

Several times I came across a situation when files were copied much slower from/to virtual machines on a Hyper-V host running Windows Server 2019 than in a VM of the same configuration on a host running Windows Server 2016. In some tests, the read/write speed over the network to VM on Windows Server 2019 is almost three times lower than that on WS2016 (copying over SMB, SSH/SCP was tested). In this article, I tried to describe several different methods to improve the network performance of Hyper-V virtual machines running on Windows Server 2019 (and the latest Windows 10 and 11 builds).

Receive Segment Coalescing (RSC) in the Hyper-V vSwitch

First of all, you should note the Receive Segment Coalescing (RSC) feature that appeared in Hyper-V on Windows Server 2019/2022 (and Windows 10 1809+). The Receive Segment Coalescing is used at the virtual switch level (vSwitch). RSC allows to reduce CPU load and increase network throughput by combining multiple TCP segments into larger ones. Network performance is improved because large segments are processed faster than many smaller ones.

In previous Hyper-V versions (Windows Server 2016/2012R2), only hardware Receive Segment Coalescing mode was supported at the NIC level.

If RSC support is enabled, it may result in extra network delay in some hardware configurations.

The issue occurs both in Windows Server 2019 Full GUI versions and in free Windows Hyper-V Server.

By default, RSC is enabled for all external vSwitches on Windows Server 2019.

You can check if RSC is enabled for virtual switches using the command:

Get-VMSwitch | Select-Object *RSC*

You can disable using RSC for IPv4 traffic on the client network adapter using the following command:

Disable-NetAdapterRsc -Name "Ethernet" -IPv4

Check if the copy speed in a Hyper-V VM has increased after disabling RSC. If the network speed has improved, you can disable RSC on the virtual switch the VM is connected to.

You can check your network throughput using the iperf tool.

To disable software RSC for a specific virtual switch, run the command:

Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $false

check if RSC is enable on hyper-v switch

You can enable/disable RSC on the fly, it won’t affect any active connections.

Or you can completely disable RSC on your Windows host:

netsh int tcp set global rsc=disabled

Virtual Machine Queue (VMQ) Mode in Network Adapter Driver

In some cases, if VMQ (Virtual Machine Queue) is enabled in a network adapter driver of a physical Hyper-V host, it may result in poor network performance in Hyper-V virtual machines. VMQ is a hardware feature and if it is not supported by your hardware but enabled in the driver, it can result in packet loss and increased network latency. The problem is typical to Broadcom Gigabit network adapters and occurs in all Hyper-V versions (Windows Server 2012 R2/2016/2019).

VMQ is designed to improve network performance by directly forwarding packets from a physical network adapter to virtual machines.

You can disable VMQ in the properties of your network adapter driver.

disable VMQ (Virtual Machine Queue) in NIC driver settings

Or you can display a list of network adapters with VMQ support and their status using PowerShell:

Get-NetAdapterVmq

To disable VMQ for a specific NIC, run the command below (the network adapter will be unavailable for a couple of seconds):

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

check if vmq is enabled in NIC - powershell

After disabling VMQ, it is better to restart the host and check the network performance.

Make sure that QoS bandwidth limit policies are disabled in Windows.

Optimize TCP Settings for Hyper-V on Windows Server 2019

Save the current TCP settings on your Hyper-V host and apply new settings that will make TCP settings in Windows Server 2019 almost similar to those of Windows Server 2016.

Save the current settings:

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

By default in Windows Server 2019 and Windows 10 1709+, the CUBIC implementation of TCP is used. This algorithm is optimized for high-speed networks with high latency (it is also used by default in Linux kernel 2.6.19 and newer).

Windows TCP stack on Windows Server 2019 based on CUBIC

Apply the following settings only in Windows Server 2019 or Hyper-V 2019.

Apply new NetTCP settings for LAN:

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

For WAN:

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

Disable network RSS and RSC network optimization methods at the TCP stack level:

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

or on the NIC level:

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

Disable vRSS for all VMs:

Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE

Disable Large Send Offload (LSO) on 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

You can also disable these options in the Advanced tab of your network adapter properties:

  • Recv Segment Coalescing (IPv4/IPv6) = Disabled
  • Large Send Offload V2 (IPv4/IPv6) = Disabled

disable recv segment coalescing on hyper-v

These TCP stack settings will make Windows Server 2019 network protocol settings similar to those of previous Windows Server versions.

5 comments
4
Facebook Twitter Google + Pinterest
previous post
Enter-PSSession: Running Remote Commands in Interactive Shell
next post
Configuring KMS License Server for Office 2021/2019/2016 Volume Activation

Related Reading

Recovering Files from BitLocker Encrypted Drive

June 1, 2023

Microsoft Key Management Service (KMS) Volume Activation FAQs

May 31, 2023

Configuring Event Viewer Log Size on Windows

May 24, 2023

How to Detect Who Changed the File/Folder NTFS...

May 24, 2023

Enable Single Sign-On (SSO) Authentication on RDS Windows...

May 23, 2023

Categories

  • Active Directory
  • Group Policies
  • Exchange Server
  • Microsoft 365
  • Azure
  • Windows 11
  • Windows 10
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • PowerShell
  • VMWare
  • Hyper-V
  • Linux
  • MS Office

Recent Posts

  • Recovering Files from BitLocker Encrypted Drive

    June 1, 2023
  • Microsoft Key Management Service (KMS) Volume Activation FAQs

    May 31, 2023
  • Configuring Event Viewer Log Size on Windows

    May 24, 2023
  • How to Detect Who Changed the File/Folder NTFS Permissions on Windows?

    May 24, 2023
  • Enable Single Sign-On (SSO) Authentication on RDS Windows Server

    May 23, 2023
  • Allow Non-admin Users RDP Access to Windows Server

    May 22, 2023
  • How to Create, Change, and Remove Local Users or Groups with PowerShell?

    May 17, 2023
  • Fix: BSOD Error 0x0000007B (INACCESSABLE_BOOT_DEVICE) on Windows

    May 16, 2023
  • View Success and Failed Local Logon Attempts on Windows

    May 2, 2023
  • Fix: “Something Went Wrong” Error When Installing Teams

    May 2, 2023

Follow us

  • Facebook
  • Twitter
  • RSS
Popular Posts
  • Hyper-V Virtual Machine Stuck in Stopping/Starting State
  • How to Install and Configure Free Hyper-V Server 2019/2016?
  • How to Install Windows 11 on a Hyper-V Virtual Machine?
  • USB Device Passthrough (Redirect) to Hyper-V Virtual Machine
  • Windows Cannot Find the Microsoft Software License Terms
  • How to Install VMWare ESXi in a Hyper-V Virtual Machine?
  • Import, Export and Clone Virtual Machines in Hyper-V
Footer Logo

@2014 - 2023 - Windows OS Hub. All about operating systems for sysadmins


Back To Top