[PATCH net-next 00/15] net/mlx5e: SHAMPO, Allow high order pages in zerocopy mode

Tariq Toukan posted 15 patches 1 month, 3 weeks ago
drivers/net/ethernet/mellanox/mlx5/core/en.h  |   9 +-
.../ethernet/mellanox/mlx5/core/en/params.c   | 415 +++++++++++-------
.../ethernet/mellanox/mlx5/core/en/params.h   |  45 +-
.../net/ethernet/mellanox/mlx5/core/en/ptp.c  |   4 +-
.../net/ethernet/mellanox/mlx5/core/en/xdp.c  |   5 +-
.../net/ethernet/mellanox/mlx5/core/en/xdp.h  |   3 +-
.../ethernet/mellanox/mlx5/core/en/xsk/pool.c |  23 +-
.../mellanox/mlx5/core/en/xsk/setup.c         |  59 +--
.../mellanox/mlx5/core/en/xsk/setup.h         |   6 +-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 194 +++++---
.../net/ethernet/mellanox/mlx5/core/en_rx.c   |  36 +-
11 files changed, 502 insertions(+), 297 deletions(-)
[PATCH net-next 00/15] net/mlx5e: SHAMPO, Allow high order pages in zerocopy mode
Posted by Tariq Toukan 1 month, 3 weeks ago
Hi,

This series adds support for high order pages when io_uring/devmem
zero copy is used.

See detailed description by Dragos below.

Regards,
Tariq


The first patches are moving code around to allow using queue specific
parameters that are not just for XSK. They are a bit large as they touch
a lot of functions.

The middle part of the series is updating various formulas to remove
remaining hardcoded use of PAGE_SIZE/PAGE_SHIFT.

The last part adds support for high order pages by implementing the
queue configuration functions and allowing larger rx_page_size
configurations when in zero-copy mode.

Results show an increase in BW and a decrease in CPU usage.
The benchmark was done with the zcrx samples from liburing [0].

rx_buf_len=4K, oncpu [1]:
packets=3358832 (MB=820027), rps=55794 (MB/s=13621)
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:       9    1.56    0.00   18.09   13.42    0.00   66.80    0.00    0.00    0.00    0.12

rx_buf_len=128K, oncpu [2]:
packets=3781376 (MB=923187), rps=62813 (MB/s=15335)
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:       9    0.33    0.00    7.61   18.86    0.00   73.08    0.00    0.00    0.00    0.12

rx_buf_len=4K, offcpu [3]:
packets=3460368 (MB=844816), rps=57481 (MB/s=14033)
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:       9    0.00    0.00    0.26    0.00    0.00   92.63    0.00    0.00    0.00    7.11
Average:      11    3.04    0.00   68.09   28.87    0.00    0.00    0.00    0.00    0.00    0.00

rx_buf_len=128K, offcpu [4]:
packets=4119840 (MB=1005820), rps=68435 (MB/s=16707)
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:       9    0.00    0.00    0.87    0.00    0.00   63.77    0.00    0.00    0.00   35.36
Average:      11    1.96    0.00   43.68   54.37    0.00    0.00    0.00    0.00    0.00    0.00

[0] https://github.com/isilence/liburing/tree/zcrx/rx-buf-len

[1] commands:
  $> taskset -c 9 ./zcrx 6 -i eth2 -q 9 -A 1 -B 4096 -S 33554432
  $> ./send-zerocopy tcp -6 -D 2001:db8::1 -t 60 -C 0 -l 1 -b 1 -n 1 -z 1 -d -s 256000

[2] commands:
  $> taskset -c 9 ./zcrx 6 -i eth2 -q 9 -A 1 -B 131072 -S 33554432
  $> ./send-zerocopy tcp -6 -D 2001:db8::1 -t 60 -C 0 -l 1 -b 1 -n 1 -z 1 -d -s 256000

[3] commands:
  $> taskset -c 11 ./zcrx 6 -i eth2 -q 9 -A 1 -B 4096 -S 33554432
  $> ./send-zerocopy tcp -6 -D 2001:db8::1 -t 60 -C 0 -l 1 -b 1 -n 1 -z 1 -d -s 256000

[4] commands:
  $> taskset -c 11 ./zcrx 6 -i eth2 -q 9 -A 1 -B 131072 -S 33554432
  $> ./send-zerocopy tcp -6 -D 2001:db8::1 -t 60 -C 0 -l 1 -b 1 -n 1 -z 1 -d -s 256000

Dragos Tatulea (15):
  net/mlx5e: Make mlx5e_rq_param naming consistent
  net/mlx5e: Extract striding rq param calculation in function
  net/mlx5e: Extract max_xsk_wqebbs into its own function
  net/mlx5e: Expose and rename xsk channel parameter function
  net/mlx5e: Alloc xsk channel param out of mlx5e_open_xsk()
  net/mlx5e: Move xsk param into new option container struct
  net/mlx5e: Drop unused channel parameters
  net/mlx5e: SHAMPO, Always calculate page size
  net/mlx5e: Set page_pool order based on calculated page_shift
  net/mlx5e: Alloc rq drop page based on calculated page_shift
  net/mlx5e: RX, Make page frag bias more robust
  net/mlx5e: Add queue config ops for page size
  net/mlx5e: Pass netdev queue config to param calculations
  net/mlx5e: Add param helper to calculate max page size
  net/mlx5e: SHAMPO, Allow high order pages in zerocopy mode

 drivers/net/ethernet/mellanox/mlx5/core/en.h  |   9 +-
 .../ethernet/mellanox/mlx5/core/en/params.c   | 415 +++++++++++-------
 .../ethernet/mellanox/mlx5/core/en/params.h   |  45 +-
 .../net/ethernet/mellanox/mlx5/core/en/ptp.c  |   4 +-
 .../net/ethernet/mellanox/mlx5/core/en/xdp.c  |   5 +-
 .../net/ethernet/mellanox/mlx5/core/en/xdp.h  |   3 +-
 .../ethernet/mellanox/mlx5/core/en/xsk/pool.c |  23 +-
 .../mellanox/mlx5/core/en/xsk/setup.c         |  59 +--
 .../mellanox/mlx5/core/en/xsk/setup.h         |   6 +-
 .../net/ethernet/mellanox/mlx5/core/en_main.c | 194 +++++---
 .../net/ethernet/mellanox/mlx5/core/en_rx.c   |  36 +-
 11 files changed, 502 insertions(+), 297 deletions(-)


base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
-- 
2.44.0