Virtio作为一种半虚拟化的解决方案,其性能一直不如设备的pass-through,即将物理设备(通常是网卡的VF)直接分配给虚拟机,其优点在于数据平面是在虚拟机与硬件之间直通的,几乎不需要主机的干预。而virtio的发展,虽然带来了性能的提升,可终究无法达到pass-through的I/O性能,始终需要主机(主要是软件交换机)的干预。vDPA(vhost Data Path Acceleration)即是让virtio数据平面不需主机干预的解决方案。该框架由Redhat提出,实现了virtio数据平面的硬件卸载。控制平面仍然采用原来的控制平面协议,当控制信息被传递到硬件中,硬件完成数据平面的配置之后,数据通信过程由硬件设备(智能网卡)完成,虚拟机与网卡之间直通。中断信息也由网卡直接发送至虚拟机不需要主机的干预。这种方式,控制面比较复杂,硬件难以实现。
在硬件vDPA架构中,通过OVS转发的流量首包依然由主机上的OVS转发平面处理,对应数据流的后续报文由硬件网卡直接转发。
从下图中可以看到virtio的控制平面仍需要vDPA driver进行传递,也就是说QEMU,或者虚拟机仍然使用原先的控制平面协议作为接口,而这些控制信息被传递到硬件中,硬件会通过这些信息配置好数据平面。而数据平面上,经过配置后的数据平面可以在虚拟机和网卡之间直通。
鉴于现在后端的数据处理其实完全在硬件中,原先的前后端通知方式也可以几乎完全规避主机的干预,以中断为例,原先中断必须由主机处理,主机通过软件交换机得知中断的目的地之后,将虚拟中断注入到虚拟机中,而在vDPA中,网卡可以直接将中断发送到虚拟机中。总体来看,vDPA的数据平面与SR-IOV设备直通的数据平面非常接近,并且在性能数据上也能达到后者的水准。更重要的是vDPA框架保有virtio这套标准的接口,使云服务提供商在不改变virtio接口的前提下,得到更高的性能。
需要注意的是,vDPA框架中利用到的硬件必须至少支持virtio ring的标准,否则可想而知,硬件是无法与前端进行正确通信的。另外,原先软件交换机提供的交换功能,也转而在硬件中实现。
为了解决高性能SRIOV网络的热迁移问题,出现了很多做法和尝试,尚未形成统一的标准。在Redhat提出硬件vDPA架构之前,Mellanox实现了软件vDPA(即VF Relay)。理论上讲,Mellanox的软件vDPA并不能算是vDPA,其实就是将数据在用户空间的virtio队列和VF的接收队列做了一次数据Relay。Redhat提出的硬件vDPA架构,目前在DPDK和内核程序中均有实现,基本是未来的标准架构。Qemu支持两种方式的vDPA,一种是vhost-user,配合DPDK中的vDPA运行,DPDK再调用厂商用户态vDPA驱动;另一种方式是vhost-vdpa,通过ioctl调用到内核通用vDPA模块,通用vDPA模块再调用厂商硬件专有的vDPA驱动。
1) 软件vDPA: 软件vDPA也叫VF relay,由于需要软件把VF上接收的数据通过virtio转发给虚拟机(VM),如Mellanox在OVS-DPDK实现了这个relay,OVS流表由硬件卸载加速,性能上与SR-IOV VF直通(passthrough)方式比略有降低,不过实现了虚拟机(VM)的热迁移特性。
2) 硬件vDPA: 硬件vDPA实际上是借助virtio硬件加速,以实现更高性能的通信。由于控制面复杂,所以用硬件难以实现。厂商自己开发驱动,对接到用户空间DPDK的vDPA和内核vDPA架构上,可以实现硬件vDPA。目前Mellanox mlx5和Intel IFC对应的vDPA适配程序都已经合入到DPDK和kernel社区源码。
在硬件vDPA场景下,通过OVS转发的流量首包依然由主机上的OVS转发平面处理,对应数据流的后续报文由硬件网卡直接转发。
后来在Bluefield-2上,由于集成了ARM核,所以NVIDIA在与UCloud的合作中,将OVS的控制面也完全卸载到网卡到ARM核上,这样主机上就可以将OVS完全卸载到网卡上。
dpdk对虚拟化的支持调研 - allcloud - 博客园
DPDK系列之十二:基于virtio、vhost和OVS-DPDK的容器数据通道_cloudvtech的博客-CSDN博客_dpdk容器化
DPDK系列之六:qemu-kvm网络后端的加速技术_cloudvtech的博客-CSDN博客_kvm加速
DPDK系列之十五:Virtio技术分析之一,virtio基础架构_cloudvtech的博客-CSDN博客_virtio
从dpdk1811看virtio1.1 的实现—packed ring-lvyilong316-ChinaUnix博客
Qemu模拟IO和半虚拟化Virtio的区别以及I/O半虚拟化驱动介绍_weixin_34051201的博客-CSDN博客
DPU和CPU互联的接口之争:Virtio还是SR-IOV? - 极术社区 - 连接开发者与智能计算生态
virtio简介(一)—— 框架分析 - Edver - 博客园
Linux Kernel Vhost 架构 - 于杨 - 博客园
virtio,vhost 和vhost-user - allcloud - 博客园
详解vhost-user协议及其在OVS DPDK、QEMU和virtio-net驱动中的实现_redwingz的博客-CSDN博客_vhost协议
《重识云原生系列》专题索引: