XDP socket(AF_XDP) is an excellent bypass kernel network 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.
Virtio-net did not support per-queue reset, so it was impossible to support XDP
Socket Zerocopy. At present, we have completed the work of Virtio Spec and
Kernel in Per-Queue Reset. It is time for Virtio-Net to complete the support for
the XDP Socket Zerocopy.
Virtio-net can not increase the queue at will, so xsk shares the queue with
kernel.
On the other hand, Virtio-Net does not support generate interrupt manually, so
when we wakeup tx xmit, we used some tips. If the CPU run by TX NAPI last time
is other CPUs, use IPI to wake up NAPI on the remote CPU. If it is also the
local CPU, then we wake up sofrirqd.
Please review.
Thanks.
Xuan Zhuo (33):
virtio_ring: virtqueue_add() support premapped
virtio_ring: split: virtqueue_add_split() support premapped
virtio_ring: packed: virtqueue_add_packed() support premapped
virtio_ring: introduce virtqueue_add_outbuf_premapped()
virtio_ring: introduce virtqueue_add_inbuf_premapped()
virtio_ring: introduce virtqueue_reset()
virtio_ring: add api virtio_dma_map() for advance dma
virtio_ring: introduce dma sync api for virtio
xsk: xsk_buff_pool add callback for dma_sync
xsk: support virtio DMA map
virtio_net: rename free_old_xmit_skbs to free_old_xmit
virtio_net: unify the code for recycling the xmit ptr
virtio_net: virtnet_poll_tx support rescheduled
virtio_net: independent directory
virtio_net: move to virtio_net.h
virtio_net: introduce virtnet_xdp_handler() to seprate the logic of
run xdp
virtio_net: receive_small() use virtnet_xdp_handler()
virtio_net: receive_merageable() use virtnet_xdp_handler()
virtio_net: introduce virtnet_tx_reset()
virtio_net: xsk: introduce virtnet_rq_bind_xsk_pool()
virtio_net: xsk: introduce virtnet_xsk_pool_enable()
virtio_net: xsk: introduce xsk disable
virtio_net: xsk: support xsk setup
virtio_net: xsk: stop disable tx napi
virtio_net: xsk: __free_old_xmit distinguishes xsk buffer
virtio_net: virtnet_sq_free_unused_buf() check xsk buffer
virtio_net: virtnet_rq_free_unused_buf() check xsk buffer
net: introduce napi_tx_raise()
virtio_net: xsk: tx: support tx
virtio_net: xsk: tx: support wakeup
virtio_net: xsk: tx: auto wakeup when free old xmit
virtio_net: xsk: rx: introduce add_recvbuf_xsk()
virtio_net: xsk: rx: introduce receive_xsk() to recv xsk buffer
MAINTAINERS | 2 +-
drivers/net/Kconfig | 8 +-
drivers/net/Makefile | 2 +-
drivers/net/virtio/Kconfig | 11 +
drivers/net/virtio/Makefile | 8 +
drivers/net/{virtio_net.c => virtio/main.c} | 564 +++++++-------------
drivers/net/virtio/virtio_net.h | 317 +++++++++++
drivers/net/virtio/xsk.c | 524 ++++++++++++++++++
drivers/net/virtio/xsk.h | 33 ++
drivers/virtio/virtio_ring.c | 376 +++++++++++--
include/linux/netdevice.h | 7 +
include/linux/virtio.h | 29 +
include/net/xsk_buff_pool.h | 6 +
net/core/dev.c | 11 +
net/xdp/xsk_buff_pool.c | 79 ++-
15 files changed, 1541 insertions(+), 436 deletions(-)
create mode 100644 drivers/net/virtio/Kconfig
create mode 100644 drivers/net/virtio/Makefile
rename drivers/net/{virtio_net.c => virtio/main.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.32.0.3.g01195cf9f
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization