How to Configure SMB Multichannel on Windows Server 2025
Server Message Block (SMB) is the primary file-sharing protocol in Windows environments, and SMB Multichannel is one of its most impactful performance features. Introduced in SMB 3.0 and refined in subsequent versions, Multichannel allows a single SMB session to use multiple network connections simultaneously — aggregating bandwidth across NICs, providing automatic failover if one NIC or cable fails, and dramatically reducing latency when combined with RDMA (Remote Direct Memory Access) capable hardware. On Windows Server 2025, Multichannel is enabled by default and requires no manual configuration when compatible NICs are present. However, understanding how it works, how to verify it is active, and how to optimize it for high-throughput workloads is essential for any administrator managing file servers, Hyper-V storage, or SQL Server deployments that rely on SMB shares. This guide covers the full spectrum: from validating that Multichannel is active to configuring RDMA and Switch Embedded Teaming for maximum throughput.
Prerequisites
- Windows Server 2025 on both the SMB server and the SMB client
- SMB 3.x enabled (default on Windows Server 2025)
- Multiple physical NICs, or RDMA-capable NICs (iWARP, RoCE v1/v2, or InfiniBand) for SMB Direct
- NICs that support Receive Side Scaling (RSS) for standard Multichannel, or RDMA for SMB Direct
- Administrative PowerShell on both server and client
- An SMB file share already configured on the server for testing
Step 1: Verify SMB Multichannel Is Enabled
On Windows Server 2025, SMB Multichannel is enabled by default on both the client and server sides. Before making any changes, confirm the current state and understand what you are working with.
# On the SMB client — check client Multichannel setting
Get-SmbClientConfiguration | Select-Object EnableMultichannel, Multichannel*
# On the SMB server — check server Multichannel setting
Get-SmbServerConfiguration | Select-Object EnableMultichannel, Smb2*
# Expected output should show EnableMultichannel = True on both sides
# If Multichannel is disabled, enable it:
# On the client
Set-SmbClientConfiguration -EnableMultichannel $true -Confirm:$false
# On the server
Set-SmbServerConfiguration -EnableMultichannel $true -Confirm:$false
Step 2: Identify Multichannel-Capable NICs
SMB Multichannel uses NICs that support RSS (Receive Side Scaling) or RDMA. Windows automatically detects and uses these NICs. Use the following commands to inventory your NIC capabilities.
# List all network adapters and their RSS capability
Get-NetAdapter | Select-Object Name, InterfaceDescription, Speed, Status | Format-Table -AutoSize
# Check RSS support on each adapter
Get-NetAdapterRss | Select-Object Name, Enabled, NumberOfReceiveQueues, Profile | Format-Table -AutoSize
# Enable RSS if it is not already on (replace "Ethernet 2" with your adapter name)
Enable-NetAdapterRss -Name "Ethernet 2"
Set-NetAdapterRss -Name "Ethernet 2" -NumberOfReceiveQueues 4
# Check for RDMA support (for SMB Direct)
Get-NetAdapterRdma | Select-Object Name, Enabled | Format-Table -AutoSize
# List all adapters eligible for Multichannel
Get-SmbClientNetworkInterface | Select-Object InterfaceIndex, IpAddresses, Speed, RssCapable, RdmaCapable | Format-Table -AutoSize
# On the server side
Get-SmbServerNetworkInterface | Select-Object InterfaceIndex, IpAddresses, Speed, RssCapable, RdmaCapable | Format-Table -AutoSize
Step 3: Test Active Multichannel Connections
The best way to confirm Multichannel is functioning is to establish an SMB connection and inspect the resulting channels. You need an active SMB session against the server for this data to populate.
# From the SMB client, connect to the server share (or use an existing UNC path)
# Map a drive or simply access the share to create a session
net use Z: \FileServer01DataShare
# Or use New-SmbMapping
New-SmbMapping -LocalPath Z: -RemotePath \FileServer01DataShare -Persistent $false
# Now inspect the Multichannel connections
Get-SmbMultichannelConnection | Format-Table -AutoSize
# Output columns:
# ServerName, ClientNetworkInterfaceIndex, ServerNetworkInterfaceIndex,
# ClientIpAddress, ServerIpAddress, ThroughputConstraint, Selected
# Each row represents one channel in the bundle
# Multiple rows for the same session = Multichannel is active
# For more detail on current SMB sessions
Get-SmbSession | Select-Object ClientComputerName, ClientUserName, NumOpens, TransportName
# Check which constraints are limiting channel selection
Get-SmbMultichannelConstraint
# Remove constraints if present (allows all interfaces to be used)
Remove-SmbMultichannelConstraint -ServerName "FileServer01"
Step 4: Configure SMB Direct (RDMA) for Maximum Throughput
SMB Direct uses RDMA-capable NICs to transfer data directly between memory buffers on the client and server, bypassing the CPU almost entirely. This is the highest-performance configuration and is ideal for Hyper-V live migration over SMB or SQL Server on Windows Server 2025. The three RDMA technologies supported are iWARP (works over standard TCP), RoCE/RoCEv2 (Ethernet, requires lossless fabric), and InfiniBand.
# Verify RDMA adapters are present and enabled
Get-NetAdapterRdma | Format-Table Name, Enabled, MaxQueuePairCount, MaxMemoryRegionCount
# Enable RDMA on a specific adapter if not already enabled
Enable-NetAdapterRdma -Name "RDMA NIC 1"
Enable-NetAdapterRdma -Name "RDMA NIC 2"
# For RoCE, ensure Priority Flow Control (PFC) and ETS are configured
# (requires DCBX-capable switches — configured on the switch side)
# Set PFC on the adapters for traffic class 3 (SMB Direct uses DSCP 26, priority 3)
Enable-NetAdapterQos -Name "RDMA NIC 1"
$qdcb = New-NetQosDcbxSetting -Willing $false
New-NetQosPolicy -Name "SMB Direct" -PriorityValue8021Action 3 -NetDirectPortMatchCondition 445
# Apply PFC to priority 3 for lossless delivery
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
# Set minimum bandwidth for SMB Direct traffic (50% of link capacity)
Set-NetQosPolicy -Name "SMB Direct" -MinBandwidthWeightAction 50
# Confirm SMB Direct is active on a live connection
Get-SmbMultichannelConnection | Where-Object { $_.ThroughputConstraint -eq "None" } |
Select-Object ServerName, ClientIpAddress, ServerIpAddress, ThroughputConstraint
Step 5: Configure Switch Embedded Teaming for Multichannel
In Hyper-V environments, Switch Embedded Teaming (SET) is the preferred NIC teaming method because it is the only type compatible with both SR-IOV and RDMA. Traditional LBFO teaming presents a single MAC/IP to the OS, which prevents Multichannel from seeing multiple paths. SET exposes individual vNICs over a shared physical team, allowing Multichannel to use each vNIC independently.
# Remove any existing LBFO team that might block Multichannel
# WARNING: This removes network connectivity on the teamed adapters — plan for downtime
Get-NetLbfoTeam | Remove-NetLbfoTeam -Confirm:$false
# Create a SET team (requires Hyper-V Virtual Switch)
# List physical adapters to use
Get-NetAdapter -Physical | Where-Object { $_.Status -eq "Up" } | Select-Object Name, InterfaceDescription
# Create a Hyper-V Virtual Switch with SET (two physical 25GbE adapters)
New-VMSwitch -Name "SETSwitch" `
-NetAdapterName @("NIC1-25G", "NIC2-25G") `
-EnableEmbeddedTeaming $true `
-AllowManagementOS $true
# Add host vNICs for SMB traffic (one per RDMA adapter)
Add-VMNetworkAdapter -ManagementOS -Name "SMB_vNIC1" -SwitchName "SETSwitch"
Add-VMNetworkAdapter -ManagementOS -Name "SMB_vNIC2" -SwitchName "SETSwitch"
# Assign IP addresses to the SMB vNICs
New-NetIPAddress -InterfaceAlias "vEthernet (SMB_vNIC1)" -IPAddress "192.168.100.10" -PrefixLength 24
New-NetIPAddress -InterfaceAlias "vEthernet (SMB_vNIC2)" -IPAddress "192.168.100.11" -PrefixLength 24
# Map each vNIC to a specific physical adapter for affinity (RDMA passthrough)
Set-VMNetworkAdapterTeamMapping -ManagementOS -VMNetworkAdapterName "SMB_vNIC1" `
-PhysicalNetAdapterName "NIC1-25G" -SwitchName "SETSwitch"
Set-VMNetworkAdapterTeamMapping -ManagementOS -VMNetworkAdapterName "SMB_vNIC2" `
-PhysicalNetAdapterName "NIC2-25G" -SwitchName "SETSwitch"
# Enable RDMA on the host vNICs
Enable-NetAdapterRdma -Name "vEthernet (SMB_vNIC1)"
Enable-NetAdapterRdma -Name "vEthernet (SMB_vNIC2)"
# Confirm RDMA is active on the vNICs
Get-NetAdapterRdma | Select-Object Name, Enabled | Format-Table -AutoSize
Step 6: Monitor and Benchmark SMB Multichannel
After configuration, use the following commands to monitor ongoing Multichannel activity and benchmark throughput to validate that multiple channels are being utilized.
# Real-time monitoring of SMB sessions and channel usage
while ($true) {
Clear-Host
Write-Host "=== SMB Multichannel Connections ===" -ForegroundColor Cyan
Get-SmbMultichannelConnection |
Select-Object ServerName, ClientIpAddress, ServerIpAddress, Selected, ThroughputConstraint |
Format-Table -AutoSize
Write-Host "=== Server Network Interfaces ===" -ForegroundColor Cyan
Get-SmbServerNetworkInterface |
Select-Object InterfaceIndex, IpAddresses, RdmaCapable, Speed |
Format-Table -AutoSize
Start-Sleep -Seconds 5
}
# Benchmark: copy a large file and observe throughput
$source = "\FileServer01DataShareLargeTestFile.vhd"
$dest = "C:TempLargeTestFile.vhd"
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
Copy-Item -Path $source -Destination $dest
$stopwatch.Stop()
$fileSizeGB = (Get-Item $source).Length / 1GB
$throughputGBps = $fileSizeGB / $stopwatch.Elapsed.TotalSeconds
Write-Host "Throughput: $([math]::Round($throughputGBps, 2)) GB/s"
# Check for any Multichannel negotiation failures in the event log
Get-WinEvent -LogName "Microsoft-Windows-SMBClient/Operational" -MaxEvents 100 |
Where-Object { $_.Message -like "*multichannel*" -or $_.Message -like "*channel*" } |
Select-Object TimeCreated, Id, Message | Format-List
Step 7: Troubleshoot Multichannel Not Activating
# Verify that both client and server have Multichannel enabled
Invoke-Command -ComputerName "FileServer01" -ScriptBlock {
Get-SmbServerConfiguration | Select-Object EnableMultichannel
}
Get-SmbClientConfiguration | Select-Object EnableMultichannel
# Check if SMB Multichannel constraints are blocking channel selection
Get-SmbMultichannelConstraint
# If only one interface appears in Get-SmbClientNetworkInterface,
# the OS may not recognize additional NICs as RSS-capable
# Force RSS on the secondary NIC
Set-NetAdapterRss -Name "Ethernet 3" -Enabled $true -NumberOfReceiveQueues 4
# Verify no firewall rules are blocking secondary NIC traffic on port 445
Get-NetFirewallRule -DisplayGroup "File and Printer Sharing" |
Select-Object DisplayName, Enabled, Direction, Action
# Test direct TCP connectivity on 445 from client to each server IP
Test-NetConnection -ComputerName "192.168.100.10" -Port 445
Test-NetConnection -ComputerName "192.168.100.11" -Port 445
SMB Multichannel is one of the most impactful and least intrusive performance enhancements available in Windows Server 2025. Whether you are aggregating bandwidth across multiple 10GbE NICs or achieving near-wire-speed transfers with RDMA over a 25GbE or 100GbE fabric, Multichannel provides substantial gains with minimal configuration overhead. By following the steps in this guide — from verifying basic Multichannel enablement to configuring SET teaming and SMB Direct — you can ensure your file server and storage infrastructure is delivering the highest possible throughput. Ongoing monitoring through Get-SmbMultichannelConnection and the SMBClient event log will help you catch any regressions after hardware changes or Windows updates.