vfio-user

QEMU includes a vfio-user client. The vfio-user specification allows for implementing (PCI) devices in userspace outside of QEMU; it is similar to vhost-user in this respect (see vhost-user back ends), but can emulate arbitrary PCI devices, not just virtio. Whereas vfio is handled by the host kernel, vfio-user, while similar in implementation, is handled entirely in userspace.

For example, SPDK includes a virtual PCI NVMe controller implementation; by setting up a vfio-user UNIX socket between QEMU and SPDK, a VM can send NVMe I/O to the SPDK process.

Presuming a suitable vfio-user server has opened a socket at /tmp/vfio-user.sock, a device can be configured with for example:


-device ‘{“driver”: “vfio-user-pci”,”socket”: {“path”: “/tmp/vfio-user.sock”, “type”: “unix”}}’

See libvfio-user for further information.