一. SPDK virtio模块介绍
众所周知,Virtio协议定义了两个块设备驱动,virtio-blk和virtio-scsi。SPDK Vhost target提供了VM中virtio-blk/scsi半虚拟化IO请求的加速器,相比较原来的QEMU virtio-blk方案以及kernel vhost-scsi方案极大的提高了性能,VM内置的内核半虚拟化驱动即可使用。
现在SPDK在使用相同的vhost target基础上,更进一步的提供了一个用户态的virtio bdev模块,有两个传输层:
- * PCI:在VM中使用,该模块提供了在VM中使用用户态驱动访问后端块设备的能力,用户需要卸载掉原内核的virtio-blk/scsi驱动,绑定virtio控制器到uio模块
- * Vhost-user模式:提供进程间使用virtio-blk/scsi协议访问vhost target的块设备驱动,可以直接集成到用户的独立进程中使用,例如container。
目前SPDK virtio驱动模块只实现了virtio 1.0 版本。
下图是SPDK virtio整体介绍:
二. SPDK virtio用户模式使用示例
SPDK virtio用户模式的使用场景可以参考下图:
如上图所示,SPDK vhost socket和使用virtio块设备的SPDK进程在同一台机器。
参考步骤如下:
在host机器中,使用如下命令配置和编译SPDK:
[root@]./configure --with-vhost --with-virtio && make
启动vhost主进程:
[root@] ./app/vhost/vhost -i 0
创建vhost controller,以下是vhost blk示例:
[root@]./scripts/rpc.py bdev_malloc_creat