mbox series

[v2,00/16] net/mlx5/hws: support range and partial hash matching

Message ID 20230201072815.1329101-1-valex@nvidia.com (mailing list archive)
Headers
Series net/mlx5/hws: support range and partial hash matching |

Message

Alex Vesker Feb. 1, 2023, 7:27 a.m. UTC
  ConnectX and BlueField devices which support HWS are capable of performing
advanced match, range-match and hashing operations on packet headers. This
patch-set introduces support for (1) range matching - allows combining
range and exact match over provided item fields using spec, last and mask.
A useful example for Range and exact match is matching exact IP and port
range. This series also introduces (2) partial hash, which allows using
the same matcher and performing partial hashing in case of multiple match
templates are provided. The matcher create code finds the union and
intersection fields to split the hash and match in a way the HW can
support. This increases the match templates combinations possible although
it may limit the maximum PPS. Since (1) and (2) are not fully support on
current HW the implementation is done on top of a HW like FW API using
WQEs.

v2:
-Fix missed checkpatch comments

Alex Vesker (16):
  net/mlx5/hws: support synchronous drain
  net/mlx5/hws: matcher remove AT and MT limitation
  net/mlx5/hws: support GTA WQE write using FW command
  net/mlx5/hws: add capability query for gen wqe command
  net/mlx5/hws: align RTC create command with PRM format
  net/mlx5/hws: add send FW match STE using gen WQE
  net/mlx5/hws: add send FW range STE WQE
  net/mlx5/hws: move matcher size check to function
  net/mlx5/hws: support range match
  net/mlx5/hws: redesign definer create
  net/mlx5/hws: support partial hash
  net/mlx5/hws: add range definer creation support
  net/mlx5/hws: add FW WQE rule creation logic
  net/mlx5/hws: add debug dump support for range and hash
  net/mlx5/hws: rename pattern cache object
  net/mlx5/hws: cache definer for reuse

 drivers/common/mlx5/mlx5_prm.h         |  53 +-
 drivers/net/mlx5/hws/mlx5dr.h          |   6 +-
 drivers/net/mlx5/hws/mlx5dr_cmd.c      |  72 ++-
 drivers/net/mlx5/hws/mlx5dr_cmd.h      |  27 +-
 drivers/net/mlx5/hws/mlx5dr_context.c  |  12 +-
 drivers/net/mlx5/hws/mlx5dr_context.h  |   1 +
 drivers/net/mlx5/hws/mlx5dr_debug.c    |  41 +-
 drivers/net/mlx5/hws/mlx5dr_debug.h    |   4 +-
 drivers/net/mlx5/hws/mlx5dr_definer.c  | 750 +++++++++++++++++++++----
 drivers/net/mlx5/hws/mlx5dr_definer.h  |  44 +-
 drivers/net/mlx5/hws/mlx5dr_internal.h |   2 +-
 drivers/net/mlx5/hws/mlx5dr_matcher.c  | 279 ++++++---
 drivers/net/mlx5/hws/mlx5dr_matcher.h  |  43 +-
 drivers/net/mlx5/hws/mlx5dr_pat_arg.c  |  49 +-
 drivers/net/mlx5/hws/mlx5dr_pat_arg.h  |   6 +-
 drivers/net/mlx5/hws/mlx5dr_rule.c     | 193 ++++++-
 drivers/net/mlx5/hws/mlx5dr_rule.h     |   2 +
 drivers/net/mlx5/hws/mlx5dr_send.c     | 169 +++++-
 drivers/net/mlx5/hws/mlx5dr_send.h     |  24 +-
 drivers/net/mlx5/mlx5_flow_hw.c        |   2 +-
 20 files changed, 1475 insertions(+), 304 deletions(-)
  

Comments

Matan Azrad Feb. 6, 2023, 3:07 p.m. UTC | #1
From: Alex Vesker
> ConnectX and BlueField devices which support HWS are capable of
> performing advanced match, range-match and hashing operations on packet
> headers. This patch-set introduces support for (1) range matching - allows
> combining range and exact match over provided item fields using spec, last
> and mask.
> A useful example for Range and exact match is matching exact IP and port
> range. This series also introduces (2) partial hash, which allows using the
> same matcher and performing partial hashing in case of multiple match
> templates are provided. The matcher create code finds the union and
> intersection fields to split the hash and match in a way the HW can support.
> This increases the match templates combinations possible although it may
> limit the maximum PPS. Since (1) and (2) are not fully support on current HW
> the implementation is done on top of a HW like FW API using WQEs.
> 
> v2:
> -Fix missed checkpatch comments
> 
> Alex Vesker (16):
>   net/mlx5/hws: support synchronous drain
>   net/mlx5/hws: matcher remove AT and MT limitation
>   net/mlx5/hws: support GTA WQE write using FW command
>   net/mlx5/hws: add capability query for gen wqe command
>   net/mlx5/hws: align RTC create command with PRM format
>   net/mlx5/hws: add send FW match STE using gen WQE
>   net/mlx5/hws: add send FW range STE WQE
>   net/mlx5/hws: move matcher size check to function
>   net/mlx5/hws: support range match
>   net/mlx5/hws: redesign definer create
>   net/mlx5/hws: support partial hash
>   net/mlx5/hws: add range definer creation support
>   net/mlx5/hws: add FW WQE rule creation logic
>   net/mlx5/hws: add debug dump support for range and hash
>   net/mlx5/hws: rename pattern cache object
>   net/mlx5/hws: cache definer for reuse


Series-acked-by: Matan Azrad <matan@nvidia.com>

>  drivers/common/mlx5/mlx5_prm.h         |  53 +-
>  drivers/net/mlx5/hws/mlx5dr.h          |   6 +-
>  drivers/net/mlx5/hws/mlx5dr_cmd.c      |  72 ++-
>  drivers/net/mlx5/hws/mlx5dr_cmd.h      |  27 +-
>  drivers/net/mlx5/hws/mlx5dr_context.c  |  12 +-
>  drivers/net/mlx5/hws/mlx5dr_context.h  |   1 +
>  drivers/net/mlx5/hws/mlx5dr_debug.c    |  41 +-
>  drivers/net/mlx5/hws/mlx5dr_debug.h    |   4 +-
>  drivers/net/mlx5/hws/mlx5dr_definer.c  | 750 +++++++++++++++++++++--
> --  drivers/net/mlx5/hws/mlx5dr_definer.h  |  44 +-
>  drivers/net/mlx5/hws/mlx5dr_internal.h |   2 +-
>  drivers/net/mlx5/hws/mlx5dr_matcher.c  | 279 ++++++---
> drivers/net/mlx5/hws/mlx5dr_matcher.h  |  43 +-
> drivers/net/mlx5/hws/mlx5dr_pat_arg.c  |  49 +-
>  drivers/net/mlx5/hws/mlx5dr_pat_arg.h  |   6 +-
>  drivers/net/mlx5/hws/mlx5dr_rule.c     | 193 ++++++-
>  drivers/net/mlx5/hws/mlx5dr_rule.h     |   2 +
>  drivers/net/mlx5/hws/mlx5dr_send.c     | 169 +++++-
>  drivers/net/mlx5/hws/mlx5dr_send.h     |  24 +-
>  drivers/net/mlx5/mlx5_flow_hw.c        |   2 +-
>  20 files changed, 1475 insertions(+), 304 deletions(-)
> 
> --
> 2.18.1
  
Raslan Darawsheh Feb. 13, 2023, 8:27 a.m. UTC | #2
Hi,

> -----Original Message-----
> From: Alex Vesker <valex@nvidia.com>
> Sent: Wednesday, February 1, 2023 9:28 AM
> To: Alex Vesker <valex@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL)
> <thomas@monjalon.net>
> Cc: Matan Azrad <matan@nvidia.com>; dev@dpdk.org; Ori Kam
> <orika@nvidia.com>
> Subject: [v2 00/16] net/mlx5/hws: support range and partial hash matching
> 
> ConnectX and BlueField devices which support HWS are capable of
> performing advanced match, range-match and hashing operations on packet
> headers. This patch-set introduces support for (1) range matching - allows
> combining range and exact match over provided item fields using spec, last
> and mask.
> A useful example for Range and exact match is matching exact IP and port
> range. This series also introduces (2) partial hash, which allows using the
> same matcher and performing partial hashing in case of multiple match
> templates are provided. The matcher create code finds the union and
> intersection fields to split the hash and match in a way the HW can support.
> This increases the match templates combinations possible although it may
> limit the maximum PPS. Since (1) and (2) are not fully support on current HW
> the implementation is done on top of a HW like FW API using WQEs.
> 
> v2:
> -Fix missed checkpatch comments
> 
> Alex Vesker (16):
>   net/mlx5/hws: support synchronous drain
>   net/mlx5/hws: matcher remove AT and MT limitation
>   net/mlx5/hws: support GTA WQE write using FW command
>   net/mlx5/hws: add capability query for gen wqe command
>   net/mlx5/hws: align RTC create command with PRM format
>   net/mlx5/hws: add send FW match STE using gen WQE
>   net/mlx5/hws: add send FW range STE WQE
>   net/mlx5/hws: move matcher size check to function
>   net/mlx5/hws: support range match
>   net/mlx5/hws: redesign definer create
>   net/mlx5/hws: support partial hash
>   net/mlx5/hws: add range definer creation support
>   net/mlx5/hws: add FW WQE rule creation logic
>   net/mlx5/hws: add debug dump support for range and hash
>   net/mlx5/hws: rename pattern cache object
>   net/mlx5/hws: cache definer for reuse
> 
>  drivers/common/mlx5/mlx5_prm.h         |  53 +-
>  drivers/net/mlx5/hws/mlx5dr.h          |   6 +-
>  drivers/net/mlx5/hws/mlx5dr_cmd.c      |  72 ++-
>  drivers/net/mlx5/hws/mlx5dr_cmd.h      |  27 +-
>  drivers/net/mlx5/hws/mlx5dr_context.c  |  12 +-
>  drivers/net/mlx5/hws/mlx5dr_context.h  |   1 +
>  drivers/net/mlx5/hws/mlx5dr_debug.c    |  41 +-
>  drivers/net/mlx5/hws/mlx5dr_debug.h    |   4 +-
>  drivers/net/mlx5/hws/mlx5dr_definer.c  | 750 +++++++++++++++++++++--
> --  drivers/net/mlx5/hws/mlx5dr_definer.h  |  44 +-
>  drivers/net/mlx5/hws/mlx5dr_internal.h |   2 +-
>  drivers/net/mlx5/hws/mlx5dr_matcher.c  | 279 ++++++---
> drivers/net/mlx5/hws/mlx5dr_matcher.h  |  43 +-
> drivers/net/mlx5/hws/mlx5dr_pat_arg.c  |  49 +-
>  drivers/net/mlx5/hws/mlx5dr_pat_arg.h  |   6 +-
>  drivers/net/mlx5/hws/mlx5dr_rule.c     | 193 ++++++-
>  drivers/net/mlx5/hws/mlx5dr_rule.h     |   2 +
>  drivers/net/mlx5/hws/mlx5dr_send.c     | 169 +++++-
>  drivers/net/mlx5/hws/mlx5dr_send.h     |  24 +-
>  drivers/net/mlx5/mlx5_flow_hw.c        |   2 +-
>  20 files changed, 1475 insertions(+), 304 deletions(-)
> 
> --
> 2.18.1

Series applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh