5 virtio的半硬件卸载方案 Virtio作为一种半虚拟化的解决方案,其性能一直不如设备的pas

半虚拟化和E1000 半虚拟化和直通网卡_半虚拟化和E1000

5 virtio的半硬件卸载方案

        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的标准,否则可想而知,硬件是无法与前端进行正确通信的。另外,原先软件交换机提供的交换功能,也转而在硬件中实现。

半虚拟化和E1000 半虚拟化和直通网卡_解决方案_02

        为了解决高性能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社区源码。

半虚拟化和E1000 半虚拟化和直通网卡_云计算_03

        在硬件vDPA场景下,通过OVS转发的流量首包依然由主机上的OVS转发平面处理,对应数据流的后续报文由硬件网卡直接转发。

        后来在Bluefield-2上,由于集成了ARM核,所以NVIDIA在与UCloud的合作中,将OVS的控制面也完全卸载到网卡到ARM核上,这样主机上就可以将OVS完全卸载到网卡上。