On Tue, Jun 6, 2023 at 10:19 AM Maxime Coquelin <maxime.coque...@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. I had played with the patches at v1 and it was working ok. I did not review in depth the latest revisions, but I followed your series from the PoC/start. Overall, the series lgtm. For the series, Acked-by: David Marchand <david.march...@redhat.com> -- David Marchand