net/af_xdp: improve packet loss
authorCiara Loftus <ciara.loftus@intel.com>
Tue, 23 Jun 2020 14:29:25 +0000 (14:29 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 30 Jun 2020 14:24:37 +0000 (16:24 +0200)
commita63d4fca68d984c7a0ae68dfba0ec4ccda62456d
tree475c5e02ca1aadf45198129e2b3fda8f2bc4d50f
parentc3fe5d737a38011f5e17574ca653072798256ddd
net/af_xdp: improve packet loss

This commit makes some changes to the AF_XDP PMD in an effort to improve
its packet loss characteristics.

1. In the case of failed transmission due to inability to reserve a tx
   descriptor, the PMD now pulls from the completion ring, issues a
   syscall in which the kernel attempts to complete outstanding tx
   operations, then tries to reserve the tx descriptor again. Prior to
   this we dropped the packet after the syscall and didn't try to
   re-reserve.

2. During completion ring cleanup, always pull as many entries as
   possible from the ring as opposed to the batch size or just how many
   packets we're going to attempt to send. Keeping the completion ring
   emptier should reduce failed transmissions in the kernel, as the
   kernel requires space in the completion ring to successfully tx.

3. Size the fill ring as twice the receive ring size which may help
   reduce allocation failures in the driver.

4. Emulate a tx_free_thresh - when the number of available entries in
   the completion ring rises above this, we pull from it. The threshold
   is set to 1k entries.

With these changes, a benchmark which measured the packet rate at which
0.01% packet loss could be reached improved from ~0.1G to ~3Gbps.

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
drivers/net/af_xdp/rte_eth_af_xdp.c