Server 2019 Hyper-V slow network file transfer due to receive segment coalescing (RSC)

What is receive segment coalescing?

Receive Segment Coalescing (RSC) is an offload technology in Windows Server and Windows 10 that can help reduce how much of the CPU is used in network processing.

RSC works by using the network interface card (NIC), which looks at the data from incoming packets and strips them before combining — or coalescing — these segments into a singular packet. The NIC will then send this coalesced packet to an application, resulting in the CPU needing to intervene much less on the receive-side. This, in turn, allows the CPU to take care of other important tasks, including increased productivity and scalability support. RSC only supports the receive-side of network traffic, so it does not affect outgoing network traffic.

To use RSC, administrators must have a network adapter card that is RSC-capable. If the organization has a virtualized environment, the NIC must also be able to support single-root I/O virtualization.

What versions of Windows is this affecting?

This issue affects Windows 10 and Windows Server 2019 (Hyper-V, GUI, Core and Nano).

RSC is not part of Windows 7 and so is not affected by this issue either as a stand-alone client or when accessing a Server 2019 via SMB.

What performance difference are we talking about?

Prior to disabling RSC on the VM
Prior to disabling RSC on the VM
With RSC disabled on the VM
With RSC disabled on the VM
With RSC disabled on the V-Switch
With RSC disabled on the V-Switch
Disable-NetAdapterRsc * effect on performance

Data write (upload) increased by roughly 6% and data read (download) by a huge 25.8%

Can I implement this fix live?

Yes, this can be done live with no adverse effects on either the Host, VM or Client machines. See the video below demonstrating running the Disable-NetAdapterRsc * on a Server 2019 server with minimal loss of pings and file transfers auto restarting.

How do I implement this fix?

To implement this fix you can run the command below in a PowerShell Admin console. This will disable RSC on all network adaptors.

Disable-NetAdapterRsc *

To disable RSC on a specific Network Card first you will need to know the name of the card which can be found by running the command below in a PowerShell Admin console.

Get-NetAdaptor

Take note of the adaptor name you wish to disable RSC on and run the command below in a PowerShell Admin console substituting NAME for the name of the adaptor to disable RSC on.

Disable-NetAdapterRsc -Name “NAME”

What about Hyper-V?

Microsoft state that’s as default RSC is set to Enabled. You can check this using the command

Get-VMSwitch -Name NAME | Select-Object *RSC*

To disable RSC on all Hyper-V switches run the below in a PowerShell Admin console.

Get-VMSwitch | Set-VMSwitch -EnableSoftwareRsc:$FALSE

Or to disable RSC on a given Hyper-V switch first find the name of the switch by running the command below in a PowerShell Admin console

Get-VmSwitch

Take note of the switch name you wish to disable RSC on and run the command below in a PowerShell Admin console substituting NAME for the name of the switch to disable RSC on.

Set-VMSwitch -Name “NAME” -EnableSoftwareRsc:$FALSE

What if I need to re-enable RSC?

Re-enabling RSC is as simple as it was to disable and again can be done with no downtime required.

If you want to re-enable RSC on your Hyper-V switch you can use the below command

Set-VMSwitch -Name “NAME” -EnableSoftwareRsc:$TRUE

And to re-enable of a network adaptor this can be achieved with

Enable-NetAdapterRsc *

If you found this article helpful, would you consider buying me a Coffee?