From: Maxim Mikityanskiy <maximmi@nvidia.com> To: "Björn Töpel" <bjorn.topel@gmail.com>, ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, bpf@vger.kernel.org Cc: <bjorn.topel@intel.com>, <magnus.karlsson@intel.com>, <maciej.fijalkowski@intel.com>, <kuba@kernel.org>, <jonathan.lemon@gmail.com>, <davem@davemloft.net>, <hawk@kernel.org>, <john.fastabend@gmail.com>, <ciara.loftus@intel.com>, <weqaar.a.janjua@intel.com> Subject: Re: [PATCH bpf-next v2 0/8] Introduce bpf_redirect_xsk() helper Date: Wed, 20 Jan 2021 15:15:22 +0200 [thread overview] Message-ID: <7dcee85b-b3ef-947f-f433-03ad7066c5dd@nvidia.com> (raw) In-Reply-To: <20210119155013.154808-1-bjorn.topel@gmail.com> On 2021-01-19 17:50, Björn Töpel wrote: > 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 Two cores is slower? It used to be faster all the time, didn't it? > 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% Nice, impressive improvement! > 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 >
next prev parent reply other threads:[~2021-01-20 13:19 UTC|newest] Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-19 15:50 Björn Töpel 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 ` Maxim Mikityanskiy [this message] 2021-01-20 13:27 ` [PATCH bpf-next v2 0/8] Introduce bpf_redirect_xsk() helper 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=7dcee85b-b3ef-947f-f433-03ad7066c5dd@nvidia.com \ --to=maximmi@nvidia.com \ --cc=ast@kernel.org \ --cc=bjorn.topel@gmail.com \ --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=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).