How to Configure Windows Server 2019 DCB

Data Center Bridging (DCB) is a suite of IEEE standards that enhance standard Ethernet to provide the reliability and traffic management required by converged data center networks. DCB enables multiple traffic types — including Fibre Channel over Ethernet (FCoE), iSCSI, RDMA (RoCE), and standard Ethernet — to coexist on the same physical network links with guaranteed bandwidth, low latency, and lossless delivery. Windows Server 2019 supports DCB through the Windows Quality of Service (QoS) subsystem and NDIS 6.x network drivers.

DCB Standards Overview

DCB consists of four complementary standards: Priority-based Flow Control (PFC, IEEE 802.1Qbb) provides per-priority pause frames to create lossless lanes for specific traffic classes. Enhanced Transmission Selection (ETS, IEEE 802.1Qaz) allows bandwidth to be allocated as percentages to each traffic class. Quantized Congestion Notification (QCN, IEEE 802.1Qau) provides end-to-end congestion management. DCB eXchange Protocol (DCBX, IEEE 802.1AB) allows network adapters to discover and negotiate DCB capabilities with adjacent switches.

Installing DCB Feature on Windows Server 2019

# Install the Data Center Bridging feature
Install-WindowsFeature -Name "Data-Center-Bridging" -IncludeManagementTools

# Verify installation
Get-WindowsFeature -Name "Data-Center-Bridging" | Select-Object Name, InstallState

# Import the NetQos module
Import-Module NetQos

Configuring QoS Policies for Traffic Classification

QoS policies tag specific traffic types with IEEE 802.1p priority values. Create policies for each traffic class in your environment:

# Create QoS policy for SMB Direct (RDMA) traffic - priority 3
New-NetQosPolicy -Name "SMBDirect" -SMB -PriorityValue8021Action 3

# Create QoS policy for FCoE traffic - priority 3 (or as required by SAN vendor)
New-NetQosPolicy -Name "FCoE" -NetDirectPort 3260 -PriorityValue8021Action 3

# Create QoS policy for cluster heartbeat traffic - priority 7
New-NetQosPolicy -Name "ClusterHeartbeat" -Cluster -PriorityValue8021Action 7

# Create QoS policy for iSCSI traffic
New-NetQosPolicy -Name "iSCSI" -IPProtocol TCP -IPDstPortStart 3260 -IPDstPortEnd 3260 -PriorityValue8021Action 4

# Create QoS policy for management traffic - priority 6
New-NetQosPolicy -Name "Management" -IPProtocol TCP -PriorityValue8021Action 6

# Default traffic policy (priority 0)
New-NetQosPolicy -Name "Default" -Default -PriorityValue8021Action 0

# View all policies
Get-NetQosPolicy | Select-Object Name, PriorityValue, NetworkProfile | Format-Table -AutoSize

Configuring Priority Flow Control

# Enable PFC for specific priorities (must match switch configuration)
# Priority 3: RDMA/SMBDirect (lossless)
# Priority 4: iSCSI (lossless)
Enable-NetQosFlowControl -Priority 3
Enable-NetQosFlowControl -Priority 4

# Disable PFC on all other priorities to prevent head-of-line blocking
Disable-NetQosFlowControl -Priority 0,1,2,5,6,7

# Verify PFC configuration
Get-NetQosFlowControl | Select-Object Priority, Enabled | Format-Table -AutoSize

Configuring Enhanced Transmission Selection

# Create traffic classes with bandwidth allocations
# Priority 3 (RDMA): 50% bandwidth
New-NetQosTrafficClass -Name "RDMA-Class" `
  -Priority 3 `
  -BandwidthPercentage 50 `
  -Algorithm ETS

# Priority 4 (iSCSI): 20% bandwidth
New-NetQosTrafficClass -Name "iSCSI-Class" `
  -Priority 4 `
  -BandwidthPercentage 20 `
  -Algorithm ETS

# Priority 7 (Cluster): 2% bandwidth  
New-NetQosTrafficClass -Name "Cluster-Class" `
  -Priority 7 `
  -BandwidthPercentage 2 `
  -Algorithm ETS

# Remaining 28% goes to default (priority 0)
# The sum of all BandwidthPercentage values must equal 100

# Verify traffic classes
Get-NetQosTrafficClass | Select-Object Name, Priority, BandwidthPercentage, Algorithm | Format-Table

Configuring DCBX (DCB Exchange Protocol)

# Configure whether Windows should accept DCB settings from the connected switch
# Willing = $true means the adapter will accept switch-pushed configuration
# Willing = $false means Windows controls DCB settings (recommended for consistency)
Set-NetQosDcbxSetting -Willing $false

# Apply DCB settings to specific adapters
Enable-NetAdapterQos -Name "SLOT 3 Port 1"
Enable-NetAdapterQos -Name "SLOT 3 Port 2"

# Verify DCB is enabled on the adapter
Get-NetAdapterQos | Select-Object Name, Enabled | Format-Table -AutoSize

# Check DCBX operational state
Get-NetQosDcbxSetting | Select-Object Willing, Version

Verifying DCB Configuration

# Comprehensive DCB status check
Write-Output "=== QoS Policies ==="
Get-NetQosPolicy | Select-Object Name, PriorityValue | Format-Table

Write-Output "=== Priority Flow Control ==="
Get-NetQosFlowControl | Select-Object Priority, Enabled | Format-Table

Write-Output "=== Traffic Classes ==="
Get-NetQosTrafficClass | Select-Object Name, Priority, BandwidthPercentage, Algorithm | Format-Table

Write-Output "=== Adapter QoS Status ==="
Get-NetAdapterQos | Select-Object Name, Enabled | Format-Table

Write-Output "=== DCBX Settings ==="
Get-NetQosDcbxSetting

# Validate RDMA is operational after DCB configuration
Get-NetAdapterRdma | Select-Object Name, Enabled, OperationalState

Exporting and Replicating DCB Configuration

# Export current DCB configuration to script for replication to other nodes
$dcbConfig = @"
# DCB Configuration - Generated $(Get-Date)
# Apply to all converged NIC hosts

# QoS Policies
$(Get-NetQosPolicy | ForEach-Object { "New-NetQosPolicy -Name '$($_.Name)' -PriorityValue8021Action $($_.PriorityValue) -Default" })

# PFC
Enable-NetQosFlowControl -Priority 3,4
Disable-NetQosFlowControl -Priority 0,1,2,5,6,7

# Traffic Classes
$(Get-NetQosTrafficClass | ForEach-Object { "New-NetQosTrafficClass -Name '$($_.Name)' -Priority $($_.Priority) -BandwidthPercentage $($_.BandwidthPercentage) -Algorithm ETS" })

# DCBX
Set-NetQosDcbxSetting -Willing `$false

# Enable QoS on adapters
Enable-NetAdapterQos -Name 'SLOT 3 Port 1'
Enable-NetAdapterQos -Name 'SLOT 3 Port 2'
"@
$dcbConfig | Out-File "C:ConfigDCBConfig.ps1"
Write-Output "DCB configuration exported to C:ConfigDCBConfig.ps1"

DCB configuration must be consistent across all nodes in a cluster and must match the switch configuration. Always coordinate DCB settings with your network team before implementing in production. Mismatched PFC priorities between the switch and host adapters can cause packet drops or deadlocks. After configuring DCB, validate the configuration using the SMB Direct connectivity test and performance testing with disk I/O tools to confirm lossless operation.