RSS doesn't work for Mellanox ConnectX-6 DX

Hi,

While testing dpdk(v19.11.10) application we noticed that nic card didn’t update mbuf.hash.rss value despite the fact that rxmode.mq_mode = ETH_MQ_RX_RSS_FLAG was set.

Is there any other way to enable RSS on the card ?

here is additional info :

DPDK RSS offload enable code:

static struct rte_eth_conf port_conf = {

.rxmode = {

.mq_mode = ETH_MQ_RX_RSS | ETH_MQ_RX_RSS_FLAG,

.max_rx_pkt_len = RTE_ETHER_MAX_LEN,

.offloads = DEV_RX_OFFLOAD_RSS_HASH,

},

.rx_adv_conf = {

.rss_conf = {

.rss_key = NULL

.rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP,

},

},

.txmode = {

.mq_mode = ETH_MQ_TX_NONE,

.offloads = DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM,

},

};

Card firmware:

flint -d /dev/mst/mt4125_pciconf0 query

Image type: FS4

FW Version: 22.32.1010

FW Release Date: 1.12.2021

Product Version: 22.32.1010

Rom Info: type=UEFI version=14.25.17 cpu=AMD64,AARCH64

type=PXE version=3.6.502 cpu=AMD64

Description: UID GuidsNumber

Base GUID: 08c0eb030059cd20 4

Base MAC: 08c0eb59cd20 4

Image VSD: N/A

Device VSD: N/A

PSID: MT_0000000359

Security Attributes: N/A

lspci output:

07:00.0 Ethernet controller [0200]: Mellanox Technologies MT28841 [15b3:101d]

Subsystem: Mellanox Technologies MT28841 [15b3:0016]

Physical Slot: 2

Flags: bus master, fast devsel, latency 0, IRQ 93, NUMA node 0

Memory at f4000000 (64-bit, prefetchable) [size=32M]

[virtual] Expansion ROM at ec100000 [disabled] [size=1M]

Capabilities: [60] Express Endpoint, MSI 00

Capabilities: [48] Vital Product Data

Capabilities: [9c] MSI-X: Enable+ Count=64 Masked-

Capabilities: [c0] Vendor Specific Information: Len=18 <?>

Capabilities: [40] Power Management version 3

Capabilities: [100] Advanced Error Reporting

Capabilities: [150] Alternative Routing-ID Interpretation (ARI)

Capabilities: [180] Single Root I/O Virtualization (SR-IOV)

Capabilities: [1c0] #19

Capabilities: [230] Access Control Services

Capabilities: [320] #27

Capabilities: [370] #26

Capabilities: [420] #25

Kernel driver in use: mlx5_core

Kernel modules: mlx5_core

07:00.1 Ethernet controller [0200]: Mellanox Technologies MT28841 [15b3:101d]

Subsystem: Mellanox Technologies MT28841 [15b3:0016]

Physical Slot: 2

Flags: bus master, fast devsel, latency 0, IRQ 112, NUMA node 0

Memory at f2000000 (64-bit, prefetchable) [size=32M]

[virtual] Expansion ROM at eca00000 [disabled] [size=1M]

Capabilities: [60] Express Endpoint, MSI 00

Capabilities: [48] Vital Product Data

Capabilities: [9c] MSI-X: Enable+ Count=64 Masked-

Capabilities: [c0] Vendor Specific Information: Len=18 <?>

Capabilities: [40] Power Management version 3

Capabilities: [100] Advanced Error Reporting

Capabilities: [150] Alternative Routing-ID Interpretation (ARI)

Capabilities: [180] Single Root I/O Virtualization (SR-IOV)

Capabilities: [230] Access Control Services

Capabilities: [420] #25

Kernel driver in use: mlx5_core

Kernel modules: mlx5_core

ethtool output:

ethtool -k ens2f0

Features for ens2f0:

rx-checksumming: on

tx-checksumming: on

tx-checksum-ipv4: off [fixed]

tx-checksum-ip-generic: on

tx-checksum-ipv6: off [fixed]

tx-checksum-fcoe-crc: off [fixed]

tx-checksum-sctp: off [fixed]

scatter-gather: on

tx-scatter-gather: on

tx-scatter-gather-fraglist: off [fixed]

tcp-segmentation-offload: on

tx-tcp-segmentation: on

tx-tcp-ecn-segmentation: off [fixed]

tx-tcp-mangleid-segmentation: off

tx-tcp6-segmentation: on

udp-fragmentation-offload: off

generic-segmentation-offload: on

generic-receive-offload: on

large-receive-offload: off

rx-vlan-offload: on

tx-vlan-offload: on

ntuple-filters: off

receive-hashing: on

highdma: on [fixed]

rx-vlan-filter: on

vlan-challenged: off [fixed]

tx-lockless: off [fixed]

netns-local: off [fixed]

tx-gso-robust: off [fixed]

tx-fcoe-segmentation: off [fixed]

tx-gre-segmentation: on

tx-gre-csum-segmentation: off [fixed]

tx-ipxip4-segmentation: on

tx-ipxip6-segmentation: on

tx-udp_tnl-segmentation: on

tx-udp_tnl-csum-segmentation: off [fixed]

tx-gso-partial: on

tx-sctp-segmentation: off [fixed]

tx-esp-segmentation: off [fixed]

fcoe-mtu: off [fixed]

tx-nocache-copy: off

loopback: off [fixed]

rx-fcs: off

rx-all: off

tx-vlan-stag-hw-insert: on

rx-vlan-stag-hw-parse: off [fixed]

rx-vlan-stag-filter: on [fixed]

l2-fwd-offload: off [fixed]

hw-tc-offload: off

esp-hw-offload: off [fixed]

esp-tx-csum-hw-offload: off [fixed]

rx-udp_tunnel-port-offload: on

linux kernel:

4.15.0-109-generic

Thanks in advance,

Tigran Martirosyan

Hi Tigran,

ConnectX-6 Dx supports RSS. PMD supports RSS on standard 5tuple:

(source IP address, source port, destination IP address, destination port, transport protocol)

You can check that with testpmd, RSS over udp / tcp ports.

In general, these macros are supported:

#define ETH_RSS_IP ( \

ETH_RSS_IPV4 | \

ETH_RSS_FRAG_IPV4 | \

ETH_RSS_NONFRAG_IPV4_OTHER | \

ETH_RSS_IPV6 | \

ETH_RSS_FRAG_IPV6 | \

ETH_RSS_NONFRAG_IPV6_OTHER | \

ETH_RSS_IPV6_EX)

#define ETH_RSS_UDP ( \

ETH_RSS_NONFRAG_IPV4_UDP | \

ETH_RSS_NONFRAG_IPV6_UDP | \

ETH_RSS_IPV6_UDP_EX)

#define ETH_RSS_TCP ( \

ETH_RSS_NONFRAG_IPV4_TCP | \

ETH_RSS_NONFRAG_IPV6_TCP | \

ETH_RSS_IPV6_TCP_EX)

Another option is to move RSS to rte_flow, as described here:

https://doc.dpdk.org/dts/test_plans/rss_to_rte_flow_test_plan.html

Thanks,

Chen

Hi Chen,

Do you have any example how to enable RSS in PMD ?

It works in dpdk v21.11 , but doesn’t work under dpdk v19.11, dpdk v20.08