Home > Network, vSphere > Enable RSS (Receive Side Scaling) on Windows 2008 (R2) Virtual Machines

Enable RSS (Receive Side Scaling) on Windows 2008 (R2) Virtual Machines

A nice feature of the VMXNet3 vNIC in vSphere is Receive Side Scaling.

For detailed info, check out http://technet.microsoft.com/en-us/network/dd277646.

I’ll try to summarize it here:

Without RSS, all incoming network traffic is handled by CPU 0.  This could cause a bottleneck on high Network IO machines resulting in an overloaded CPU 0 (where CPU 1, 2, 3, … might be idle).  With RSS enabled, incoming network traffic is handled by all available CPUs.

RSS is available inside a VM on vSphere.  But, you’ll need to have the VMXNet3 adapter in your VM.

Let me show you how to enable this on a Windows 2008 R2 VM.

For starters, make sure your VM runs on Hardware Version 7.  Second, you’ll need more than one vCPU in the VM.  After all, it would be useless to enable RSS on a single vCPU machine.

image

Next, verify that the vNIC is of type VMXNET3.  If it is not, remove the current vNIC (make a note of the IP address) and add a new one of type VMXNET3.

image

That’s it for the configuration on the vSphere side.  Now we’ll have to enable it inside the VM.  We’ll use a Windows 2008 R2 machine for this, but know that RSS is available on 2003 SP2 and 2008 as well.

By default, RSS is enabled on Windows 2008 R2.  This can be checked by running the following command:

netsh int tcp show global

image

You’ll notice Receive-Side Scaling State is enabled.

Allright, so let’s test this!

To test RSS, i have 2 VM’s running iPerf.  One is the client (sender) and the other is the server (receiver).  I start iPerf with 16 concurrent threads to generate lots of network traffic.  If all goes well, we should see RSS in action on the iPerf server.

I’ll fire up perfmon.exe and monitor the % Processor Time of CPU 0 and 1.  When iPerf kicks in and receive network packets, we immediately see CPU activity:

image

Whoops, looks like CPU 0 (the red one) is doing most of the work and CPU 1 (the green one) isn’t allowed to play along…

So RSS is enabled on the Operating System, but it looks like it’s not functioning.  The fact is that RSS must be enabled on the vNIC inside the VM as well!  For that, open up Device Manager and open the Advanced Properties of the vmxnet3 Ethernet Adapter.

Look for the RSS property and set it to Enabled (it is Disabled by default).

image

Let’s rerun the iPerf test and check CPU 0 and CPU 1 in perfmon:

image

That’s more like it!  All CPUs are playing along now and we have just removed a potential bottleneck!

Bottom line:

– RSS is available on the VMXNET3 vNIC adapter

– RSS is enabled by default on Windows 2008 R2

– You have to explicitly enable RSS in Device Manager on the VMXNET3 adapter.

 

It’s up to you to enable RSS, but personally, i would enable it if you have high amounts of incoming network traffic and you see an overloaded CPU 0.

Categories: Network, vSphere
  1. sylvain
    May 24, 2012 at 15:05

    Hello,

    thanks for the advice.
    how can we activate this parameter by script ?

    thank you

    • May 24, 2012 at 15:13

      For Windows 2008 R2 run the following Invoke-VMScript. For Windows 2008 (non R2), the regkey is “HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}007”.

      $lobjVMCredential = Get-Credential
      Get-VM | Foreach-Object {Invoke-VMScript -VM $_ -ScriptText “reg add “”HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}012″” /v *RSS /t REG_SZ /d 1 /f” -GuestCredential $lobjVMCredential -WarningAction SilentlyContinue}

  2. sylvain
    May 25, 2012 at 07:24

    Hi,

    thanks for the quick replay 🙂 appreciate that.

    if I understand, just checked on win2k8 and w2k8 R2, this parameter is on the class {4D36E972-E325-11CE-BFC1-08002BE10318}.
    Inside this class, we have all network adapters and we need to parse each subfolder in it to find vmxnet3 driverDesc because in my case,.. vmxnet3 network card is located on folder 0021 in w2k8 R2 and in folder 0006 on w2k8 standard.

    Inside this folder (0006/0021), there is another one Ndi/params/RSS, do we have to create that to or the adding of *RSS parameter inside the root folder creates by itself this subfolder ?

    thanks a lot for your support !

    • May 25, 2012 at 08:07

      Best is indeed to loop those subkeys and search for “vmxnet3 Ethernet Adapter” in the DriverDesc field. Then change the *RSS field to 1.

      That should do the trick!

  3. sylvain
    May 25, 2012 at 10:27

    well,

    thank you very much again 🙂

    I need to figure out how to do that 😮

  4. Loren
    February 9, 2013 at 18:30

    This command while loop through the subkeys to find all with DriverDesc = “vmxnet3 Ethernet Adapter” and set *RSS=1:

    for /f “usebackq” %i in (`reg query HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} /f “vmxnet3 Ethernet Adapter” /d /s ^| find “HKEY”`) do reg add %i /v *RSS /t REG_SZ /d 1 /f

    Change %i to %%i if running the command inside a batch file.

  5. February 23, 2013 at 05:26

    Hello There. I found your blog using msn.

    This is an extremely well written article. I will make sure to bookmark
    it and return to read more of your useful info.
    Thanks for the post. I will definitely return.

  6. Pavan Kumar Rallabhandi
    March 3, 2013 at 13:58

    Thanks for making RSS explanation so simple. Microsoft Web makes it look quite like a monster:). Gd work.

  7. Robert
    October 9, 2013 at 07:32

    Yo can do it with powershell:
    Get-NetAdapterRss | Enable-NetAdapterRss | Set-NetAdapterRss -Profile NUMA

    (as seen here: http://blog.monitis.com/index.php/2013/01/11/performance-tuning-windows-2012-network-subsystempart-1/ )

    Regards
    Robert

  1. No trackbacks yet.

Leave a comment