From: Jesper Dangaard Brouer <brouer@redhat.com>
To: netdev@vger.kernel.org, Daniel Borkmann <borkmann@iogearbox.net>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Jesper Dangaard Brouer <brouer@redhat.com>
Cc: liu.song.a23@gmail.com, songliubraving@fb.com,
John Fastabend <john.fastabend@gmail.com>
Subject: [bpf-next V2 PATCH 7/8] bpf/xdp: non-map redirect can avoid calling ndo_xdp_flush
Date: Thu, 31 May 2018 11:00:18 +0200 [thread overview]
Message-ID: <152775721817.24817.11576562399044807823.stgit@firesoul> (raw)
In-Reply-To: <152775714013.24817.5067576840614810786.stgit@firesoul>
This is the first real user of the XDP_XMIT_FLUSH flag.
As pointed out many times, XDP_REDIRECT without using BPF maps is
significant slower than the map variant. This is primary due to the
lack of bulking, as the ndo_xdp_flush operation is required after each
frame (to avoid frames hanging on the egress device).
It is still possible to optimize this case. Instead of invoking two
NDO indirect calls, which are very expensive with CONFIG_RETPOLINE,
instead instruct ndo_xdp_xmit to flush via XDP_XMIT_FLUSH flag.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
net/core/filter.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/core/filter.c b/net/core/filter.c
index 6a21dbcad350..6981b4608979 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3056,10 +3056,9 @@ static int __bpf_tx_xdp(struct net_device *dev,
if (unlikely(!xdpf))
return -EOVERFLOW;
- sent = dev->netdev_ops->ndo_xdp_xmit(dev, 1, &xdpf, 0);
+ sent = dev->netdev_ops->ndo_xdp_xmit(dev, 1, &xdpf, XDP_XMIT_FLUSH);
if (sent <= 0)
return sent;
- dev->netdev_ops->ndo_xdp_flush(dev);
return 0;
}
next prev parent reply other threads:[~2018-05-31 9:00 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-31 8:59 [bpf-next V2 PATCH 0/8] bpf/xdp: add flags argument to ndo_xdp_xmit and flag flush operation Jesper Dangaard Brouer
2018-05-31 8:59 ` [bpf-next V2 PATCH 1/8] xdp: add flags argument to ndo_xdp_xmit API Jesper Dangaard Brouer
2018-05-31 8:59 ` [bpf-next V2 PATCH 2/8] i40e: implement flush flag for ndo_xdp_xmit Jesper Dangaard Brouer
2018-06-04 13:11 ` Daniel Borkmann
2018-05-31 8:59 ` [bpf-next V2 PATCH 3/8] ixgbe: " Jesper Dangaard Brouer
2018-05-31 16:14 ` Song Liu
2018-06-04 13:19 ` Daniel Borkmann
2018-06-04 13:53 ` Jesper Dangaard Brouer
2018-05-31 9:00 ` [bpf-next V2 PATCH 4/8] tun: " Jesper Dangaard Brouer
2018-05-31 16:14 ` Song Liu
2018-05-31 9:00 ` [bpf-next V2 PATCH 5/8] virtio_net: " Jesper Dangaard Brouer
2018-05-31 16:15 ` Song Liu
2018-05-31 9:00 ` [bpf-next V2 PATCH 6/8] xdp: done implementing ndo_xdp_xmit flush flag for all drivers Jesper Dangaard Brouer
2018-05-31 16:16 ` Song Liu
2018-05-31 9:00 ` Jesper Dangaard Brouer [this message]
2018-05-31 16:16 ` [bpf-next V2 PATCH 7/8] bpf/xdp: non-map redirect can avoid calling ndo_xdp_flush Song Liu
2018-05-31 9:00 ` [bpf-next V2 PATCH 8/8] bpf/xdp: devmap " Jesper Dangaard Brouer
2018-05-31 16:06 ` Song Liu
2018-06-03 15:17 ` [bpf-next V2 PATCH 0/8] bpf/xdp: add flags argument to ndo_xdp_xmit and flag flush operation Alexei Starovoitov
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=152775721817.24817.11576562399044807823.stgit@firesoul \
--to=brouer@redhat.com \
--cc=alexei.starovoitov@gmail.com \
--cc=borkmann@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=liu.song.a23@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox