云计算虚拟化技术与开发
上QQ阅读APP看书,第一时间看更新

2.3.3 SR-IOV

前面介绍了利用Intel VT-d技术实现设备的直接分配,但使用这种方式有一种缺点,即一个物理设备资源只能分配给一个虚拟机使用。为了实现多个虚拟机共用同一物理设备资源并使设备直接分配,PCI-SIG组织发布了一个I/O虚拟化技术标准——SR-IOV。

SR-IOV是PCI-SIG组织公布的一个新规范,旨在消除VMM对虚拟化I/O操作的干预,以提高数据传输的性能。这个规范定义了一个标准的机制,可以实现多个设备的共享。它继承了Passthrough I/O技术,绕过虚拟机监视器直接发送和接收I/O数据,同时还利用IOMMU减少内存保护和内存地址转换的开销。

一个具有SR-IOV功能的I/O设备是基于PCIe规范的,具有一个或多个物理设备(Physical Function,PF)。PF是标准的PCIe设备,具有唯一的申请标识RID。而每一个PF可以用来管理并创建一个或多个虚拟设备(Virtual Function,VF),VF是“轻量级”的PCIe设备。具有SR-IOV功能的I/O设备如图2-15所示。

图2-15 具有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的实现模型如图2-16所示。

PF驱动程序运行在宿主机上,可以直接访问PF的所有资源。PF驱动程序主要用来创建、配置和管理虚拟设备,即VF。它可以来设置VF的数量、全局的启动或停止VF,还可以进行设备相关的配置。PF驱动程序同样负责配置两层分发,以确保从PF或者VF进入的数据可以正确地路由。

VF驱动程序是运行在客户机上的普通设备驱动程序,只有操作相应VF的权限,主要用来在客户机和VF之间直接完成I/O操作,包括数据包的发送和接收。由于VF并不是真正意义上的PCIe设备,而是一个“轻量级”的PCIe设备,因此VF也不能像普通的PCIe设备一样被操作系统直接识别并进行配置。

图2-16 SR-IOV实现模型

SR-IOV管理器运行在宿主机,用于管理PCIe拓扑的控制点以及每一个VF的配置空间。它为每一个VF分配了完整的虚拟配置空间,因此客户机能够像普通设备一样模拟和配置VF,因而宿主机操作系统可以正确地识别并配置VF。当VF被宿主机正确地识别和配置后,才会分配给客户机,然后在客户机操作系统中被当作普通的PCI设备初始化和使用。

具有SR-IOV功能的设备具有以下优点:

(1)提高系统性能。采用Passthrough技术,将设备分配给指定的虚拟机,可以达到基于本机的性能。利用IOMMU技术,改善了中断重映射技术,减少客户及从硬件中断到虚拟中断的处理延迟。

(2)安全性优势。通过硬件辅助,数据安全性得到加强。

(3)可扩展性优势。系统管理员可以利用单个高宽带的I/O设备代替多个低带宽的设备达到带宽的要求。利用VF将带宽进行隔离,使得单个物理设备好像是隔离的多物理设备。此外,还可以为其他类型的设备节省插槽。