[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 0/5] ebpf: Added ebpf helper for libvirtd.
From: |
Yuri Benditovich |
Subject: |
Re: [PATCH 0/5] ebpf: Added ebpf helper for libvirtd. |
Date: |
Mon, 16 Aug 2021 14:57:56 +0300 |
Jason,
Can you please review the series?
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
>>
- Re: [PATCH 0/5] ebpf: Added ebpf helper for libvirtd.,
Yuri Benditovich <=