From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jesper Dangaard Brouer Subject: [bpf-next V6 PATCH 00/15] XDP redirect memory return API Date: Tue, 27 Mar 2018 11:31:54 +0200 Message-ID: <152214307922.9023.12528985070753859526.stgit@firesoul> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: eugenia@mellanox.com, Jason Wang , John Fastabend , Eran Ben Elisha , Saeed Mahameed , galp@mellanox.com, Jesper Dangaard Brouer , Daniel Borkmann , Alexei Starovoitov , Tariq Toukan To: netdev@vger.kernel.org, =?utf-8?b?QmrDtnJu?= =?utf-8?b?VMO2cGVs?= , magnus.karlsson@intel.com Return-path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:42722 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751068AbeC0Jb5 (ORCPT ); Tue, 27 Mar 2018 05:31:57 -0400 Sender: netdev-owner@vger.kernel.org List-ID: 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 the 15 patches 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 --- Jesper Dangaard Brouer (15): 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 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/ixgbe/ixgbe.h | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 37 ++ drivers/net/ethernet/mellanox/mlx5/core/en.h | 4 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 36 ++ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 42 ++- drivers/net/tun.c | 60 ++-- drivers/net/virtio_net.c | 52 ++- 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 | 129 +++++++++ include/net/xdp.h | 83 +++++ kernel/bpf/cpumap.c | 132 +++------ net/core/Makefile | 1 net/core/filter.c | 17 + net/core/page_pool.c | 317 +++++++++++++++++++++ net/core/xdp.c | 258 +++++++++++++++++ 18 files changed, 1034 insertions(+), 176 deletions(-) create mode 100644 include/net/page_pool.h create mode 100644 net/core/page_pool.c