SR-IOV是一种不需要软件模拟就可以共享I/O设备和I/O端口物理功能的方法。这个过程创造了一系列I/O设备物理端口的虚拟功能。每个虚拟功能都被直接分配到一个虚拟机,因此实现了接近本机的性能。SR-IOV为每个虚拟机提供独立内存空间、中断和DirectMemory Access(DMA)流。SR-IOV架构的设计允许一个I/O设备支持多个虚拟功能,同时将每个功能的硬件成本降至最低。SR、IOV引入了以下两个新的功能类型。

    ·物理功能(Physical Functions,PFs):这是一些支持SR-IOV扩展功能的PCIe功能,被用于配置和管理SR-IOV功能特性。

    ·虚拟功能(Virtual Functions,VFs):这是一些“精简”的PCIe功能,包括数据迁移必需的资源,以及经过谨慎精简的配置资源集。

    虚拟化直接分配的方法允许虚拟机直接连接到一个I/O设备。因此,直接设备分配特性提供了一种本地体验且非常快速的I/O(因此它重新利用现有驱动程序或者其他软件来与设备进行直接通信)。然而,这限制了I/O设备的共享。SR-IOV提供了以多个物理设备呈现机制。支持SR-IOV的设备可以配置成以多个虚拟功能的形式呈现在PCI配置空间中,每个SR-IOV的设备都有它自己的PCI配置空间。然后VMM可以通过模拟配置空间来分配一个或者多个虚拟功能给虚拟机。

    每个虚拟功能可以支持针对PCIe层中I/O功能的数据路径。在网络设备中使用SR-IOV可使一个端口(功能)的带宽分成更小的块,然后通过一个标准接口分配到特定虚拟机或者客户端中。为了进一步加强PCIe层中不同设备的可操作性,还创建了一个配置和管理的通用方法体系。这种资源共享提高了再一个支持SR-IOV的PCIe设备上任何特定资源的总利用率,从而降低了虚拟化的成本。

    Intel的PCI-SIG SR-IOV功能实施要求VMM软件利用Intel Virtualization Technology for Directed I/O(Intel VT-d)直接将虚拟功能分配到虚拟机中。Intel VT-d中的内存转义技术提供了硬件辅助功能,允许直接的DMA传输。Intel VT-d可确保传输的安全,SR、IOV为虚拟机提供了独立的数据空间。支持PCI-SIG SR-IOV的Intel Server Adapter,可以兼容任何厂商的网卡,这些厂商的网卡具备可以直接从网卡向虚拟机分配虚拟的功能。

    通过SR-IOV,一个PCIe设备不仅可以导出多个PCI物理功能,还可以导出共享该I/O设备上资源的一组虚拟功能。SR-IOV简化的服务器虚拟化架构如图4-56所示。在这个模型中,不需要任何透传,因为虚拟化在终端设备上发生,从而允许管理程序简单地将虚拟功能映射到VM上,以实现本机设备性能和隔离安全。

wKioL1ap2xyDjFDqAAKf3JnPqPY931.png

    SR-IOV是由PCI-SIG推出的标准。SR-IOV与支持虚拟化技术的系统芯片组一起协同工作,这样可以提供中断和DMA的重新映射功能,并允许将支持SR-IOV的设备直接分配给虚拟机。Hyper-V使虚拟机实现对SR-IOV网络设备的支持,并允许将物理网络适配器的SR-IOV虚拟功能直接分配给虚拟机。这样可以提高网络吞吐量,并缩短网络延迟,同时减少处理网络流量所需的主机CPU开销。要实现SR-IOV,则必须满足支持一个IOMMU(input/output memory management unit)设备系统的硬件和一个PCI Express网络设备,同时还需要支持PF和VFS。最后还需要在物理服务器的BIOS中打开SR-IOV的功能,一些主板还需要打开ASPM Support。