Jiri says: Currently, an ERP set is created for each region according to rules inserted and order of their insertion. However that might lead to suboptimal ERP sets and possible unnecessary spillage into C-TCAM. This patchset aims to fix this problem and introduces periodical checking of used ERP sets and in case a better ERP set is possible for the given set of rules, it rehashes the region to use the better ERP set.
Patch 1 prepares devlink params infra in order to fix the init/fini sequences. Patch 2 implements hints infra in objagg library. Patch 3 fixes a typo Patch 4 adds number of root objects directly into objagg stats. Patches 5-7 do split of multiple structs in Spectrum TCAM code. Patch 8 introduces initial implementation of ERP rehash logic, according to objagg hints. Patch 9 adds hints priv passing trought the layers. Patch 10 adds multi field into PAGT reg. (new patch) Patch 11 implements actual region rules migration in TCAM code. Patch 12 adds a devlink param so user is able to control rehash interval. Patch 13 adds couple of tracepoints in order to track rehash procedures. Patch 14 adds a simple selftest to test region rehash. Jiri Pirko (14): devlink: publish params only after driver init is done lib: objagg: implement optimization hints assembly and use hints for object creation lib: objagg: fix typo in objagg_stats_put() docstring lib: objagg: add root count to stats mlxsw: spectrum_acl: Split region struct into region and vregion mlxsw: spectrum_acl: Split chunk struct into chunk and vchunk mlxsw: spectrum_acl: Split entry struct into entry and ventry mlxsw: spectrum_acl: Implement basic ERP rehash hits creation mlxsw: spectrum_acl: Pass hints priv all the way to ERP code mlxsw: reg: Add multi field to PAGT register mlxsw: spectrum_acl: Implement region migration according to hints mlxsw: spectrum: add "acl_region_rehash_interval" devlink param mlxsw: spectrum_acl: Add couple of vregion rehash tracepoints selftests: mlxsw: spectrum-2: Add simple delta rehash test .../networking/devlink-params-mlxsw.txt | 8 + .../net/ethernet/broadcom/bnxt/bnxt_devlink.c | 3 + drivers/net/ethernet/mellanox/mlx4/main.c | 1 + drivers/net/ethernet/mellanox/mlxsw/core.c | 5 + drivers/net/ethernet/mellanox/mlxsw/core.h | 5 + drivers/net/ethernet/mellanox/mlxsw/reg.h | 11 +- .../net/ethernet/mellanox/mlxsw/spectrum.c | 69 +- .../net/ethernet/mellanox/mlxsw/spectrum.h | 7 +- .../mellanox/mlxsw/spectrum1_acl_tcam.c | 3 +- .../mellanox/mlxsw/spectrum2_acl_tcam.c | 20 +- .../ethernet/mellanox/mlxsw/spectrum_acl.c | 18 +- .../mellanox/mlxsw/spectrum_acl_atcam.c | 14 +- .../mellanox/mlxsw/spectrum_acl_erp.c | 120 ++- .../mellanox/mlxsw/spectrum_acl_tcam.c | 944 +++++++++++++----- .../mellanox/mlxsw/spectrum_acl_tcam.h | 24 +- include/linux/objagg.h | 21 +- include/net/devlink.h | 11 + include/trace/events/mlxsw.h | 61 ++ lib/objagg.c | 579 ++++++++++- lib/test_objagg.c | 194 +++- net/core/devlink.c | 48 +- .../drivers/net/mlxsw/spectrum-2/tc_flower.sh | 77 +- 22 files changed, 1943 insertions(+), 300 deletions(-) -- 2.20.1