qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 0/7] eBPF RSS support for virtio-net


From: Yuri Benditovich
Subject: Re: [PATCH v5 0/7] eBPF RSS support for virtio-net
Date: Fri, 2 Apr 2021 08:25:13 +0300

More correctly, https://bugzilla.redhat.com/show_bug.cgi?id=1865786

On Fri, Apr 2, 2021 at 8:21 AM Yuri Benditovich
<yuri.benditovich@daynix.com> wrote:
>
> Hi Jason,
>
> Yes, the work to support RSS in the Linux virtio-net driver is in progress.
> https://bugzilla.redhat.com/show_bug.cgi?id=1912082
>
> On Fri, Apr 2, 2021 at 5:57 AM Jason Wang <jasowang@redhat.com> wrote:
> >
> >
> > 在 2021/3/25 下午11:35, Andrew Melnychenko 写道:
> > > This set of patches introduces the usage of eBPF for packet steering
> > > and RSS hash calculation:
> > > * RSS(Receive Side Scaling) is used to distribute network packets to
> > > guest virtqueues by calculating packet hash
> > > * Additionally adding support for the usage of RSS with vhost
> > >
> > > The eBPF works on kernels 5.8+
> > > On earlier kerneld it fails to load and the RSS feature is reported
> > > only without vhost and implemented in 'in-qemu' software.
> > >
> > > Implementation notes:
> > > Linux TAP TUNSETSTEERINGEBPF ioctl was used to set the eBPF program.
> > > Added libbpf dependency and eBPF support.
> > > The eBPF program is part of the qemu and presented as an array
> > > of BPF ELF file data. The eBPF array file initially generated by bpftool.
> > > The compilation of eBPF is not part of QEMU build and can be done
> > > using provided Makefile.ebpf.
> > > Added changes to virtio-net and vhost, primary eBPF RSS is used.
> > > 'in-qemu' RSS used in the case of hash population and as a fallback 
> > > option.
> > > For vhost, the hash population feature is not reported to the guest.
> > >
> > > Please also see the documentation in PATCH 6/7.
> > >
> > > Known issues:
> > > * hash population not supported by eBPF RSS: 'in-qemu' RSS used
> > > as a fallback, also, hash population feature is not reported to guests
> > > with vhost.
> > > * IPv6 extensions still in progress.
> >
> >
> > Hi Andrew:
> >
> > The patch looks good at a glance. I tend to queue it for 6.1.
> >
> > One issue is that, there's no easy way for testing it without a windows
> > guest.
> >
> > Do you have plan to extend Linux driver to support RSS (e.g via ethtool?).
> >
> > Thanks
> >
> >
> > >
> > > Changes since v1:
> > > * using libbpf instead of direct 'bpf' system call.
> > > * added libbpf dependency to the configure/meson scripts.
> > > * changed python script for eBPF .h file generation.
> > > * changed eBPF program - reading L3 proto from ethernet frame.
> > > * added TUNSETSTEERINGEBPF define for TUN.
> > > * changed the maintainer's info.
> > > * added license headers.
> > > * refactored code.
> > >
> > > Changes since v2:
> > > * using bpftool for eBPF skeleton generation.
> > > * ebpf_rss is refactored to use skeleton generated by bpftool.
> > > * added/adjasted license in comment sections and in eBPF file.
> > > * rss.bpf.c and Makefile.ebpf moved to the tool/ebpf folder.
> > > * virtio-net eBPF rss refactored. Now eBPF initialized during realize().
> > >
> > > Changes since v3:
> > > * rebased to last master.
> > > * fixed issue with failed build without libbpf.
> > > * fixed ebpf loading without rss option.
> > > * refactored labels in ebpf_rss.c
> > >
> > > Changes since v4:
> > > * refactored configure/meson script.
> > > * added checks for load_bytes in ebpf.
> > > * documentation added to the index.
> > > * refactored Makefile and rss.bpf.c.
> > > * rebased to last master.
> > >
> > > Andrew (7):
> > >    net/tap: Added TUNSETSTEERINGEBPF code.
> > >    net: Added SetSteeringEBPF method for NetClientState.
> > >    ebpf: Added eBPF RSS program.
> > >    ebpf: Added eBPF RSS loader.
> > >    virtio-net: Added eBPF RSS to virtio-net.
> > >    docs: Added eBPF documentation.
> > >    MAINTAINERS: Added eBPF maintainers information.
> > >
> > >   MAINTAINERS                    |   8 +
> > >   configure                      |   8 +-
> > >   docs/devel/ebpf_rss.rst        | 125 ++++++++
> > >   docs/devel/index.rst           |   1 +
> > >   ebpf/ebpf_rss-stub.c           |  40 +++
> > >   ebpf/ebpf_rss.c                | 165 ++++++++++
> > >   ebpf/ebpf_rss.h                |  44 +++
> > >   ebpf/meson.build               |   1 +
> > >   ebpf/rss.bpf.skeleton.h        | 423 +++++++++++++++++++++++++
> > >   ebpf/trace-events              |   4 +
> > >   ebpf/trace.h                   |   2 +
> > >   hw/net/vhost_net.c             |   3 +
> > >   hw/net/virtio-net.c            | 115 ++++++-
> > >   include/hw/virtio/virtio-net.h |   4 +
> > >   include/net/net.h              |   2 +
> > >   meson.build                    |   9 +
> > >   meson_options.txt              |   2 +
> > >   net/tap-bsd.c                  |   5 +
> > >   net/tap-linux.c                |  13 +
> > >   net/tap-linux.h                |   1 +
> > >   net/tap-solaris.c              |   5 +
> > >   net/tap-stub.c                 |   5 +
> > >   net/tap.c                      |   9 +
> > >   net/tap_int.h                  |   1 +
> > >   net/vhost-vdpa.c               |   2 +
> > >   tools/ebpf/Makefile.ebpf       |  22 ++
> > >   tools/ebpf/rss.bpf.c           | 552 +++++++++++++++++++++++++++++++++
> > >   27 files changed, 1567 insertions(+), 4 deletions(-)
> > >   create mode 100644 docs/devel/ebpf_rss.rst
> > >   create mode 100644 ebpf/ebpf_rss-stub.c
> > >   create mode 100644 ebpf/ebpf_rss.c
> > >   create mode 100644 ebpf/ebpf_rss.h
> > >   create mode 100644 ebpf/meson.build
> > >   create mode 100644 ebpf/rss.bpf.skeleton.h
> > >   create mode 100644 ebpf/trace-events
> > >   create mode 100644 ebpf/trace.h
> > >   create mode 100755 tools/ebpf/Makefile.ebpf
> > >   create mode 100644 tools/ebpf/rss.bpf.c
> > >
> >



reply via email to

[Prev in Thread] Current Thread [Next in Thread]