On 4/16/2020 3:41 AM, Suanming Mou wrote: > Currently, flow may allocate several action resources during creation. > Both allocate the individual resources and save the object handles have > big memory overhead for the flow. > > Indexed memory pool is introduced to optimize the memory overhead. The > resources can be allocated from the resource's own individual memory pool > and only the 32-bits index is saved to the flow. > > In this case, it saves MALLOC_ELEM_OVERHEAD and 4 bytes for every flow > resources. > > This patch series depends on the path which has been acked as below: > https://patches.dpdk.org/patch/68143/ > > v2: > - rebase to the lastet version. > - add the missing 10th patch. > > Suanming Mou (10): > net/mlx5: add indexed memory pool > net/mlx5: add trunk dynamic grow for indexed pool > net/mlx5: add trunk release for indexed pool > net/mlx5: convert encap/decap resource to indexed > net/mlx5: convert push VLAN resource to indexed > net/mlx5: convert tag resource to indexed > net/mlx5: convert port id action to indexed > net/mlx5: convert jump resource to indexed > net/mlx5: convert hrxq to indexed > net/mlx5: convert flow dev handle to indexed
Hi Suanming, Raslan, There is a 32-bit build error [1], can you please check it? [1] .../drivers/net/mlx5/mlx5_utils.c: In function ‘mlx5_ipool_dump’: .../drivers/net/mlx5/mlx5_utils.c:475:26: error: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘int64_t’ {aka ‘long long int’} [-Werror=format=] 475 | printf("Pool %s entry %ld, trunk alloc %ld, empty: %ld, " | ~~^ | | | long int | %lld 476 | "available %ld free %ld\n", 477 | pool->cfg.type, pool->n_entry, pool->trunk_new, | ~~~~~~~~~~~~~ | | | int64_t {aka long long int} .../drivers/net/mlx5/mlx5_utils.c:475:43: error: format ‘%ld’ expects argument of type ‘long int’, but argument 4 has type ‘int64_t’ {aka ‘long long int’} [-Werror=format=] 475 | printf("Pool %s entry %ld, trunk alloc %ld, empty: %ld, " | ~~^ | | | long int | %lld 476 | "available %ld free %ld\n", 477 | pool->cfg.type, pool->n_entry, pool->trunk_new, | ~~~~~~~~~~~~~~~ | | | int64_t {aka long long int} .../drivers/net/mlx5/mlx5_utils.c:475:55: error: format ‘%ld’ expects argument of type ‘long int’, but argument 5 has type ‘int64_t’ {aka ‘long long int’} [-Werror=format=] 475 | printf("Pool %s entry %ld, trunk alloc %ld, empty: %ld, " | ~~^ | | | long int | %lld ...... 478 | pool->trunk_empty, pool->trunk_avail, pool->trunk_free); | ~~~~~~~~~~~~~~~~~ | | | int64_t {aka long long int} .../drivers/net/mlx5/mlx5_utils.c:475:9: error: format ‘%ld’ expects argument of type ‘long int’, but argument 6 has type ‘int64_t’ {aka ‘long long int’} [-Werror=format=] 475 | printf("Pool %s entry %ld, trunk alloc %ld, empty: %ld, " | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...... 478 | pool->trunk_empty, pool->trunk_avail, pool->trunk_free); | ~~~~~~~~~~~~~~~~~ | | | int64_t {aka long long int} .../drivers/net/mlx5/mlx5_utils.c:476:22: note: format string is defined here 476 | "available %ld free %ld\n", | ~~^ | | | long int | %lld .../drivers/net/mlx5/mlx5_utils.c:475:9: error: format ‘%ld’ expects argument of type ‘long int’, but argument 7 has type ‘int64_t’ {aka ‘long long int’} [-Werror=format=] 475 | printf("Pool %s entry %ld, trunk alloc %ld, empty: %ld, " | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...... 478 | pool->trunk_empty, pool->trunk_avail, pool->trunk_free); | ~~~~~~~~~~~~~~~~ | | | int64_t {aka long long int} .../drivers/net/mlx5/mlx5_utils.c:476:31: note: format string is defined here 476 | "available %ld free %ld\n", | ~~^ | | | long int | %lld cc1: all warnings being treated as errors