[net-next V10 PATCH 00/16] XDP redirect memory return API
Resubmit V10 against net-next, as it contains NIC driver changes. This patchset works towards supporting different XDP RX-ring memory allocators. As this will be needed by the AF_XDP zero-copy mode. The patchset uses mlx5 as the sample driver, which gets implemented XDP_REDIRECT RX-mode, but not ndo_xdp_xmit (as this API is subject to change thought the patchset). A new struct xdp_frame is introduced (modeled after cpumap xdp_pkt). And both ndo_xdp_xmit and the new xdp_return_frame end-up using this. Support for a driver supplied allocator is implemented, and a refurbished version of page_pool is the first return allocator type introduced. This will be a integration point for AF_XDP zero-copy. The mlx5 driver evolve into using the page_pool, and see a performance increase (with ndo_xdp_xmit out ixgbe driver) from 6Mpps to 12Mpps. The patchset stop at 16 patches (one over limit), but more API changes are planned. Specifically extending ndo_xdp_xmit and xdp_return_frame APIs to support bulking. As this will address some known limits. V2: Updated according to Tariq's feedback V3: Updated based on feedback from Jason Wang and Alex Duyck V4: Updated based on feedback from Tariq and Jason V5: Fix SPDX license, add Tariq's reviews, improve patch desc for perf test V6: Updated based on feedback from Eric Dumazet and Alex Duyck V7: Adapt to i40e that got XDP_REDIRECT support in-between V8: Updated based on feedback kbuild test robot, and adjust for mlx5 changes page_pool only compiled into kernel when drivers Kconfig 'select' feature V9: Remove some inline statements, let compiler decide what to inline Fix return value in virtio_net driver Adjust for mlx5 changes in-between submissions V10: Minor adjust for mlx5 requested by Tariq Resubmit against net-next --- Jesper Dangaard Brouer (16): mlx5: basic XDP_REDIRECT forward support xdp: introduce xdp_return_frame API and use in cpumap ixgbe: use xdp_return_frame API xdp: move struct xdp_buff from filter.h to xdp.h xdp: introduce a new xdp_frame type tun: convert to use generic xdp_frame and xdp_return_frame API virtio_net: convert to use generic xdp_frame and xdp_return_frame API bpf: cpumap convert to use generic xdp_frame i40e: convert to use generic xdp_frame and xdp_return_frame API mlx5: register a memory model when XDP is enabled xdp: rhashtable with allocator ID to pointer mapping page_pool: refurbish version of page_pool code xdp: allow page_pool as an allocator type in xdp_return_frame mlx5: use page_pool for xdp_return_frame call xdp: transition into using xdp_frame for return API xdp: transition into using xdp_frame for ndo_xdp_xmit drivers/net/ethernet/intel/i40e/i40e_txrx.c | 33 ++ drivers/net/ethernet/intel/i40e/i40e_txrx.h |3 drivers/net/ethernet/intel/ixgbe/ixgbe.h |3 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 38 ++- drivers/net/ethernet/mellanox/mlx5/core/Kconfig |1 drivers/net/ethernet/mellanox/mlx5/core/en.h |4 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 37 ++ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 42 ++- drivers/net/tun.c | 60 ++-- drivers/net/virtio_net.c | 67 +++- drivers/vhost/net.c |7 include/linux/filter.h| 24 -- include/linux/if_tun.h|4 include/linux/netdevice.h |4 include/net/page_pool.h | 143 + include/net/xdp.h | 83 + kernel/bpf/cpumap.c | 132 +++-- net/Kconfig |3 net/core/Makefile |1 net/core/filter.c | 17 + net/core/page_pool.c | 317 + net/core/xdp.c| 269 ++ 22 files changed, 1094 insertions(+), 198 deletions(-) create mode 100644 include/net/page_pool.h create mode 100644 net/core/page_pool.c --
Re: [net-next V10 PATCH 00/16] XDP redirect memory return API
On Tue, Apr 17, 2018 at 5:58 AM, Jesper Dangaard Brouer wrote: > Resubmit V10 against net-next, as it contains NIC driver changes. > > This patchset works towards supporting different XDP RX-ring memory > allocators. As this will be needed by the AF_XDP zero-copy mode. > > The patchset uses mlx5 as the sample driver, which gets implemented > XDP_REDIRECT RX-mode, but not ndo_xdp_xmit (as this API is subject to > change thought the patchset). > > A new struct xdp_frame is introduced (modeled after cpumap xdp_pkt). > And both ndo_xdp_xmit and the new xdp_return_frame end-up using this. > > Support for a driver supplied allocator is implemented, and a > refurbished version of page_pool is the first return allocator type > introduced. This will be a integration point for AF_XDP zero-copy. > > The mlx5 driver evolve into using the page_pool, and see a performance > increase (with ndo_xdp_xmit out ixgbe driver) from 6Mpps to 12Mpps. > > > The patchset stop at 16 patches (one over limit), but more API changes > are planned. Specifically extending ndo_xdp_xmit and xdp_return_frame > APIs to support bulking. As this will address some known limits. > > V2: Updated according to Tariq's feedback > V3: Updated based on feedback from Jason Wang and Alex Duyck > V4: Updated based on feedback from Tariq and Jason > V5: Fix SPDX license, add Tariq's reviews, improve patch desc for perf test > V6: Updated based on feedback from Eric Dumazet and Alex Duyck > V7: Adapt to i40e that got XDP_REDIRECT support in-between > V8: > Updated based on feedback kbuild test robot, and adjust for mlx5 changes > page_pool only compiled into kernel when drivers Kconfig 'select' feature > V9: > Remove some inline statements, let compiler decide what to inline > Fix return value in virtio_net driver > Adjust for mlx5 changes in-between submissions > V10: > Minor adjust for mlx5 requested by Tariq > Resubmit against net-next looks like you forgot to include extra patch to fixup xdp_adjust_head() helper. Otherwise reused xdp_frame in the top of that packet is leaking kernel pointers into bpf program. Could you please respin with that change included?
Re: [net-next V10 PATCH 00/16] XDP redirect memory return API
From: Jesper Dangaard Brouer Date: Tue, 17 Apr 2018 14:58:52 +0200 > Resubmit V10 against net-next, as it contains NIC driver changes. Series applied, thanks Jesper.
Re: [net-next V10 PATCH 00/16] XDP redirect memory return API
From: Alexei Starovoitov Date: Tue, 17 Apr 2018 06:53:33 -0700 > looks like you forgot to include extra patch to fixup xdp_adjust_head() > helper. Otherwise reused xdp_frame in the top of that packet is leaking > kernel pointers into bpf program. > Could you please respin with that change included? Just in time, I was about to push this back out. :) Jesper, please respin with Alexei's requested changes.
Re: [net-next V10 PATCH 00/16] XDP redirect memory return API
On Tue, 17 Apr 2018 10:07:50 -0400 (EDT) David Miller wrote: > From: Alexei Starovoitov > Date: Tue, 17 Apr 2018 06:53:33 -0700 > > > looks like you forgot to include extra patch to fixup xdp_adjust_head() > > helper. Otherwise reused xdp_frame in the top of that packet is leaking > > kernel pointers into bpf program. > > Could you please respin with that change included? > > Just in time, I was about to push this back out. :) > > Jesper, please respin with Alexei's requested changes. Your guys are torturing me! -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer