ping On Mon, Jul 29, 2024 at 10:49 PM Andrew Melnychenko <andrew@xxxxxxxxxx> wrote: > > This series of rfc patches adds support for loading the RSS eBPF > program and passing it to the QEMU. > Comments and suggestions would be useful. > > QEMU with vhost may work with RSS through eBPF. To load eBPF, > the capabilities required that Libvirt may provide. > eBPF program and maps may be unique for particular QEMU and > Libvirt retrieves eBPF through qapi. > For now, there is only "RSS" eBPF object in QEMU, in the future, > there may be another one(g.e. network filters). > That's why in Libvirt added logic to load and store any > eBPF object that QEMU provides using qapi schema. > > One of the reasons why this series of patches is in RFC are tests. > To this series of patches, the tests were added. > For now, the tests are synthetic, the proper "reply" file should > be generated with a new "caps" file. Currently, there are changes > in caps-9.0.0* and caps-9.1.0 files. There was added support for > ebpf_rss_fds feature, and request-ebpf command. > So, overall, the tests are required for review, comment, and discussion > how we want them to be implemented in the future. > > For virtio-net RSS, the document has not changed. > ``` > <interface type="network"> > <model type="virtio"/> > <driver queues="4" rss="on" rss_hash_report="off"/> > <interface type="network"> > ``` > > Simplified routine for RSS: > * Libvirt retrieves eBPF "RSS" and load it. > * Libvirt passes file descriptors to virtio-net with property "ebpf_rss_fds" ("rss" property should be "on" too). > * if fds was provided - QEMU using eBPF RSS implementation. > * if fds was not provided - QEMU tries to load eBPF RSS in own context and use it. > * if eBPF RSS was not loaded - QEMU uses "in-qemu" RSS(vhost not supported). > > Changes since RFC v3: > * changed tests a bit > * refactored and rebased > * removed "allowEBPF" from qemu config(now env is used for tests) > > Changes since RFC v2: > * refactored and rebased. > * applied changes according to the Qemu. > * added basic test. > > Changes since RFC v1: > * changed eBPF format saved in the XML cache. > * refactored and checked with syntax test. > * refactored patch hunks. > > Andrew Melnychenko (5): > qemu_monitor: Added QEMU's "request-ebpf" support. > qemu_capabilities: Added logic for retrieving eBPF objects from QEMU. > qemu_interface: Added routine for loading the eBPF objects. > qemu_command: Added "ebpf_rss_fds" support for virtio-net. > tests: Added tests for eBPF blob loading. > > libvirt.spec.in | 3 + > meson.build | 7 + > meson_options.txt | 1 + > src/qemu/meson.build | 1 + > src/qemu/qemu_capabilities.c | 132 ++++++++++++ > src/qemu/qemu_capabilities.h | 5 + > src/qemu/qemu_command.c | 60 ++++++ > src/qemu/qemu_domain.c | 4 + > src/qemu/qemu_domain.h | 3 + > src/qemu/qemu_interface.c | 87 ++++++++ > src/qemu/qemu_interface.h | 7 + > src/qemu/qemu_monitor.c | 9 + > src/qemu/qemu_monitor.h | 4 + > src/qemu/qemu_monitor_json.c | 27 +++ > src/qemu/qemu_monitor_json.h | 4 + > .../caps_9.0.0_sparc.replies | 95 +++++---- > .../qemucapabilitiesdata/caps_9.0.0_sparc.xml | 3 + > .../caps_9.0.0_x86_64.replies | 199 ++++++++++-------- > .../caps_9.0.0_x86_64.xml | 4 + > .../caps_9.1.0_x86_64.replies | 199 ++++++++++-------- > .../caps_9.1.0_x86_64.xml | 4 + > tests/qemuxml2argvmock.c | 24 +++ > .../net-virtio-rss-bpf.x86_64-latest.args | 37 ++++ > .../net-virtio-rss-bpf.x86_64-latest.xml | 46 ++++ > tests/qemuxmlconfdata/net-virtio-rss-bpf.xml | 46 ++++ > tests/qemuxmlconftest.c | 5 + > 26 files changed, 792 insertions(+), 224 deletions(-) > create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.args > create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.x86_64-latest.xml > create mode 100644 tests/qemuxmlconfdata/net-virtio-rss-bpf.xml > > -- > 2.45.2 >