[PATCH v5 00/26] Add VDUSE support to Vhost library

David Marchand david.marchand at redhat.com
Thu Jun 8 14:44:32 CEST 2023


On Thu, Jun 8, 2023 at 11:17 AM Maxime Coquelin
<maxime.coquelin at redhat.com> wrote:
> On 6/7/23 10:05, David Marchand wrote:
> > On Tue, Jun 6, 2023 at 10:19 AM Maxime Coquelin
> > <maxime.coquelin at redhat.com> wrote:
> >>
> >> This series introduces a new type of backend, VDUSE,
> >> to the Vhost library.
> >>
> >> VDUSE stands for vDPA device in Userspace, it enables
> >> implementing a Virtio device in userspace and have it
> >> attached to the Kernel vDPA bus.
> >>
> >> Once attached to the vDPA bus, it can be used either by
> >> Kernel Virtio drivers, like virtio-net in our case, via
> >> the virtio-vdpa driver. Doing that, the device is visible
> >> to the Kernel networking stack and is exposed to userspace
> >> as a regular netdev.
> >>
> >> It can also be exposed to userspace thanks to the
> >> vhost-vdpa driver, via a vhost-vdpa chardev that can be
> >> passed to QEMU or Virtio-user PMD.
> >>
> >> While VDUSE support is already available in upstream
> >> Kernel, a couple of patches are required to support
> >> network device type:
> >>
> >> https://gitlab.com/mcoquelin/linux/-/tree/vduse_networking_rfc
> >>
> >> In order to attach the created VDUSE device to the vDPA
> >> bus, a recent iproute2 version containing the vdpa tool is
> >> required.
> >>
> >> Benchmark results:
> >> ==================
> >>
> >> On this v2, PVP reference benchmark has been run & compared with
> >> Vhost-user.
> >>
> >> When doing macswap forwarding in the worload, no difference is seen.
> >> When doing io forwarding in the workload, we see 4% performance
> >> degradation with VDUSE, comapred to Vhost-user/Virtio-user. It is
> >> explained by the use of the IOTLB layer in the Vhost-library when using
> >> VDUSE, whereas Vhost-user/Virtio-user does not make use of it.
> >>
> >> Usage:
> >> ======
> >>
> >> 1. Probe required Kernel modules
> >> # modprobe vdpa
> >> # modprobe vduse
> >> # modprobe virtio-vdpa
> >>
> >> 2. Build (require vduse kernel headers to be available)
> >> # meson build
> >> # ninja -C build
> >>
> >> 3. Create a VDUSE device (vduse0) using Vhost PMD with
> >> testpmd (with 4 queue pairs in this example)
> >> # ./build/app/dpdk-testpmd --no-pci --vdev=net_vhost0,iface=/dev/vduse/vduse0,queues=4 --log-level=*:9  -- -i --txq=4 --rxq=4
> >
> > 9 is a nice but undefined value. 8 is enough.
> > In general, I prefer "human readable" strings, like *:debug ;-).
> >
> >
> >>
> >> 4. Attach the VDUSE device to the vDPA bus
> >> # vdpa dev add name vduse0 mgmtdev vduse
> >> => The virtio-net netdev shows up (eth0 here)
> >> # ip l show eth0
> >> 21: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
> >>      link/ether c2:73:ea:a7:68:6d brd ff:ff:ff:ff:ff:ff
> >>
> >> 5. Start/stop traffic in testpmd
> >> testpmd> start
> >> testpmd> show port stats 0
> >>    ######################## NIC statistics for port 0  ########################
> >>    RX-packets: 11         RX-missed: 0          RX-bytes:  1482
> >>    RX-errors: 0
> >>    RX-nombuf:  0
> >>    TX-packets: 1          TX-errors: 0          TX-bytes:  62
> >>
> >>    Throughput (since last show)
> >>    Rx-pps:            0          Rx-bps:            0
> >>    Tx-pps:            0          Tx-bps:            0
> >>    ############################################################################
> >> testpmd> stop
> >>
> >> 6. Detach the VDUSE device from the vDPA bus
> >> # vdpa dev del vduse0
> >>
> >> 7. Quit testpmd
> >> testpmd> quit
> >>
> >> Known issues & remaining work:
> >> ==============================
> >> - Fix issue in FD manager (still polling while FD has been removed)
> >> - Add Netlink support in Vhost library
> >> - Support device reconnection
> >>   -> a temporary patch to support reconnection via a tmpfs file is available,
> >>      upstream solution would be in-kernel and is being developed.
> >>   -> https://gitlab.com/mcoquelin/dpdk-next-virtio/-/commit/5ad06ce14159a9ce36ee168dd13ef389cec91137
> >> - Support packed ring
> >> - Provide more performance benchmark results
> >
> > We are missing a reference to the kernel patches required to have
> > vduse accept net devices.
>
> Right, I mention it in the cover letter, but it should be in the release
> note also. I propose to append this to the release note:
> "While VDUSE support is already available in upstream Kernel, a couple
> of patches are required to support network device type, which are being
> upstreamed:
> https://lore.kernel.org/all/20230419134329.346825-1-maxime.coquelin@redhat.com/"
>
> Does that sound good to you?

Ok for me.
Thanks.


-- 
David Marchand



More information about the dev mailing list