作者简介:刘长鹏,Intel高级存储工程师, 主要研究方向为虚拟化,新存储介质应用,负责SPDK开发和社区维护。
文章转载自DPDK与SPDK开源社区
virtio是目前被广泛接受的I/O虚拟化的抽象设备接口,通过对virtqueue以及vring的定义实现了对不同虚拟化PCI设备的支持,目前对块设备的支持包括virtio_blk和virtio_scsi。
市场上使用的SSD设备如NVMe SSD现在基本都能达到几十万的IOPS,如Intel DCP4500 4TB NVMe SSD 在4KiB,队列深度256的随机读场景下性能可以到71万的IOPS。在一台服务器中放置4个高性能NVMe SSD就要消耗大量的CPU资源,而在CSP使用场景中,减少CPU的使用率可以提高VM密度,从而降低客户成本。下面我们就来看下NVMe SSD应用到虚拟化存储场景中的一些软件方案。
01.开源virtio_scsi虚拟化软件方案:
目前开源的virtio_scsi虚拟化方案:
Vhost kernel Target: 相对于前面的Qemu方案,vhostkernel target方案主要做了2个方面的改进,Qemu virtio scsi target对I/O的处理是通过Qemu提交到具体的块设备的,这里kernel vhost scsi 把I/O processing部分直接移到内核的vhost驱动中完成,vhost直接解析到virtqueue中的SCSI命令,当Guest提交新的命令到virtiqueue时,产生的VM_EXIT会唤醒内核的I/O线程,该线程直接解析SCSI命令提交给LinuxI/O Target进行处理;另一个方面的改进,当I/O完成时,Kernel vhost_scsi方案直接通过KVM进行Guest中断注入,vhost kernel target方案减少了user/kernel间频繁的切换。
SPDK (http://spdk.io)vhost user scsi Taget: vhost user 方案是目前最新的演进方案,通过用户态的polling mode driver可以实现全用户态、端到端的I/O栈,我们知道在虚拟化中VM_EXIT是比较大的开销,vhost user方案可以消除GuestI/O提交时的VM_EXIT开销,并且通过用户态的I/Opolling实现减少CPU上下文切换,当然目前最后IO完成后中断注入跟kernel vhost scsi方案是一样的。
02.SPDK vhost user scsi方案
下面是vhost user方案架构图,Qemu定义了vhost通信协议(Master/Slave,docs/interop/vhost-user.txt)用来实现Qemu Slave和Master之间的消息通信,ioctl是Qemu和Kernel vhost方案的接口,而UNIX domain socket是Qemu和另外的User vhost进程间的通信接口,DPDK vhost library即该Master接口的一个实现,当I/O完成后通过event通知内核KVM注入中断到Guest。
03.SPDK简介
用户可能对SPDK不是特别了解,SPDK(Storage Performance Development Kit, http://spdk.io基于BSD licensed 开源软件模块,提供了一组用于编写高性能,可扩展,用户态存储应用程序的工具和库。SPDK专为优化存储IO路径而设计。SPDK在Intel IA平台上提供了一系列运行在用户态的驱动(诸如用户态NVMe SSD的驱动,IOAT的驱动),这些驱动采用轮询模式运行,从而避免了频繁的内核上下文切换,并消除了中断处理的开销。基于用户态驱动,SPDK提供了一系列用户态的块存储设备(诸如基于NVMe驱动的块设备)和用户态的文件系统(blobfs),从而可以构建高性能的基于用户态的存储应用(例如iSCSI target,NVMe-oF target,vhost scsi/blk target)。
下面列出一组Flash Memory Summit 2017的一组vhostscsi demo数据:
当启动48个VM后,Vhost user scsi方案可以提供到9百万以上的IOPS,而内核vhost方案只能提供到3百万的IOPS。
DPDK同样提供了一个简单基于Memory的vhost user scsi例子可以让用户直接启VM并添加一个scsi块设备,参考doc/guides/sample_app_ug/vhost_scsi.rst和examples/vhost_scsi了解更多信息。
相关链接
https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2017/20170810_FW32_Harris.pdf