[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
> > >
> >