mbox series

[net-next,0/5] mlxsw: Control the order of blocks in ACL region

Message ID cover.1696330098.git.petrm@nvidia.com (mailing list archive)
Headers show
Series mlxsw: Control the order of blocks in ACL region | expand

Message

Petr Machata Oct. 3, 2023, 11:25 a.m. UTC
Amit Cohen writes:

For 12 key blocks in the A-TCAM, rules are split into two records, which
constitute two lookups. The two records are linked using a
"large entry key ID".

Due to a Spectrum-4 hardware issue, KVD entries that correspond to key
blocks 0 to 5 of 12 key blocks will be placed in the same KVD pipe if they
only differ in their "large entry key ID", as it is ignored. This results
in a reduced scale, we can insert less than 20k filters and get an error:

    $ tc -b flower.batch
    RTNETLINK answers: Input/output error
    We have an error talking to the kernel

To reduce the probability of this issue, we can place key blocks with
high entropy in blocks 0 to 5. The idea is to place blocks that are often
changed in blocks 0 to 5, for example, key blocks that match on IPv4
addresses or the LSBs of IPv6 addresses. Such placement will reduce the
probability of these blocks to be same.

Mark several blocks with 'high_entropy' flag and place them in blocks 0
to 5. Note that the list of the blocks is just a suggestion, I will verify
it with architects.

Currently, there is a one loop that chooses which blocks should be used
for a given list of elements and fills the blocks - when a block is
chosen, it fills it in the region. To be able to control the order of
the blocks, separate between searching blocks and filling them. Several
pre-changes are required.

Patch set overview:
Patch #1 marks several blocks with 'high_entropy' flag.
Patches #2-#4 prepare the code for filling blocks at the end of the search.
Patch #5 changes the loop to just choose the blocks and fill the blocks at
the end.

Amit Cohen (5):
  mlxsw: Mark high entropy key blocks
  mlxsw: core_acl_flex_keys: Add a bitmap to save which blocks are
    chosen
  mlxsw: core_acl_flex_keys: Save chosen elements per block
  mlxsw: core_acl_flex_keys: Save chosen elements in all blocks per
    search
  mlxsw: core_acl_flex_keys: Fill blocks with high entropy first

 .../mellanox/mlxsw/core_acl_flex_keys.c       | 64 +++++++++++++++++--
 .../mellanox/mlxsw/core_acl_flex_keys.h       |  9 +++
 .../mellanox/mlxsw/spectrum_acl_flex_keys.c   | 12 ++--
 3 files changed, 72 insertions(+), 13 deletions(-)

Comments

Simon Horman Oct. 4, 2023, 12:23 p.m. UTC | #1
On Tue, Oct 03, 2023 at 01:25:25PM +0200, Petr Machata wrote:
> Amit Cohen writes:
> 
> For 12 key blocks in the A-TCAM, rules are split into two records, which
> constitute two lookups. The two records are linked using a
> "large entry key ID".
> 
> Due to a Spectrum-4 hardware issue, KVD entries that correspond to key
> blocks 0 to 5 of 12 key blocks will be placed in the same KVD pipe if they
> only differ in their "large entry key ID", as it is ignored. This results
> in a reduced scale, we can insert less than 20k filters and get an error:
> 
>     $ tc -b flower.batch
>     RTNETLINK answers: Input/output error
>     We have an error talking to the kernel
> 
> To reduce the probability of this issue, we can place key blocks with
> high entropy in blocks 0 to 5. The idea is to place blocks that are often
> changed in blocks 0 to 5, for example, key blocks that match on IPv4
> addresses or the LSBs of IPv6 addresses. Such placement will reduce the
> probability of these blocks to be same.
> 
> Mark several blocks with 'high_entropy' flag and place them in blocks 0
> to 5. Note that the list of the blocks is just a suggestion, I will verify
> it with architects.
> 
> Currently, there is a one loop that chooses which blocks should be used
> for a given list of elements and fills the blocks - when a block is
> chosen, it fills it in the region. To be able to control the order of
> the blocks, separate between searching blocks and filling them. Several
> pre-changes are required.
> 
> Patch set overview:
> Patch #1 marks several blocks with 'high_entropy' flag.
> Patches #2-#4 prepare the code for filling blocks at the end of the search.
> Patch #5 changes the loop to just choose the blocks and fill the blocks at
> the end.
> 
> Amit Cohen (5):
>   mlxsw: Mark high entropy key blocks
>   mlxsw: core_acl_flex_keys: Add a bitmap to save which blocks are
>     chosen
>   mlxsw: core_acl_flex_keys: Save chosen elements per block
>   mlxsw: core_acl_flex_keys: Save chosen elements in all blocks per
>     search
>   mlxsw: core_acl_flex_keys: Fill blocks with high entropy first
> 
>  .../mellanox/mlxsw/core_acl_flex_keys.c       | 64 +++++++++++++++++--
>  .../mellanox/mlxsw/core_acl_flex_keys.h       |  9 +++
>  .../mellanox/mlxsw/spectrum_acl_flex_keys.c   | 12 ++--
>  3 files changed, 72 insertions(+), 13 deletions(-)

For series,

Reviewed-by: Simon Horman <horms@kernel.org>
patchwork-bot+netdevbpf@kernel.org Oct. 6, 2023, 10:10 a.m. UTC | #2
Hello:

This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:

On Tue, 3 Oct 2023 13:25:25 +0200 you wrote:
> Amit Cohen writes:
> 
> For 12 key blocks in the A-TCAM, rules are split into two records, which
> constitute two lookups. The two records are linked using a
> "large entry key ID".
> 
> Due to a Spectrum-4 hardware issue, KVD entries that correspond to key
> blocks 0 to 5 of 12 key blocks will be placed in the same KVD pipe if they
> only differ in their "large entry key ID", as it is ignored. This results
> in a reduced scale, we can insert less than 20k filters and get an error:
> 
> [...]

Here is the summary with links:
  - [net-next,1/5] mlxsw: Mark high entropy key blocks
    https://git.kernel.org/netdev/net-next/c/cad6431b8675
  - [net-next,2/5] mlxsw: core_acl_flex_keys: Add a bitmap to save which blocks are chosen
    https://git.kernel.org/netdev/net-next/c/0a67b7a0ec36
  - [net-next,3/5] mlxsw: core_acl_flex_keys: Save chosen elements per block
    https://git.kernel.org/netdev/net-next/c/545535fd30dc
  - [net-next,4/5] mlxsw: core_acl_flex_keys: Save chosen elements in all blocks per search
    https://git.kernel.org/netdev/net-next/c/900f4285bbc2
  - [net-next,5/5] mlxsw: core_acl_flex_keys: Fill blocks with high entropy first
    https://git.kernel.org/netdev/net-next/c/c01e24936d16

You are awesome, thank you!