How to Configure and Optimize Receive Side Scaling (RSS) in Windows 11 Using PowerShell

On modern multi-gigabit and 10GbE network interfaces, processing incoming network packets can saturate a single central processing unit (CPU) core, creating severe network bottlenecks, packet drops, and high DPC (Deferred Procedure Call) latency. Receive Side Scaling (RSS) enables the network hardware and Windows 11 kernel to distribute network receive processing across multiple logical CPU cores simultaneously. Using the NetAdapter module in PowerShell, system administrators and performance engineers can audit, tune, and assign RSS processor rings, base core offsets, and NUMA node alignments to maximize network throughput.

Understanding Receive Side Scaling Architecture

Without RSS, a network interface card (NIC) directs all incoming packet interrupts and subsequent protocol stack processing to a single CPU core (typically CPU 0). Under heavy workloads—such as high-speed file transfers, virtualization, database clustering, or live streaming—this single core reaches 100% utilization while adjacent cores remain idle.

RSS resolves this problem by calculating a hash across the header fields of incoming IP packets (such as source/destination IP addresses and TCP/UDP port pairs). The NIC compares this hash value against an internal indirection table to assign the packet to a specific hardware receive queue, dispatching its interrupt to a designated logical CPU core. This guarantees that traffic belonging to a single TCP connection is processed sequentially on the same core (preventing packet reordering) while distributing distinct connections across available CPU resources.

Auditing Current RSS Configuration on Network Adapters

To inspect whether RSS is enabled and examine its current processor allocation, launch an elevated PowerShell prompt by right-clicking Start and selecting Terminal (Admin).

Execute the Get-NetAdapterRss cmdlet:

Get-NetAdapterRss | Format-Table Name, Enabled, BaseProcessorNumber, MaxProcessorNumber, NumberOfReceiveQueues, Profile

The resulting table reveals key diagnostic properties:

  • Enabled: Indicates whether hardware RSS processing is active.
  • BaseProcessorNumber: The lowest logical CPU core index allocated to the RSS ring.
  • MaxProcessorNumber: The highest logical CPU core index eligible for RSS processing.
  • NumberOfReceiveQueues: The number of independent hardware queues negotiated with the adapter driver (e.g., 2, 4, 8, or 16).
  • Profile: The processor steering algorithm (such as NUMAScaling, Closest, or Conservative).

Enabling Receive Side Scaling on an Adapter

If Get-NetAdapterRss reports that an adapter has RSS disabled or if a driver update reset the setting, enable it using Enable-NetAdapterRss:

Enable-NetAdapterRss -Name "Ethernet"

To verify that global RSS support is permitted across the entire TCP/IP stack, check the global network offload settings:

Get-NetOffloadGlobalSetting | Select-Object ReceiveSideScaling

If it is set to disabled globally, activate it immediately:

Set-NetOffloadGlobalSetting -ReceiveSideScaling Enabled

Configuring Base Processor Offsets to Avoid Core 0

In Windows 11, CPU core 0 frequently handles system interrupt storms, GPU scheduling, and kernel housekeeping. Allocating heavy network receive queues to core 0 can induce micro-stuttering and latency spikes in latency-sensitive applications.

To configure your network adapter to bypass core 0 and utilize cores starting from index 1 or 2, use the Set-NetAdapterRss cmdlet with the -BaseProcessorNumber parameter:

Set-NetAdapterRss -Name "Ethernet" -BaseProcessorNumber 2 -MaxProcessors 4

In this example, the network adapter avoids CPU 0 and CPU 1 completely, distributing packet interrupts across CPU cores 2, 3, 4, and 5.

Selecting the Optimal RSS Steering Profile

Windows 11 supports multiple algorithmic profiles that govern how the kernel shifts receive queues across cores in response to load fluctuations:

  • Closest: Default profile for client operating systems. Assigns processing to the processor closest to the interrupting device.
  • ClosestStatic: Assigns base processors statically without dynamic rebalancing.
  • NUMAScaling: Ideal for multi-socket servers or high-core AMD Threadripper/EPYC systems. Distributes traffic across NUMA nodes dynamically.
  • Conservative: Attempts to consolidate packet processing onto the fewest cores possible to conserve power and reduce cache thrashing.

For high-throughput, low-latency workstations, applying the ClosestStatic or NUMAScaling profile ensures consistent core predictability:

Set-NetAdapterRss -Name "Ethernet" -Profile ClosestStatic

Adjusting Hardware Receive Queues for Multi-Core Workstations

Modern 2.5GbE, 5GbE, and 10GbE network adapters support multiple hardware queues. By matching the number of receive queues to your available physical CPU cores, you eliminate queue serialization bottlenecks.

To configure the adapter to allocate 8 hardware receive queues, execute:

Set-NetAdapterRss -Name "Ethernet" -NumberOfReceiveQueues 8

Note that the number of supported queues depends on the physical controller hardware and driver architecture (for example, Intel I225-V/I226-V, Realtek 8125, or Aquantia AQC113).

Verifying Real-Time RSS Core Distribution

To confirm that network receive processing is actively distributed across the configured CPU cores during a high-speed file transfer or stress test, use the built-in Performance Monitor (perfmon.msc) or query processor DPC counters in PowerShell:

Get-Counter "\Processor(*)\% DPC Time"

Under heavy network load, multiple processor instances will reflect balanced DPC activity rather than one isolated core maxing out at 100%, confirming that Receive Side Scaling is successfully accelerating your Windows 11 networking stack.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.