From: "Björn Töpel" <bjorn.topel@gmail.com> To: ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, bpf@vger.kernel.org Cc: "Björn Töpel" <bjorn.topel@gmail.com>, bjorn.topel@intel.com, magnus.karlsson@intel.com, maciej.fijalkowski@intel.com, kuba@kernel.org, jonathan.lemon@gmail.com, maximmi@nvidia.com, davem@davemloft.net, hawk@kernel.org, john.fastabend@gmail.com, ciara.loftus@intel.com, weqaar.a.janjua@intel.com Subject: [PATCH bpf-next v2 0/8] Introduce bpf_redirect_xsk() helper Date: Tue, 19 Jan 2021 16:50:05 +0100 [thread overview] Message-ID: <20210119155013.154808-1-bjorn.topel@gmail.com> (raw) This series extends bind() for XDP sockets, so that the bound socket is added to the netdev_rx_queue _rx array in the netdevice. We call this to register the socket. To redirect packets to the registered socket, a new BPF helper is used: bpf_redirect_xsk(). For shared XDP sockets, only the first bound socket is registered. Users that need more complex setup has to use XSKMAP and bpf_redirect_map(). Now, why would one use bpf_redirect_xsk() over the regular bpf_redirect_map() helper? * Better performance! * Convenience; Most user use one socket per queue. This scenario is what registered sockets support. There is no need to create an XSKMAP. This can also reduce complexity from containerized setups, where users might what to use XDP sockets without CAP_SYS_ADMIN capabilities. The first patch restructures xdp_do_redirect() a bit, to make it easier to add the new helper. This restructure also give us a slight performance benefit. The following three patches extends bind() and adds the new helper. After that, two libbpf patches that selects XDP program based on what kernel is running. Finally, selftests for the new functionality is added. Note that the libbpf "auto-selection" is based on kernel version, so it is hard coded to the "-next" version (5.12). If you would like to try this is out, you will need to change the libbpf patch locally! Thanks to Maciej and Magnus for the internal review/comments! Performance (rxdrop, zero-copy) Baseline Two cores: 21.3 Mpps One core: 24.5 Mpps Patched Two cores, bpf_redirect_map: 21.7 Mpps + 2% One core, bpf_redirect_map: 24.9 Mpps + 2% Two cores, bpf_redirect_xsk: 24.0 Mpps +13% One core, bpf_redirect_xsk: 25.5 Mpps + 4% Thanks! Björn v1->v2: * Added missing XDP programs to selftests. * Fixed checkpatch warning in selftests. Björn Töpel (8): xdp: restructure redirect actions xsk: remove explicit_free parameter from __xsk_rcv() xsk: fold xp_assign_dev and __xp_assign_dev xsk: register XDP sockets at bind(), and add new AF_XDP BPF helper libbpf, xsk: select AF_XDP BPF program based on kernel version libbpf, xsk: select bpf_redirect_xsk(), if supported selftest/bpf: add XDP socket tests for bpf_redirect_{xsk, map}() selftest/bpf: remove a lot of ifobject casting in xdpxceiver include/linux/filter.h | 10 + include/linux/netdevice.h | 1 + include/net/xdp_sock.h | 12 + include/net/xsk_buff_pool.h | 2 +- include/trace/events/xdp.h | 46 ++-- include/uapi/linux/bpf.h | 7 + net/core/filter.c | 205 ++++++++++-------- net/xdp/xsk.c | 112 ++++++++-- net/xdp/xsk_buff_pool.c | 12 +- tools/include/uapi/linux/bpf.h | 7 + tools/lib/bpf/libbpf.c | 2 +- tools/lib/bpf/libbpf_internal.h | 2 + tools/lib/bpf/libbpf_probes.c | 16 -- tools/lib/bpf/xsk.c | 83 ++++++- .../selftests/bpf/progs/xdpxceiver_ext1.c | 15 ++ .../selftests/bpf/progs/xdpxceiver_ext2.c | 9 + tools/testing/selftests/bpf/test_xsk.sh | 48 ++++ tools/testing/selftests/bpf/xdpxceiver.c | 164 +++++++++----- tools/testing/selftests/bpf/xdpxceiver.h | 2 + 19 files changed, 554 insertions(+), 201 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/xdpxceiver_ext1.c create mode 100644 tools/testing/selftests/bpf/progs/xdpxceiver_ext2.c base-commit: 95204c9bfa48d2f4d3bab7df55c1cc823957ff81 -- 2.27.0
next reply other threads:[~2021-01-19 18:29 UTC|newest] Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-19 15:50 Björn Töpel [this message] 2021-01-19 15:50 ` [PATCH bpf-next v2 1/8] xdp: restructure redirect actions Björn Töpel 2021-01-20 12:44 ` Toke Høiland-Jørgensen 2021-01-20 13:40 ` Björn Töpel 2021-01-20 14:52 ` Toke Høiland-Jørgensen 2021-01-20 15:49 ` Björn Töpel 2021-01-20 16:30 ` Toke Høiland-Jørgensen 2021-01-20 17:26 ` Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 2/8] xsk: remove explicit_free parameter from __xsk_rcv() Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 3/8] xsk: fold xp_assign_dev and __xp_assign_dev Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 4/8] xsk: register XDP sockets at bind(), and add new AF_XDP BPF helper Björn Töpel 2021-01-20 8:25 ` kernel test robot 2021-01-20 8:41 ` Björn Töpel 2021-01-20 8:50 ` kernel test robot 2021-01-20 12:50 ` Toke Høiland-Jørgensen 2021-01-20 13:25 ` Björn Töpel 2021-01-20 14:54 ` Toke Høiland-Jørgensen 2021-01-20 15:18 ` Björn Töpel 2021-01-20 17:29 ` Toke Høiland-Jørgensen 2021-01-20 18:22 ` Björn Töpel 2021-01-20 20:26 ` Toke Høiland-Jørgensen 2021-01-20 21:15 ` Alexei Starovoitov 2021-01-21 8:18 ` Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 5/8] libbpf, xsk: select AF_XDP BPF program based on kernel version Björn Töpel 2021-01-20 12:52 ` Toke Høiland-Jørgensen 2021-01-20 13:25 ` Björn Töpel 2021-01-20 14:49 ` Björn Töpel 2021-01-20 15:11 ` Toke Høiland-Jørgensen 2021-01-20 15:27 ` Björn Töpel 2021-01-20 17:30 ` Toke Høiland-Jørgensen 2021-01-20 18:25 ` Alexei Starovoitov 2021-01-20 18:30 ` Björn Töpel 2021-01-20 14:56 ` Toke Høiland-Jørgensen 2021-01-19 15:50 ` [PATCH bpf-next v2 6/8] libbpf, xsk: select bpf_redirect_xsk(), if supported Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 7/8] selftest/bpf: add XDP socket tests for bpf_redirect_{xsk, map}() Björn Töpel 2021-01-21 7:39 ` Andrii Nakryiko 2021-01-21 12:31 ` Björn Töpel 2021-01-19 15:50 ` [PATCH bpf-next v2 8/8] selftest/bpf: remove a lot of ifobject casting in xdpxceiver Björn Töpel 2021-01-20 13:15 ` [PATCH bpf-next v2 0/8] Introduce bpf_redirect_xsk() helper Maxim Mikityanskiy 2021-01-20 13:27 ` Björn Töpel 2021-01-20 15:57 ` Jesper Dangaard Brouer 2021-01-20 16:19 ` Maciej Fijalkowski 2021-01-21 17:01 ` Jesper Dangaard Brouer 2021-01-22 8:59 ` Magnus Karlsson 2021-01-22 9:45 ` Maciej Fijalkowski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210119155013.154808-1-bjorn.topel@gmail.com \ --to=bjorn.topel@gmail.com \ --cc=ast@kernel.org \ --cc=bjorn.topel@intel.com \ --cc=bpf@vger.kernel.org \ --cc=ciara.loftus@intel.com \ --cc=daniel@iogearbox.net \ --cc=davem@davemloft.net \ --cc=hawk@kernel.org \ --cc=john.fastabend@gmail.com \ --cc=jonathan.lemon@gmail.com \ --cc=kuba@kernel.org \ --cc=maciej.fijalkowski@intel.com \ --cc=magnus.karlsson@intel.com \ --cc=maximmi@nvidia.com \ --cc=netdev@vger.kernel.org \ --cc=weqaar.a.janjua@intel.com \ --subject='Re: [PATCH bpf-next v2 0/8] Introduce bpf_redirect_xsk() helper' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).