Hello,
I’m experiencing an issue with RX packet drops on our Mellanox ConnectX-5 NICs under high traffic load generated by DPDK-based packet generators (Pktgen/TrafficGen).
Environment:
-
NIC: Mellanox ConnectX-5 25G
-
Driver: MLNX_OFED_LINUX-5.8-4.1.5.0 (Ubuntu 22.04, Kernel 5.15)
-
DPDK version: 25.11.0-rc0
-
Traffic: High PPS TCP SYN floods using Pktgen / TrafficGen
-
Observed PPS: Up to 37 million packets per second on the NIC
Problem (in the target machine):
-
When generating traffic with hping3,
rx_out_of_buffercounter remains stable. -
When using DPDK-based Pktgen or TrafficGen at high rates,
rx_out_of_buffercounter increases rapidly ~%90 of all the packets. -
CPU usage does not reach 100%, and NIC queues themselves do not report missed packets (
imissedremains 0). -
Interrupt coalescence is disabled, flow control is off, and PCI Max Read Request is set to 4096.
Questions:
-
Why does
rx_out_of_bufferincrease under high DPDK traffic, even though the receive rings are not full and CPU is not saturated? -
Are there specific NIC tuning parameters for high-PPS DPDK traffic to prevent this counter from increasing?
-
Could this be related to DPDK driver configuration or kernel interaction with Mellanox NICs?
-
If I am truly hitting the NIC limit, is there a way to overcome the
rx_out_of_bufferissue? If I can, I will try to pass the incoming packets to iptables and measure its performance
Any guidance or recommendations would be greatly appreciated.
Note: i also tried theese methods:
sudo sysctl -w net.core.netdev_max_backlog=300000
sudo sysctl -w net.core.rmem_max=4194304
sudo sysctl -w net.core.rmem_default=4194304
sudo sysctl -w net.core.netdev_budget=5000
sudo sysctl -w net.core.netdev_budget_usecs=1000
sudo sysctl -w net.core.wmem_max=4194304
sudo sysctl -w net.core.wmem_default=4194304
sudo ethtool -L {interface_name} combined 63
sudo ethtool -X {interface_name} equal 63
sudo ethtool -C {interface_name} rx-usecs 64 rx-frames 128
sudo ethtool -C {interface_name} adaptive-rx on
sudo ethtool -G {interface_name} rx 4096 tx 4096
sudo ethtool -C {interface_name} adaptive-rx off rx-usecs 0 rx-frames 0
sudo ethtool -A {interface_name} rx off tx off
Thanks in advance