Jason, Can you please review the series? Thanks, Yuri
On Thu, Jul 22, 2021 at 11:38 AM Andrew Melnichenko <and...@daynix.com> wrote: > > ping > > On Tue, Jul 13, 2021 at 6:38 PM Andrew Melnychenko <and...@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 >>