前面介绍了利用Intel VT-d技术实现设备的直接分配,但使用这种方式有一种缺点,即一个物理设备资源只能分配给一个虚拟机使用。为了实现多个虚拟机共用同一物理设备资源并使设备直接分配,PCI-SIG组织发布了一个I/O虚拟化技术标准——SR-IOV。
SR-IOV是PCI-SIG组织公布的一个新规范,全称为Single Root I/O Virtualization,旨在消除VMM对虚拟化I/O操作的干预,以提高数据传输的性能。这个规范定义了一个标准的机制,可以实现多个设备的共享,它继承了Passthrough I/O技术,绕过虚拟机监视器直接发送和接收I/O数据,同时还利用IOMMU减少内存保护和内存地址转换的开销。
一个具有SR-IOV功能的I/O设备是基于PCIe规范的,具有一个或多个物理设备(PF,Physical Function),PF是标准的PCIe设备,具有唯一的申请标识RID。而每一个PF可以用来管理并创建一个或多个虚拟设备(VF,Virtual Function),VF是“轻量级”的PCIe设备。具有SR-IOV功能的I/O设备如图3-16所示。
图3-16 具有SR-IOV功能的I/O设备
每一个PF都是标准的PCIe功能,并且关联多个VF。每一个VF都拥有与性能相关的关键资源,如收发队列等,专门用于软件实体在运行时的性能数据运转,而且与其他VF共享一些非关键的设备资源。因此每一个VF都有独立收发数据包的能力。若把一个VF分配给一台客户机,该客户机可以直接使用该VF进行数据包的发送和接收。最重要的是,客户机通过VF进行I/O操作时,可以绕过虚拟机监视器直接发送和接收I/O数据,这正是直接I/O技术最重要的优势之一。
SR-IOV的实现模型包含三部分:PF驱动、VF驱动和SR-IOV管理器(IOVM)。SR-IOV的实现模型如图3-17所示。
图3-17 SR-IOV实现模型(www.xing528.com)
PF驱动,运行在宿主机上,可以直接访问PF的所有资源。PF驱动主要用来创建、配置和管理虚拟设备,即VF。它可以来设置VF的数量,全局的启动或停止VF,还可以进行设备相关的配置。PF驱动同样负责配置两层分发,以确保从PF或者VF进入的数据可以正确的路由。
VF驱动是运行在客户机上的普通设备驱动,VF驱动只有操作相应VF的权限。VF驱动主要用来在客户机和VF之间直接完成I/O操作,包括数据包的发送和接收。由于VF并不是真正意义上的PCIe设备,而是一个“轻量级”的PCIe设备,因此VF也不能像普通的PCIe设备一样被操作系统直接识别并配置。
SR-IOV管理器运行在宿主机,用于管理PCIe拓扑的控制点以及每一个VF的配置空间。它为每一个VF分配了完整的虚拟配置空间,因此客户机能够像普通设备一样模拟和配置VF,因而宿主机操作系统可以正确地识别并配置VF。当VF被宿主机正确地识别和配置后,它们才会被分配给客户机,然后在客户机操作系统中被当作普通的PCI设备初始化和使用。
具有SR-IOV功能的设备可以利用以下优点:
(1)提高系统性能。采用Passthrough技术,将设备分配给指定的虚拟机,可以达到基于本机的性能。利用IOMMU技术,改善了中断重映射技术,减少客户及从硬件中断到虚拟中断的处理延迟。
(2)安全性优势。通过硬件辅助,数据安全性得到加强。
(3)可扩展性优势。系统管理员可以利用单个高宽带的I/O设备代替多个低带宽的设备达到带宽的要求。利用VF将带宽进行隔离,使得单个物理设备好像是隔离的多物理设备。此外,这还可以为其他类型的设备节省插槽。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。