When hosting network-intensive virtual machines on Windows 11—such as continuous integration test runners, microservices clusters, or local file servers running on Microsoft Hyper-V—network throughput can become throttled if inbound packet processing is confined to a single virtual processor. On physical hosts, Receive Side Scaling (RSS) balances network driver interrupts across multiple CPU cores. In virtualised environments, Virtual Receive Side Scaling (vRSS) extends this multithreaded packet distribution directly into the virtual machine’s networking stack. Using PowerShell, administrators can configure vRSS on virtual machine network adapters and virtual switch ports to achieve line-rate network performance.
Understanding Virtual Receive Side Scaling (vRSS)
Traditional virtual networking paths in Hyper-V direct all inbound network traffic for a specific virtual machine network adapter through a single processing thread. Even if the guest virtual machine is allocated 4, 8, or 16 virtual CPUs, all incoming packet processing (including TCP/IP checksum calculation and protocol demultiplexing) saturates virtual CPU 0, creating a significant performance bottleneck during high-throughput workloads.
Virtual Receive Side Scaling (vRSS) resolves this limitation through a two-tiered scaling model:
- Host-Side vRSS: The Hyper-V virtual switch utilizes multiple processing cores on the physical host to process and deliver packets destined for the virtual machine.
- Guest-Side vRSS: The synthetic network driver (NetVsc) inside the virtual machine uses Receive Side Scaling (RSS) hashing to distribute incoming network streams across multiple virtual processors assigned to the guest.
Unlike hardware SR-IOV (which requires specialized physical NIC silicon and prevents features like virtual switch packet inspection), vRSS operates entirely in software on standard physical adapters, maintaining full compatibility with Hyper-V software-defined networking, port mirroring, and live checkpoints.
Verifying Virtual Switch and Network Adapter Status
Before enabling vRSS, verify that your virtual machine has more than one virtual processor allocated (vRSS requires at least 2 vCPUs to distribute traffic). Open an elevated PowerShell session (Run as Administrator) and check the processor count of your virtual machines:
Get-VM | Select-Object Name, ProcessorCount, State
Next, query the current vRSS configuration across all virtual machine network adapters:
Get-VMNetworkAdapter -All | Select-Object VMName, Name, VrssEnabled, VrssEnabledRequested
If VrssEnabled reports False, the virtual machine network adapter is currently restricted to single-thread packet delivery.
Enabling vRSS on Virtual Machine Network Adapters
You can enable vRSS on a target virtual machine network adapter using the Set-VMNetworkAdapter cmdlet. This command can be executed while the virtual machine is actively running:
Set-VMNetworkAdapter -VMName "DevServer-01" -VrssEnabled $True
To enable vRSS across all virtual machine network adapters hosted on the system simultaneously:
Get-VMNetworkAdapter -VMName * | Set-VMNetworkAdapter -VrssEnabled $True
To verify that the configuration has been committed successfully:
Get-VMNetworkAdapter -VMName "DevServer-01" | Format-List Name, VrssEnabled, VmmqEnabled
Enabling Guest-Side RSS Inside the Virtual Machine
Enabling vRSS on the host Hyper-V switch activates host-side packet distribution. For the guest operating system to distribute those packets across its own virtual processors, Receive Side Scaling must also be active inside the guest OS.
For Windows Guest Operating Systems
Open an elevated PowerShell session inside the guest virtual machine and verify adapter RSS status:
Get-NetAdapterRss
If RSS is disabled on the synthetic network interface inside the guest, enable it:
Enable-NetAdapterRss -Name "Ethernet"
To configure the number of virtual processors the guest adapter should utilise for incoming packet handling, set the maximum processor allocation:
Set-NetAdapterRss -Name "Ethernet" -MaxProcessors 4 -BaseProcessorNumber 0
For Linux Guest Operating Systems
Modern Linux distributions running on Hyper-V support vRSS via the synthetic hv_netvsc kernel driver. You can verify multi-channel queue allocation inside the Linux guest using ethtool:
sudo ethtool -l eth0
If the current queue count is lower than the available virtual CPU count, set the combined channels to match your vCPU allocation (e.g., 4 channels):
sudo ethtool -L eth0 combined 4
Monitoring vRSS Packet Processing in Real Time
To verify that network traffic is actively balancing across multiple virtual CPUs rather than saturating a single core, generate a high-bandwidth network transfer (such as an SMB file copy or iperf3 benchmark).
Inside the guest operating system, open Task Manager, navigate to the Performance tab, and select CPU. Right-click the CPU graph and choose Change graph to > Logical processors. During peak data transfers, you will observe network processing utilization distributed evenly across multiple processor graphs rather than spiking CPU 0 to 100%.
Disabling vRSS for Diagnostic Isolation
If you need to diagnose driver latency anomalies or reproduce single-threaded network behaviors during debugging, you can disable vRSS on a specific adapter:
Set-VMNetworkAdapter -VMName "DevServer-01" -VrssEnabled $False
The network adapter immediately reverts to single-queue packet delivery without interrupting existing active TCP connections.