Intel® Ethernet 800 Series Linux Flow Control
Configuration Guide for RDMA Use Cases
Example 3 - DSCP PFC with Non-Default TCs - Non-Willing Mode on Adapters, ECN Configured
This benchmarking setup using DSCP based PFC to configure two priorities: one for data and the other for ECN packets
- Non-willing mode
- Software DCB — Required to use non-willing mode.
- Priority 3 with DSCP set to 24 mapped to TC3 for data
- Priority 6 with DSCP set to 48 mapped to TC6 for ECN
Perform the following steps on both servers:
- Disable LFC (LFC and PFC cannot co-exist).
# ethtool -A <interface> rx off tx off - Verify that LFC is disabled.
# ethtool -a <interface> Pause parameters for <interface>: Autonegotiate: on RX: off TX: off RX negotiated: off TX negotiated: off - Configure the adapter for software DCB mode by disabling firmware DCB mode.
# ethtool --set-priv-flags <interface> fw-lldp-agent off - Verify that firmware DCB is disabled.
# ethtool --show-priv-flags <interface> | grep fw-lldp-agent fw-lldp-agent : off - Install OpenLLDP (the software that controls PFC and other DCB settings), if not already installed.
- RHEL:
# yum install lldpad - SLES or Ubuntu:
zypper or apt-get might work (untested) - All operating systems:
Download and build from source from https://github.com/intel/openlldp.
- RHEL:
- Start the LLDP daemon.
# lldpad -d - Verify LLDP is active by showing current LLDP settings on the interface.
These are the default llpad settings (some outputs might be different).
# lldptool -ti <interface> Chassis ID TLV MAC: 68:05:ca:a3:89:78 Port ID TLV MAC: 68:05:ca:a3:89:78 Time to Live TLV 120 IEEE 8021QAZ ETS Configuration TLV Willing: yes CBS: not supported MAX_TCS: 8 PRIO_MAP: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 TC Bandwidth: 0% 0% 0% 0% 0% 0% 0% 0% TSA_MAP: 0:strict 1:strict 2:strict 3:strict 4:strict 5:strict 6:strict 7:strict IEEE 8021QAZ PFC TLV Willing: yes MACsec Bypass Capable: no PFC capable traffic classes: 8 PFC enabled: none End of LLDPDU TLV - Plan your DSCP configuration.
Traffic Stream Lossless DSCP Prio ToS TC=Prio Bandwidth RDMA Application Yes 24 3 96 3 80% ECN Congestion Notification Yes 48 6 192 6 -- General Traffic Yes Any 0 20% Unused priorities can be mapped to any TC (no traffic is being steered to specific priorities). Leaving them mapped to TC 0 is acceptable.
- Enable DSCP of 24 (Priority 3) on TC3 in non-willing mode.
# lldptool -Ti <interface> -V PFC willing=no enabled=3 Output:
willing = no prio = 3 # lldptool -Ti <interface> -V APP app=3,5,24 Output:
0:(3,5,24) local hw (set) Note:5 is a fixed value indicating that DSCP is set to TC mapping. - Add DSCP mapping for ECN 48 on TC6 in non-willing mode.
# lldptool -Ti <interface> -V APP app=6,5,48 Output:
0:(3,5,48) local hw (set) 1:(6,5,24) local hw (set) - Enable ETS to map DSCP priority/TC3 and the ECN to priority/TC6, and to allocate 80% bandwidth to TC3 and 20% bandwidth to TC6.
Note:The following example is one command line. # lldptool -Ti <interface> -V ETS-CFG willing=no \ tsa=0:ets,1:ets,2:ets,3:strict,4:ets,5:ets,6:strict,7:ets tcbw=0,0,0,80,0,0,20,0 Output:
willing = no up2tc = 0:0,1:0,2:0,3:3,4:0,5:0,6:6,7:0 TSA = 0:ets 1:ets 2:ets 3:strict 4:ets 5:ets 6:strict 7:ets tcbw = 0% 0% 0% 80% 0% 0% 20% 0% - Verify the new settings.
# lldptool -ti <interface> Chassis ID TLV MAC: 68:05:ca:a3:89:78 Port ID TLV MAC: 68:05:ca:a3:89:78 Time to Live TLV 120 IEEE 8021QAZ ETS Configuration TLV Willing: no CBS: not supported MAX_TCS: 8 PRIO_MAP: 0:0 1:0 2:0 3:3 4:0 5:0 6:6 7:0 TC Bandwidth: 0% 0% 0% 80% 0% 0% 20% 0% TSA_MAP: 0:ets,1:ets,2:strict,3:strict,4:strict,5:strict,6:strict,7:strict IEEE 8021QAZ PFC TLV Willing: no MACsec Bypass Capable: no PFC capable traffic classes: 8 PFC enabled: 3 End of LLDPDU TLV - Set the default_roce_tos.
In this example, DSCP is set to 24 (0x18) and priority 3 so default_roce_tos is 96 (4 x DSCP value).
# mkdir /sys/kernel/config/rdma_cm/<interface> # echo 96 > /sys/kernel/config/rdma_cm/<interface>/ports/1/default_roce_tos # echo 0x706050418020100 > up_up_map - Configure ECN and add DSCP mapping for ECN.
In this example, ECN has a DSCP value of 48.
# echo 1 > roce_dcqcn_enable # echo 48 > cnp_up_override # echo 1 > up_map_enable - Repeat on other node.
- Run the application on the configured ports.