34. Vhost_blk Sample Application
The vhost_blk sample application implemented a simple block device, which used as the backend of Qemu vhost-user-blk device. Users can extend the exist example to use other type of block device(e.g. AIO) besides memory based block device. Similar with vhost-user-net device, the sample application used domain socket to communicate with Qemu, and the virtio ring (split or packed format) was processed by vhost_blk sample application.
The sample application reuse lots codes from SPDK(Storage Performance Development Kit, https://github.com/spdk/spdk) vhost-user-blk target, for DPDK vhost library used in storage area, user can take SPDK as reference as well.
34.1. Testing steps
This section shows the steps how to start a VM with the block device as fast data path for critical application.
34.2. Compiling the Application
To compile the sample application see Compiling the Sample Applications.
The application is located in the examples
sub-directory.
You will also need to build DPDK both on the host and inside the guest
34.2.1. Start the vhost_blk example
./vhost_blk -m 1024
34.2.2. Start the VM
qemu-system-x86_64 -machine accel=kvm \
-m $mem -object memory-backend-file,id=mem,size=$mem,\
mem-path=/dev/hugepages,share=on -numa node,memdev=mem \
-drive file=os.img,if=none,id=disk \
-device ide-hd,drive=disk,bootindex=0 \
-chardev socket,id=char0,reconnect=1,path=/tmp/vhost.socket \
-device vhost-user-blk-pci,ring_packed=1,chardev=char0,num-queues=1 \
...
Note
You must check whether your Qemu can support “vhost-user-blk” or not, Qemu v4.0 or newer version is required. reconnect=1 means live recovery support that qemu can reconnect vhost_blk after we restart vhost_blk example. ring_packed=1 means the device support packed ring but need the guest kernel version >= 5.0