Fill threshold is per RX queue attribute, when RX queue fullness reach the fill 
threshold limit, HW sends an event to application.
Host shaper can configure shaper rate and fill_thresh-triggered for a host port.
The shaper limits the rate of traffic from host port to embedded ARM rx port on 
Nvidia BlueField 2 NIC.
If fill_thresh-triggered is enabled, a 100Mbps shaper is enabled automatically 
when one of the host port's Rx queues receives fill threshold event.

These two features can combine to control traffic from host port to wire port 
for BlueField 2 NIC.
The traffic flows from host to embedded ARM, then to the physical port.
The work flow is on the ARM system, configure fill threshold to RX queue and 
enable fill_thresh-triggered flag in host shaper, after receiving fill 
threshold event, delay a while until RX queue is empty , then disable the 
shaper. We recycle this work flow to reduce RX queue drops on ARM system.

Add new libethdev API to set fill threshold, add rte event 
RTE_ETH_EVENT_RX_FILL_THRESH to handle fill threshold event. For host shaper, 
because it doesn't align to existing DPDK framework and is specific to Nvidia 
NIC, use PMD private API.

For integration with testpmd, put the private cmdline function and fill 
threshold event handler in mlx5 PMD directory by adding a new file 
mlx5_testpmd.c. Follow David Marchand's driver specific commands framework to 
add mlx5 specific commands.

Spike Du (7):
  net/mlx5: add LWM support for Rxq
  common/mlx5: share interrupt management
  ethdev: introduce Rx queue based fill threshold
  net/mlx5: add LWM event handling support
  net/mlx5: support Rx queue based fill threshold
  net/mlx5: add private API to config host port shaper
  app/testpmd: add Host Shaper command

 app/test-pmd/cmdline.c                       |  68 +++++++
 app/test-pmd/config.c                        |  21 ++
 app/test-pmd/testpmd.c                       |  24 +++
 app/test-pmd/testpmd.h                       |   2 +
 doc/guides/nics/mlx5.rst                     |  93 +++++++++
 doc/guides/rel_notes/release_22_07.rst       |   2 +
 drivers/common/mlx5/linux/meson.build        |  13 ++
 drivers/common/mlx5/linux/mlx5_common_os.c   | 131 ++++++++++++
 drivers/common/mlx5/linux/mlx5_common_os.h   |  11 +
 drivers/common/mlx5/mlx5_prm.h               |  26 +++
 drivers/common/mlx5/version.map              |   2 +
 drivers/common/mlx5/windows/mlx5_common_os.h |  24 +++
 drivers/net/mlx5/linux/mlx5_ethdev_os.c      |  71 -------
 drivers/net/mlx5/linux/mlx5_os.c             | 132 +++---------
 drivers/net/mlx5/linux/mlx5_socket.c         |  53 +----
 drivers/net/mlx5/meson.build                 |   4 +
 drivers/net/mlx5/mlx5.c                      |  68 +++++++
 drivers/net/mlx5/mlx5.h                      |  12 +-
 drivers/net/mlx5/mlx5_devx.c                 |  60 +++++-
 drivers/net/mlx5/mlx5_devx.h                 |   1 +
 drivers/net/mlx5/mlx5_rx.c                   | 292 +++++++++++++++++++++++++++
 drivers/net/mlx5/mlx5_rx.h                   |  13 ++
 drivers/net/mlx5/mlx5_testpmd.c              | 201 ++++++++++++++++++
 drivers/net/mlx5/mlx5_testpmd.h              |  26 +++
 drivers/net/mlx5/mlx5_txpp.c                 |  28 +--
 drivers/net/mlx5/rte_pmd_mlx5.h              |  30 +++
 drivers/net/mlx5/version.map                 |   2 +
 drivers/net/mlx5/windows/mlx5_ethdev_os.c    |  22 --
 drivers/vdpa/mlx5/mlx5_vdpa_virtq.c          |  48 +----
 lib/ethdev/ethdev_driver.h                   |  22 ++
 lib/ethdev/rte_ethdev.c                      |  52 +++++
 lib/ethdev/rte_ethdev.h                      |  72 +++++++
 lib/ethdev/version.map                       |   2 +
 33 files changed, 1320 insertions(+), 308 deletions(-)
 create mode 100644 drivers/net/mlx5/mlx5_testpmd.c
 create mode 100644 drivers/net/mlx5/mlx5_testpmd.h

-- 
1.8.3.1

Reply via email to