How to Configure SMB Multichannel on Windows Server 2012 R2

SMB Multichannel is an SMB 3.0 feature in Windows Server 2012 R2 that enables a single SMB session to use multiple network connections simultaneously. This provides three major benefits: increased throughput by aggregating bandwidth from multiple network adapters or multiple paths, fault tolerance through automatic failover between network paths if one becomes unavailable, and reduced CPU load through automatic NIC selection and load balancing. SMB Multichannel is enabled by default on Windows Server 2012 R2 and Windows 8/8.1 — no manual configuration is required in most cases. The feature automatically detects suitable NICs and establishes parallel connections. However, understanding how to verify, monitor, and tune SMB Multichannel is essential for getting the most out of high-throughput storage workloads.

Prerequisites

SMB Multichannel operates automatically when certain conditions are met. For multiple connections: the server must have two or more network adapters with routes to the client, or NICs capable of Receive Side Scaling (RSS). For maximum benefit, use 10 GbE or faster adapters. Both the SMB client and server must run Windows 8/8.1 or Windows Server 2012/2012 R2 (SMB 3.0 dialect). SMB Multichannel is most impactful in Scale-Out File Server configurations and for Hyper-V and SQL Server workloads that involve large sequential I/O. NIC teaming and SMB Multichannel serve different purposes — they can coexist but behave differently.

Understanding SMB Multichannel Modes

SMB Multichannel can use three types of NIC configurations:

Multiple NICs: Multiple physical network adapters provide multiple network paths. SMB establishes separate connections over each adapter and distributes traffic across them. This provides both throughput aggregation and path redundancy.

RSS-capable NICs: A single NIC supporting Receive Side Scaling can handle multiple parallel RSS queues (typically equal to the number of CPU cores assigned to that NIC). SMB uses multiple connections over the same physical NIC, each pinned to a different RSS queue. This increases throughput on a single high-speed NIC by distributing processing across CPU cores.

RDMA-capable NICs (iWARP or RoCE): Remote Direct Memory Access NICs bypass CPU involvement for data transfer entirely. SMB Direct (a companion feature) uses RDMA for ultra-low latency and near-zero CPU overhead data transfers.

Step 1: Verify SMB Multichannel Is Enabled

Check that SMB Multichannel is enabled on both the server and client (it is enabled by default):

# On the SMB server
Get-SmbServerConfiguration | Select-Object EnableMultiChannel, Smb2CreditsMin, Smb2CreditsMax

# On the SMB client
Get-SmbClientConfiguration | Select-Object EnableMultiChannel

If disabled for any reason, re-enable it:

Set-SmbServerConfiguration -EnableMultiChannel $true -Confirm:$false
Set-SmbClientConfiguration -EnableMultiChannel $true -Confirm:$false

Step 2: Verify Network Adapter RSS Support

Identify which network adapters support RSS (required for SMB Multichannel on single-NIC systems):

Get-NetAdapterRss | Select-Object Name, Enabled, NumberOfReceiveQueues, MaxProcessors | Format-Table

Enable RSS on adapters where it is disabled:

Enable-NetAdapterRss -Name "Ethernet"

# Set the number of RSS queues to match logical processor count (up to 8 typically)
Set-NetAdapterRss -Name "Ethernet" -NumberOfReceiveQueues 4 -MaxProcessors 4

Step 3: Verify SMB Multichannel NIC Selection

Check which network adapters are candidates for SMB Multichannel connections:

Get-SmbMultichannelConstraint

Get-SmbMultichannelConnection | Select-Object ServerName, ClientInterfaceIndex, ServerInterfaceIndex, SelectedClientInterfaceAlias, ChannelState, CurrentBandwidth | Format-Table

If no multichannel connections appear, check the NIC capabilities:

Get-NetAdapter | Select-Object Name, LinkSpeed, MediaConnectionState, DriverInformation | Format-Table

# Check if adapters are suitable for SMB Multichannel
Get-SmbMultichannelConstraint | Format-List *

Step 4: Verify Active Multichannel Sessions

After establishing an SMB connection to a server, confirm that multiple channels are actually being used:

# Establish an SMB session by browsing or copying to a share first
# Then check active multichannel connections
Get-SmbMultichannelConnection | Format-Table *

# Check session details for number of channels
Get-SmbSession | Select-Object ClientComputerName, Dialect, TransportName, NumOpens | Format-Table

A healthy SMB Multichannel session will show multiple entries in Get-SmbMultichannelConnection, each using a different network interface pair.

Step 5: Constrain SMB Multichannel to Specific NICs

In environments with multiple NICs serving different purposes (management, storage, VM traffic), it is best practice to constrain SMB Multichannel to use only the designated storage NICs:

# Constrain SMB Multichannel to use only the 10 GbE storage adapters
New-SmbMultichannelConstraint -ServerName "FILESERVER01" -InterfaceAlias "Storage-NIC-1"
New-SmbMultichannelConstraint -ServerName "FILESERVER01" -InterfaceAlias "Storage-NIC-2"

# Verify constraints
Get-SmbMultichannelConstraint | Format-Table

Remove constraints to revert to automatic NIC selection:

Remove-SmbMultichannelConstraint -ServerName "FILESERVER01"

Step 6: Measure SMB Multichannel Throughput

Test actual throughput to verify SMB Multichannel is providing performance benefits:

# Create a large test file
$testFile = "C:Temptestfile.dat"
$bytes = New-Object byte[] (1GB)
[IO.File]::WriteAllBytes($testFile, $bytes)

# Measure copy throughput to SMB share
$start = Get-Date
Copy-Item $testFile "\FILESERVER01TestSharetestfile.dat"
$end = Get-Date
$elapsed = ($end - $start).TotalSeconds
$throughputMB = (1024 / $elapsed)
Write-Host "Throughput: $([math]::Round($throughputMB, 1)) MB/s over $elapsed seconds"

Monitor network adapter utilization during the transfer to confirm traffic distribution:

Get-NetAdapterStatistics | Select-Object Name, ReceivedBytes, SentBytes | Format-Table

Step 7: SMB Multichannel with NIC Teaming

SMB Multichannel and NIC Teaming can coexist but behave differently. NIC Teaming presents a single virtual NIC to the operating system — SMB Multichannel sees it as one interface and uses a single channel (unless the team adapter is RSS-capable). For maximum SMB performance, prefer presenting individual physical NICs directly to the OS and letting SMB Multichannel aggregate them, rather than using NIC teaming for storage traffic. If NIC teaming is required for other reasons, ensure the team interface has RSS enabled:

# Check if NIC team adapter has RSS enabled
Get-NetAdapter | Where-Object {$_.InterfaceDescription -like "*Hyper-V*" -or $_.Name -like "*Team*"} | Get-NetAdapterRss | Select-Object Name, Enabled, NumberOfReceiveQueues

Summary

SMB Multichannel is a transparent, automatically enabled feature in Windows Server 2012 R2 that significantly improves SMB 3.0 file transfer performance and availability. By establishing multiple parallel network connections across all available NIC paths, it aggregates bandwidth, distributes CPU load through RSS, and provides network path redundancy. For Hyper-V storage and Scale-Out File Server workloads, properly configured SMB Multichannel with 10 GbE or faster adapters can deliver multi-gigabit aggregate throughput without any additional licensing or third-party software.