All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 net-next 00/12] XDP in tx path
@ 2019-12-26  2:31 Prashant Bhole
  2019-12-26  2:31 ` [RFC v2 net-next 01/12] net: introduce BPF_XDP_EGRESS attach type for XDP Prashant Bhole
                   ` (12 more replies)
  0 siblings, 13 replies; 22+ messages in thread
From: Prashant Bhole @ 2019-12-26  2:31 UTC (permalink / raw)
  To: David S . Miller, Michael S . Tsirkin, Alexei Starovoitov,
	Daniel Borkmann, Jesper Dangaard Brouer
  Cc: Prashant Bhole, Jason Wang, David Ahern, Jakub Kicinski,
	John Fastabend, Toshiaki Makita, Martin KaFai Lau, Song Liu,
	Yonghong Song, Andrii Nakryiko, netdev

v2:
- New XDP attachment type: Jesper, Toke and Alexei discussed whether
  to introduce a new program type. Since this set adds a way to attach
  regular XDP program to the tx path, as per Alexei's suggestion, a
  new attachment type BPF_XDP_EGRESS is introduced.

- libbpf API changes:
  Alexei had suggested _opts() style of API extension. Considering it
  two new libbpf APIs are introduced which are equivalent to existing
  APIs. New ones can be extended easily. Please see individual patches
  for details. xdp1 sample program is modified to use new APIs.

- tun: Some patches from previous set are removed as they are
  irrelevant in this series. They will in introduced later.


This series introduces new XDP attachment type BPF_XDP_EGRESS to run
an XDP program in tx path. The idea is to emulate RX path XDP of the
peer interface. Such program will not have access to rxq info.

RFC also includes its usage in tun driver.
Later it can be posted separately. Another possible use of this
feature can be in veth driver. It can improve container networking
where veth pair links the host and the container. Host can set ACL by
setting tx path XDP to the veth interface.

It was originally a part of Jason Wang's work "XDP offload with
virtio-net" [1]. In order to simplify this work we decided to split
it and introduce tx path XDP separately in this set.

The performance improvment can be seen when an XDP program is attached
to tun tx path opposed to rx path in the guest.

* Case 1: When packets are XDP_REDIRECT'ed towards tun.

                     virtio-net rx XDP      tun tx XDP
  xdp1(XDP_DROP)        2.57 Mpps           12.90 Mpps
  xdp2(XDP_TX)          1.53 Mpps            7.15 Mpps

* Case 2: When packets are pass through bridge towards tun

                     virtio-net rx XDP      tun tx XDP
  xdp1(XDP_DROP)        0.99 Mpps           1.00 Mpps
  xdp2(XDP_TX)          1.19 Mpps           0.97 Mpps

Since this set modifies tun and vhost_net, below are the netperf
performance numbers.

    Netperf_test       Before      After   Difference
  UDP_STREAM 18byte     90.14       88.77    -1.51%
  UDP_STREAM 1472byte   6955        6658     -4.27%
  TCP STREAM            9409        9402     -0.07%
  UDP_RR                12658       13030    +2.93%
  TCP_RR                12711       12831    +0.94%

XDP_REDIRECT will be handled later because we need to come up with
proper way to handle it in tx path.

Patches 1-5 are related to adding tx path XDP support.
Patches 6-12 implement tx path XDP in tun driver.

[1]: https://netdevconf.info/0x13/session.html?xdp-offload-with-virtio-net



David Ahern (2):
  net: introduce BPF_XDP_EGRESS attach type for XDP
  tun: set tx path XDP program

Jason Wang (2):
  net: core: rename netif_receive_generic_xdp() to do_generic_xdp_core()
  net: core: export do_xdp_generic_core()

Prashant Bhole (8):
  tools: sync kernel uapi/linux/if_link.h header
  libbpf: api for getting/setting link xdp options
  libbpf: set xdp program in tx path
  samples/bpf: xdp1, add XDP tx support
  tuntap: check tun_msg_ctl type at necessary places
  vhost_net: user tap recvmsg api to access ptr ring
  tuntap: remove usage of ptr ring in vhost_net
  tun: run XDP program in tx path

 drivers/net/tap.c                  |  42 +++---
 drivers/net/tun.c                  | 220 ++++++++++++++++++++++++++---
 drivers/vhost/net.c                |  77 +++++-----
 include/linux/if_tap.h             |   5 -
 include/linux/if_tun.h             |  23 ++-
 include/linux/netdevice.h          |   6 +-
 include/uapi/linux/bpf.h           |   1 +
 include/uapi/linux/if_link.h       |   1 +
 net/core/dev.c                     |  42 ++++--
 net/core/filter.c                  |   8 ++
 net/core/rtnetlink.c               | 112 ++++++++++++++-
 samples/bpf/xdp1_user.c            |  42 ++++--
 tools/include/uapi/linux/bpf.h     |   1 +
 tools/include/uapi/linux/if_link.h |   2 +
 tools/lib/bpf/libbpf.h             |  40 ++++++
 tools/lib/bpf/libbpf.map           |   2 +
 tools/lib/bpf/netlink.c            | 113 +++++++++++++--
 17 files changed, 613 insertions(+), 124 deletions(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2020-01-11  0:53 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-26  2:31 [RFC v2 net-next 00/12] XDP in tx path Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 01/12] net: introduce BPF_XDP_EGRESS attach type for XDP Prashant Bhole
2019-12-27 14:27   ` Jesper Dangaard Brouer
2019-12-28  0:15     ` Prashant Bhole
2020-01-07 11:35       ` Toke Høiland-Jørgensen
2020-01-11  0:53         ` Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 02/12] tools: sync kernel uapi/linux/if_link.h header Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 03/12] libbpf: api for getting/setting link xdp options Prashant Bhole
2019-12-30  4:49   ` Andrii Nakryiko
2020-01-03 11:04     ` Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 04/12] libbpf: set xdp program in tx path Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 05/12] samples/bpf: xdp1, add XDP tx support Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 06/12] net: core: rename netif_receive_generic_xdp() to do_generic_xdp_core() Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 07/12] net: core: export do_xdp_generic_core() Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 08/12] tuntap: check tun_msg_ctl type at necessary places Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 09/12] vhost_net: user tap recvmsg api to access ptr ring Prashant Bhole
2019-12-26  9:05   ` kbuild test robot
2019-12-26  2:31 ` [RFC v2 net-next 10/12] tuntap: remove usage of ptr ring in vhost_net Prashant Bhole
2019-12-26  2:31 ` [RFC v2 net-next 11/12] tun: set tx path XDP program Prashant Bhole
2019-12-26  2:32 ` [RFC v2 net-next 12/12] tun: run XDP program in tx path Prashant Bhole
2019-12-26 19:23 ` [RFC v2 net-next 00/12] XDP " Tom Herbert
2019-12-27  1:35   ` Prashant Bhole

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.