Windows Server 2012 File Server Tip: Make sure your network interfaces are RSS-capable

The new SMB Multichannel feature improves performance for network interfaces by using multiple TCP connections for a single network interface automatically. SMB will only do this if your network interface reports itself as RSS-capable, which means it can use Receive Side Scaling. You can check that with the Get-SmbServerNetworkInterface or the Get-SmbClientNetworkInterface PowerShell cmdlets. See below:

image

Without this capability being present on the NIC, using additional TCP connections is not helpful, so SMB will only use a single connection, as it did in previous versions. Virtually all server-class network interfaces should report themselves as RSS-capable these days, but some desktop-class NICs might still say they don’t support RSS. I’ve also seen a few cases where an old driver or a misconfiguration might lead even a 10GbE NIC to report itself as non-RSS-capable. Another possibility is that the NIC reports itself as RSS-capable but with only one queue, which effective means that using multiple connections will not help. Those NICs are treated by SMB as non-RSS capable, even if they are reported as RSS-capable by the networking stack. You can verify that using the Get-NetAdapterRSS cmdlet. See below:

image

In the example above, we have four adapters. Two RDMA adapters that are also RDMA capable, one 1Gbps adapter and a 100Mbps. One of the two RDMA adapters have no cable connected (see status showing as “Not Present”). The 100Mbps adapter is an old one that does not support RSS. The 1GbE adapter supports RSS, but only offers 1 queue, so SMB treats it as non-RSS.

SMB will always prefer RDMA-capable NICs, then RSS-capable NICs and then all other NICs. In general that works fine, but in certain configuration it can lead to unexpected behavior. For instance, SMB might prefer a 1GbE NIC over a 10GbE NIC if the 10GbE is reported as non-RSS and the 1GbE NIC reports RSS support. In this case, first confirm that the 10GbE has the latest drivers (you might want to check Windows  Update or the manufacturer’s web site). Also, you want to make sure that the NIC configuration wasn’t changed to disable RSS. This can be done using PowerShell cmdlets (Enable-NetAdapterRss and Disable-NetAdapterRss) and is also commonly found under the advanced properties pages for the NIC. See below:

image

Getting the right type of NIC with the right RSS-capable driver is always your best choice. However, if you really can’t make your preferred NIC show up as RSS-capable, you might need to take some more drastic measures like configuring SMB Multichannel Constraints or disabling RSS on the other NICs.

For more information about SMB Multichannel, see The basics of SMB Multichannel, a feature of Windows Server 2012 and SMB 3.0.