[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 0/5] ebpf: Added ebpf helper for libvirtd.
From: |
Jason Wang |
Subject: |
Re: [PATCH 0/5] ebpf: Added ebpf helper for libvirtd. |
Date: |
Tue, 17 Aug 2021 13:49:07 +0800 |
On Mon, Aug 16, 2021 at 7:58 PM Yuri Benditovich
<yuri.benditovich@daynix.com> wrote:
>
> Jason,
> Can you please review the series?
WIll do it this week.
Thanks
>
> Thanks,
> Yuri
>
> On Thu, Jul 22, 2021 at 11:38 AM Andrew Melnichenko <andrew@daynix.com> wrote:
> >
> > ping
> >
> > On Tue, Jul 13, 2021 at 6:38 PM Andrew Melnychenko <andrew@daynix.com>
> > wrote:
> >>
> >> Libvirt usually launches qemu with strict permissions.
> >> To enable eBPF RSS steering, qemu-ebpf-rss-helper was added.
> >>
> >> Added property "ebpf_rss_fds" for "virtio-net" that allows to
> >> initialize eBPF RSS context with passed program & maps fds.
> >>
> >> Added qemu-ebpf-rss-helper - simple helper that loads eBPF
> >> context and passes fds through unix socket.
> >> Libvirt should call the helper and pass fds to qemu through
> >> "ebpf_rss_fds" property.
> >>
> >> Added explicit target OS check for libbpf dependency in meson.
> >> eBPF RSS works only with Linux TAP, so there is no reason to
> >> build eBPF loader/helper for non-Linux.
> >>
> >> Changed Qemu updates eBPF maps to array mmaping. Mmaping allows
> >> bypassing unprivileged BPF map update. Also, instead of 3 maps
> >> (config, key and indirection table) there is one map that
> >> combines everything.
> >>
> >> Added helper stamp. To check that helper was build with qemu,
> >> qemu would check helper symbols that should contain the stamp.
> >> It was done similar to qemu modules, but checking was performed
> >> by the helper's ELF parsing.
> >>
> >> Overall, libvirt process should not be aware of the "interface"
> >> of eBPF RSS, it will not be aware of eBPF maps/program "type" and
> >> their quantity. That's why qemu and the helper should be from
> >> the same build and be "synchronized". Technically each qemu may
> >> have its own helper. That's why "query-helper-paths" qmp command
> >> was added. Qemu should return the path to the helper that suits
> >> and libvirt should use "that" helper for "that" emulator.
> >>
> >> qmp sample:
> >> C: { "execute": "query-helper-paths" }
> >> S: { "return": [
> >> {
> >> "name": "qemu-ebpf-rss-helper",
> >> "path": "/usr/local/libexec/qemu-ebpf-rss-helper"
> >> }
> >> ]
> >> }
> >>
> >> Changes since v1:
> >> * Mmap() used instead if bpf_map_update_elem().
> >> * Added helper stamp.
> >>
> >> Andrew Melnychenko (5):
> >> ebpf: Added eBPF initialization by fds and map update.
> >> virtio-net: Added property to load eBPF RSS with fds.
> >> qmp: Added the helper stamp check.
> >> ebpf_rss_helper: Added helper for eBPF RSS.
> >> qmp: Added qemu-ebpf-rss-path command.
> >>
> >> ebpf/ebpf_rss-stub.c | 6 +
> >> ebpf/ebpf_rss.c | 120 ++++---
> >> ebpf/ebpf_rss.h | 8 +-
> >> ebpf/qemu-ebpf-rss-helper.c | 130 +++++++
> >> ebpf/rss.bpf.skeleton.h | 557 +++++++++++++++---------------
> >> hw/net/virtio-net.c | 77 ++++-
> >> include/hw/virtio/virtio-net.h | 1 +
> >> meson.build | 47 ++-
> >> monitor/meson.build | 1 +
> >> monitor/qemu-helper-stamp-utils.c | 297 ++++++++++++++++
> >> monitor/qemu-helper-stamp-utils.h | 24 ++
> >> monitor/qmp-cmds.c | 32 ++
> >> qapi/misc.json | 33 ++
> >> tools/ebpf/rss.bpf.c | 67 ++--
> >> 14 files changed, 990 insertions(+), 410 deletions(-)
> >> create mode 100644 ebpf/qemu-ebpf-rss-helper.c
> >> create mode 100644 monitor/qemu-helper-stamp-utils.c
> >> create mode 100644 monitor/qemu-helper-stamp-utils.h
> >>
> >> --
> >> 2.31.1
> >>
>