ping On Tue, Jul 13, 2021 at 6:38 PM Andrew Melnychenko 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 > >