[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210610082209.91487-1-xuanzhuo@linux.alibaba.com>
Date: Thu, 10 Jun 2021 16:21:54 +0800
From: Xuan Zhuo <xuanzhuo@...ux.alibaba.com>
To: netdev@...r.kernel.org
Cc: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
"Michael S. Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
Björn Töpel <bjorn@...nel.org>,
Magnus Karlsson <magnus.karlsson@...el.com>,
Jonathan Lemon <jonathan.lemon@...il.com>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Jesper Dangaard Brouer <hawk@...nel.org>,
John Fastabend <john.fastabend@...il.com>,
Andrii Nakryiko <andrii@...nel.org>,
Martin KaFai Lau <kafai@...com>,
Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>,
KP Singh <kpsingh@...nel.org>,
Xuan Zhuo <xuanzhuo@...ux.alibaba.com>,
virtualization@...ts.linux-foundation.org, bpf@...r.kernel.org,
"dust . li" <dust.li@...ux.alibaba.com>
Subject: [PATCH net-next v5 00/15] virtio-net: support xdp socket zero copy
XDP socket is an excellent by pass kernel network transmission framework. The
zero copy feature of xsk (XDP socket) needs to be supported by the driver. The
performance of zero copy is very good. mlx5 and intel ixgbe already support this
feature, This patch set allows virtio-net to support xsk's zerocopy xmit
feature.
Compared with other drivers, the trouble with virtio-net is that when we bind
the channel to xsk, we cannot directly disable/enable the channel. So we have to
consider the buf that has been placed in the vq after the xsk is released by the
upper layer.
My solution is to add a ctx to each buf placed in vq to record the page used,
and add a reference to the page. So when the upper xsk is released, these pages
are still safe in vq. We will process these bufs when we recycle buf or
receive new data.
In the case of rx, it will be more complicated, because we may encounter the buf
of xsk, or it may be a normal buf. Especially in the case of merge, we may
receive multiple bufs, and these bufs may be xsk buf and normal are
mixed together.
v5:
support rx
v4:
1. add priv_flags IFF_NOT_USE_DMA_ADDR
2. more reasonable patch split
Xuan Zhuo (15):
netdevice: priv_flags extend to 64bit
netdevice: add priv_flags IFF_NOT_USE_DMA_ADDR
virtio-net: add priv_flags IFF_NOT_USE_DMA_ADDR
xsk: XDP_SETUP_XSK_POOL support option IFF_NOT_USE_DMA_ADDR
virtio: support virtqueue_detach_unused_buf_ctx
virtio-net: unify the code for recycling the xmit ptr
virtio-net: standalone virtnet_aloc_frag function
virtio-net: split the receive_mergeable function
virtio-net: virtnet_poll_tx support budget check
virtio-net: independent directory
virtio-net: move to virtio_net.h
virtio-net: support AF_XDP zc tx
virtio-net: support AF_XDP zc rx
virtio-net: xsk direct xmit inside xsk wakeup
virtio-net: xsk zero copy xmit kick by threshold
MAINTAINERS | 2 +-
drivers/net/Kconfig | 8 +-
drivers/net/Makefile | 2 +-
drivers/net/virtio/Kconfig | 11 +
drivers/net/virtio/Makefile | 7 +
drivers/net/{ => virtio}/virtio_net.c | 670 +++++++++++-----------
drivers/net/virtio/virtio_net.h | 288 ++++++++++
drivers/net/virtio/xsk.c | 766 ++++++++++++++++++++++++++
drivers/net/virtio/xsk.h | 176 ++++++
drivers/virtio/virtio_ring.c | 22 +-
include/linux/netdevice.h | 143 ++---
include/linux/virtio.h | 2 +
net/8021q/vlanproc.c | 2 +-
net/xdp/xsk_buff_pool.c | 2 +-
14 files changed, 1664 insertions(+), 437 deletions(-)
create mode 100644 drivers/net/virtio/Kconfig
create mode 100644 drivers/net/virtio/Makefile
rename drivers/net/{ => virtio}/virtio_net.c (92%)
create mode 100644 drivers/net/virtio/virtio_net.h
create mode 100644 drivers/net/virtio/xsk.c
create mode 100644 drivers/net/virtio/xsk.h
--
2.31.0
Powered by blists - more mailing lists