Message ID | cover.1610765285.git.xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
Headers | show |
Series | virtio-net support xdp socket zero copy xmit | expand |
On 2021/1/16 上午10:59, Xuan Zhuo wrote: > 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. > > And xsk's zerocopy rx has made major changes to virtio-net, and I hope to submit > it after this patch set are received. > > Compared with other drivers, virtio-net does not directly obtain the dma > address, so I first obtain the xsk page, and then pass the page to virtio. > > When recycling the sent packets, we have to distinguish between skb and xdp. > Now we have to distinguish between skb, xdp, xsk. So the second patch solves > this problem first. > > The last four patches are used to support xsk zerocopy in virtio-net: > > 1. support xsk enable/disable > 2. realize the function of xsk packet sending > 3. implement xsk wakeup callback > 4. set xsk completed when packet sent done > > > ---------------- Performance Testing ------------ > > The udp package tool implemented by the interface of xsk vs sockperf(kernel udp) > for performance testing: > > xsk zero copy in virtio-net: > CPU PPS MSGSIZE > 28.7% 3833857 64 > 38.5% 3689491 512 > 38.9% 2787096 1456 Some questions on the results: 1) What's the setup on the vhost? 2) What's the setup of the mitigation in both host and guest? 3) Any analyze on the possible bottleneck via perf or other tools? Thanks > > xsk without zero copy in virtio-net: > CPU PPS MSGSIZE > 100% 1916747 64 > 100% 1775988 512 > 100% 1440054 1456 > > sockperf: > CPU PPS MSGSIZE > 100% 713274 64 > 100% 701024 512 > 100% 695832 1456 > > Xuan Zhuo (7): > xsk: support get page for drv > virtio-net, xsk: distinguish XDP_TX and XSK XMIT ctx > xsk, virtio-net: prepare for support xsk zerocopy xmit > virtio-net, xsk: support xsk enable/disable > virtio-net, xsk: realize the function of xsk packet sending > virtio-net, xsk: implement xsk wakeup callback > virtio-net, xsk: set xsk completed when packet sent done > > drivers/net/virtio_net.c | 559 +++++++++++++++++++++++++++++++++++++++----- > include/linux/netdevice.h | 1 + > include/net/xdp_sock_drv.h | 10 + > include/net/xsk_buff_pool.h | 1 + > net/xdp/xsk_buff_pool.c | 10 +- > 5 files changed, 523 insertions(+), 58 deletions(-) > > -- > 1.8.3.1 >