赞
踩
virtio做为半虚拟化的应用标准,在DPDK中最典型的应用其实就是virtio-user,在前面的vhost-user一样,都是把工作放到了用户态。也就是说,virtio-user把设备驱动搬到了用户态,在virtio-net(网络半虚拟化)中,这样做能够更好的提高应用效率。而在DPDK中把这种驱动称之为virtio-pmd,而DKDK中的virtio-user既可以创建virtio设备并与后端的vhost完成初始化配置,又可以在没有KVM/QUEM的参与的非虚拟环境下使用相关的virtio设备。
再次强调一次,DPDK中virtio-pmd支持vdev虚拟设备。这在现在云技术应用中非常用用处。这种设备是DPDK自己在用户态虚拟的内部设备,由DPDK自己管理,这点要清楚,它是和由KVM/QUEM模拟出的virtio-pci设备是两回事。
这里对virtio-pmd做一个说明:
virtio-pmd,即virtio设备的PMD,Poll Mode Driver,学过网络编程的应用知道啥Poll,它通过VFIO接口实现对虚拟或者物理网卡(NIC)的用户态配置和数据处理。
在大家的眼中,一般习惯的把驱动理解成内核态,毕竟从一开始学习牵扯硬件和OS的相关知识,都强调驱动的重要性。毕竟OS就是为了隔离用户直接和硬件打交道的,硬件的复杂性和安全性都不能随便开放给普通用户。但是,随着应用技术的不断发展,出现了一些新的需求。大规模的数据通信和处理被内核的性能和管理限制的条条框框太多。技术人员需要不断的压榨整条数据链上的所有的剩余价值,那么在某些情况就提出了把驱动做到用户态,减少数据链中的传送节点,少的中间节点越多,理论上传输速度一定会更快。
用户态驱动最主要的就是把原来内核态需要处理的中断和硬件地址等内核态才能访问的内容能映射到用户态来。用户态的驱动技术有两种即,UIO和VFIO。DPDK中,20.02版本前同时支持两类,但以UIO为主,更早期则只支持UIO;但在此版本后,基于UIO框架的igb_uio模块不再进入默认编译选项。即DPDK不再建议使用UIO。
在网上很多人都推荐使用版本20以前的做为入门学习的原因大概也是因此。
DPDK中也是上面的两种实现机制,即UIO和VFIO:
1、UIO
UIO是“Userspace I/O”的缩写,它的基本原理就是为每个注册使用的UIO设备提供一个/DEV/UIOx的字符设备,通过这个字符设备可以实现设备映射(mmap)和设备中断开关以及中断获取得操作。UIO是一个应用框架,使用它需要自己实现一个内核驱动模块。而在DPDK中,则igb_uio。
igb_uio是一个标准的PCI设备驱动,提供Probe接口来向内核接管相关设备。通过UIO的接口注册,提供UIO的用户态文件接口。也就是通过此框架,实现了从内核到用户态的一个操作转化。但由于其没有IOMMU(Input/Output Memory Management Unit),如果想使用相关的物理地址必须要进行映射并注册给NIC。这种方式的应用有两个缺陷:
a、不支持IOMMU,使用设备DMA比较复杂并县城需要Root权限。地址映射异常会引起崩溃。
b、一个设备只支持一个中断,对Polling模式的DPDK影响有限,但扩展受限。
2、VFIO
VFIO,即“Virtual Function I/O”,可以简单理解为对UIO的高级版本。其主要通过IOMMU来进行DMA设备的访问和中断重定向。知道OS中的MMU大概就会明白IOMMU,其实就是一层抽象隔离,隔离就是为了更好的兼容性和扩展性。不过它也和UIO一样需要映射到指定的/dev/vfio/xx中来进行实现相关驱动。VFIO也是有接口层和具体的设备驱动模块,即vfio,vfio-pci。NIC绑定到vfio-pci驱动,再由VFIO提供的相关文件(即刚刚提到的/dev/vfio/xx)接口来操作。
VFIO不需要Root权限,通过注册eventfd来提供中断irq的用户态揽收方式。
在DPDK中,virtio-user实现的主要功能有:
1、在用户态实现了virtio-net设备,与传统的虚拟化技术不同,virtio-user在用户态进程实现了virtio-pmd和其后端控制面配置。
2、实现了virtio-user在内部总线上与vhost-net或者vhost-user的通信。
这基本上是可以根据实际情况把KVM/QUEM省略来实现高速的网络通信。
前面的分析忽略了对virtio-user的介绍,这章补回来。
virtio-pmd主要的应用场景就是在虚拟机中,可以更好的提高虚拟机中的网络通信效率;当然,它也支持virtio设备的PF和VF的物理网卡操作。而virtio-user除了上述与内核交互的应用外则在容器中应用,通过virtio-user与vhost-net或者vhost-user通信来更好的实现高性能的网络通信。
介绍理论总是比较枯燥,但这又是必不可少的一部分,这其实就像买回来一台设备,先看说明书一样。少走弯路,最快掌握。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。