SPDK Virtio driver is a C library that allows communicating with Virtio devices. It allows any SPDK application to become an initiator for (SPDK) vhost targets.
The driver supports two different usage models:
The driver, just like the SPDK vhost Target, is using pollers instead of standard interrupts to check for an I/O response. If used inside a VM, it bypasses interrupt and context switching overhead of QEMU and guest kernel, significantly boosting the overall I/O performance.
vhost-user specification puts a limitation on the number of "memory regions" used (8). Each region corresponds to one file descriptor, and DPDK - as SPDK's memory allocator - uses one file per hugepage by default. So by default this makes SPDK Virtio practical with only 1GB hugepages. To run an SPDK app using Virtio initiator with 2MB hugepages it is required to pass '-g' command-line option . This forces DPDK to create a single non-physically-contiguous hugetlbfs file for all its memory.
This functionality requires latest DPDK changes that are officially landing in DPDK 18.05, but have been also backported to spdk-18.02 branch of our internal DPDK fork which is currently used as a default git submodule for SPDK.