How to Configure Windows Server 2016 SMB Direct

SMB Direct is a feature of the Server Message Block (SMB) protocol that takes advantage of network adapters with Remote Direct Memory Access (RDMA) capabilities. RDMA allows data to be transferred directly between the memory of two computers over a network without involving the CPU, resulting in significantly lower latency, higher throughput, and reduced CPU utilization. Windows Server 2016 supports SMB Direct over RDMA-capable network adapters including InfiniBand, iWARP, and RoCE (RDMA over Converged Ethernet) adapters. This guide explains how to configure and verify SMB Direct on Windows Server 2016.

Benefits of SMB Direct

SMB Direct provides several significant benefits for enterprise storage and virtualization workloads. It delivers near wire-speed performance by bypassing the normal TCP/IP network stack and transferring data directly into application memory. CPU utilization is dramatically reduced during large file transfers, freeing CPU cycles for other workloads. Latency is minimized because data transfers bypass the operating system’s network stack. SMB Direct is particularly beneficial for Hyper-V live migration, SQL Server database files stored on SMB shares, scale-out file server workloads, and any high-throughput storage application.

Prerequisites for SMB Direct

To use SMB Direct, both the server and client must have RDMA-capable network adapters installed. Supported adapter types include InfiniBand adapters using OpenFabrics drivers, iWARP adapters from vendors such as Chelsio and Intel, and RoCE adapters from vendors such as Mellanox. The operating system must be Windows Server 2012 or later (Windows Server 2016 is recommended). Both endpoints must support the same RDMA transport. Ensure that appropriate network adapter drivers supporting RDMA are installed and up to date on both server and client.

Verifying RDMA Adapter Installation

Verify that RDMA-capable adapters are recognized by the operating system. Open PowerShell with administrative privileges and check for RDMA adapters:

Get-NetAdapterRdma

This command lists all network adapters and whether RDMA is enabled on each. An Enabled value of True confirms the adapter supports RDMA. To view detailed adapter properties:

Get-NetAdapterRdma | Select-Object Name, InterfaceDescription, Enabled

To verify RDMA capabilities using the RDMA-specific information:

Get-NetAdapterHardwareInfo | Where-Object {$_.BusType -eq "PCI"}

Enabling RDMA on a Network Adapter

If RDMA is disabled on a capable adapter, enable it with PowerShell. First identify the adapter name using Get-NetAdapterRdma, then enable RDMA:

Enable-NetAdapterRdma -Name "Ethernet1"

Verify RDMA is now enabled:

Get-NetAdapterRdma -Name "Ethernet1"

Verifying SMB Direct is Enabled

SMB Direct is enabled by default on Windows Server 2016 when RDMA adapters are present. To confirm SMB Direct is operational, check the SMB server configuration:

Get-SmbServerConfiguration | Select-Object EnableSMBDirect

If EnableSMBDirect is True, SMB Direct is active. To verify on the client side:

Get-SmbClientConfiguration | Select-Object EnableSMBDirect

Disabling and Re-enabling SMB Direct

For testing purposes, you may want to disable SMB Direct to measure the performance difference with standard SMB. To disable SMB Direct on the server:

Set-SmbServerConfiguration -EnableSMBDirect $false -Confirm:$false

To re-enable it:

Set-SmbServerConfiguration -EnableSMBDirect $true -Confirm:$false

Testing SMB Direct Performance

Measure the impact of SMB Direct by comparing file transfer times with and without RDMA. A simple test is to copy a large file to an SMB share and record the duration. First, verify SMB connections are using RDMA by checking active SMB Direct connections:

Get-SmbConnection | Select-Object ServerName, ShareName, SmbInstance, Dialect, NumOpens

To see detailed SMB Direct transport information for active connections:

Get-SmbMultichannelConnection | Select-Object ServerName, ClientIpAddress, ServerIpAddress, TransportName, SmbInstance

Configuring SMB Direct with RoCE Adapters

For RoCE adapters, additional configuration may be required at the network switch level to enable Priority Flow Control (PFC) and DSCP-based QoS. PFC prevents packet loss in lossy Ethernet networks, which is critical for reliable RDMA operation. Configure PFC on the adapter:

Enable-NetAdapterQos -Name "Ethernet1"

Set the RDMA traffic priority using Data Center Bridging Exchange (DCBX):

New-NetQosPolicy -Name "SMB_Direct_Policy" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3

Monitoring SMB Direct Connections

Monitor SMB Direct connections and performance using built-in performance counters. Access Performance Monitor and add counters from the SMB Direct Connection and SMB Direct Requests categories to track RDMA usage, byte counts, and request rates. Use PowerShell to get a snapshot of SMB session information:

Get-SmbSession | Select-Object ClientComputerName, ClientUserName, NumOpens, TransportName

Best Practices for SMB Direct

Use dedicated physical network adapters for SMB Direct traffic to prevent interference with management and production network traffic. Ensure all switches in the data path support the required features for your RDMA type, particularly PFC for RoCE deployments. Keep RDMA adapter drivers updated to the latest stable version from the hardware vendor. Use SMB Multichannel in conjunction with SMB Direct to aggregate bandwidth across multiple RDMA adapters. Test SMB Direct throughput after any hardware or driver changes to confirm continued RDMA operation. Consider using RDMA-capable adapters for Hyper-V live migration to significantly reduce migration times and minimize guest downtime.

SMB Direct with RDMA-capable network adapters on Windows Server 2016 unlocks storage performance previously achievable only with expensive specialized storage networks, making it a compelling option for demanding enterprise workloads that require high throughput and low latency access to SMB-based storage.