vhost-user back ends
vhost-user back ends are way to service the request of VirtIO devices outside of QEMU itself. To do this there are a number of things required.
vhost-user device
These are simple stub devices that ensure the VirtIO device is visible
to the guest. The code is mostly boilerplate although each device has
a chardev
option which specifies the ID of the --chardev
device that connects via a socket to the vhost-user daemon.
vhost-user daemon
This is a separate process that is connected to by QEMU via a socket following the Vhost-user Protocol. There are a number of daemons that can be built when enabled by the project although any daemon that meets the specification for a given device can be used.
Example
First start you daemon.
$ virtio-foo --socket-path=/var/run/foo.sock $OTHER_ARGS
The you start your QEMU instance specifying the device, chardev and memory objects.
$ qemu-system-x86_64 \ -m 4096 \ -chardev socket,id=ba1,path=/var/run/foo.sock \ -device vhost-user-foo,chardev=ba1,$OTHER_ARGS \ -object memory-backend-memfd,id=mem,size=4G,share=on \ -numa node,memdev=mem \ ...