<div dir="ltr">On AWS EC2 I configure:<br><br>- <font face="arial, sans-serif">c5n.metal instance</font><div><font face="arial, sans-serif">- Stock AWS AMI Ubuntu 20.04 LTS (</font>$ cat /proc/version</div><div>Linux version 5.4.0-1045-aws)<br><font face="arial, sans-serif">- Apply the vfio pci driver from </font><a href="https://github.com/amzn/am">https://github.com/amzn/am</a> zn-drivers/tree/master/userspace/dpdk/enav2-vfio-patch<br>- Using DPDK code from head of main branch. I built using ninja/meson<br>- Add a 2nd ENA enabled NIC <br>- Setup 2Mb huge pages, and bound the 2nd NIC with dpdk-devbind<br><br>I run test-pmd with this command:<br><br>$ sudo ./dpdk-testpmd --huge-dir=/mnt/huge -c 0xf -n 4 -- -i<br>EAL: Detected CPU lcores: 72<br>EAL: Detected NUMA nodes: 2<br>EAL: Detected static linkage of DPDK<br>EAL: Multi-process socket /var/run/dpdk/rte/mp_socket<br>EAL: Selected IOVA mode 'VA'<br>EAL: No available 1048576 kB hugepages reported<br>EAL: VFIO support initialized<br>EAL: Using IOMMU type 1 (Type 1)<br>EAL: Ignore mapping IO port bar(3)<br>EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:7f:00.0 (socket 0)<br>TELEMETRY: No legacy callbacks, legacy socket not created<br>Interactive-mode selected<br>Error picking flow transfer proxy for port 0: Function not implemented - ignore<br>testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0<br>testpmd: preferred mempool ops selected: ring_mp_mc<br>Warning! port-topology=paired and odd forward ports number, the last port will pair with itself.<br>Configuring Port 0 (socket 0)<br>Port 0: 16:9A:11:4A:5D:61<br>Checking link statuses...<br>Done<br>Error during enabling promiscuous mode for port 0: Operation not supported - ignore<br><br><b>Key point: I try to enable RSS hash offload for UDP or TCP. I get the following error shown in bold:</b><br><br>testpmd> port config all rss udp<br><b>Port 0 modified RSS hash function based on hardware support,requested:0x20820 configured:0x820<br></b>ena_rss_hash_set(): Setting RSS hash fields is not supported<br>ena_rss_hash_update(): Failed to set RSS hash<br><b>Configuration of RSS hash at ethernet port 0 failed with error (95): Operation not supported.</b><br>testpmd> port config all rss tcp<br><b>Port 0 modified RSS hash function based on hardware support,requested:0x10410 configured:0x410<br></b>ena_rss_hash_set(): Setting RSS hash fields is not supported<br>ena_rss_hash_update(): Failed to set RSS hash<br><b>Configuration of RSS hash at ethernet port 0 failed with error (95): Operation not supported.<br></b><br></div><div>If I run ethtool on the NIC before putting it down state and DPDK binding to vfio-pci I see an indication that there is a hash key, and RSS Hash works:<br><br>ubuntu$ ethtool -x ens6<br>RX flow hash indirection table for ens6 with 32 RX ring(s):<br>    0:      0     1     2     3     4     5     6     7<br>    8:      8     9    10    11    12    13    14    15<br>   16:     16    17    18    19    20    21    22    23<br>   24:     24    25    26    27    28    29    30    31<br>   32:      0     1     2     3     4     5     6     7<br>   40:      8     9    10    11    12    13    14    15<br>   48:     16    17    18    19    20    21    22    23<br>   56:     24    25    26    27    28    29    30    31<br>   64:      0     1     2     3     4     5     6     7<br>   72:      8     9    10    11    12    13    14    15<br>   80:     16    17    18    19    20    21    22    23<br>   88:     24    25    26    27    28    29    30    31<br>   96:      0     1     2     3     4     5     6     7<br>  104:      8     9    10    11    12    13    14    15<br>  112:     16    17    18    19    20    21    22    23<br>  120:     24    25    26    27    28    29    30    31<br>RSS hash key:<br>80:d3:0f:c4:1d:8a:48:9e:7f:1d:18:91:d3:12:cb:38:87:fc:33:49:18:30:e4:1d:19:8f:9d:fd:c3:94:fe:f3:b2:f0:7f:e9:e9:9d:2d:af<br>RSS hash function:<br>    toeplitz: on<br>    xor: off<br>    crc32: off<br><br>What gives? Do I need to modify a constant somewhere in DPDK?<br><br>At the risk of expanding scope, I am really trying to run eRPC which runs on top of DPDK. It fails in dpdk_init with a similar but slightly different error shown in bold in which the putative valid value is different than above:<br><br>$ sudo ./hello_server <a href="http://172.31.77.76:31850">172.31.77.76:31850</a><br>20:536566 INFOR: eRPC Nexus: Launching 0 background threads.<br>20:536582 INFOR: eRPC Nexus: Launching session management thread on core 53.<br>20:536776 INFOR: eRPC Nexus: Created with management UDP port 31850, hostname 172.31.77.76.<br>20:536832 INFOR: DPDK transport for Rpc 0 initializing DPDK EAL.<br>EAL: Detected CPU lcores: 72<br>EAL: Detected NUMA nodes: 2<br>EAL: Auto-detected process type: PRIMARY<br>EAL: Detected static linkage of DPDK<br>EAL: Multi-process socket /var/run/dpdk/rte/mp_socket<br>EAL: Selected IOVA mode 'VA'<br>EAL: No available 1048576 kB hugepages reported<br>EAL: VFIO support initialized<br>EAL: Using IOMMU type 1 (Type 1)<br>EAL: Ignore mapping IO port bar(3)<br>EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:7f:00.0 (socket 0)<br>TELEMETRY: No legacy callbacks, legacy socket not created<br>21:428883 WARNG: Running as primary DPDK process. eRPC DPDK daemon is not running.<br>21:428893 INFOR: DPDK transport for Rpc 0 got QP 0<br>21:428927 INFOR: Initializing port 0 with driver net_ena<br><b>Ethdev port_id=0 invalid rss_hf: 0x20820, valid value: 0xc30<br></b>terminate called after throwing an instance of 'std::runtime_error'<br>  what():  Ethdev configuration error: Invalid argument<br>Aborted<br></div></div>