16.2. 使用 SR-IOV 设备的 PCI 设备分配
PCI 网络设备(在域 XML 中由
<源>
元素指定)可以使用直接设备分配(有时称为 passthrough)直接连接到客户机。 由于标准单一以太网卡驱动程序设计的限制,只能为客户机分配 单根 I/O 虚拟化 (SR-IOV) 虚拟功能(VF )设备;若要为客户机分配标准单端口 PCI 或 PCIe 以太网卡,请使用传统的 <hostdev>
设备定义。
图 16.9. PCI 设备分配的 XML 示例
<devices> <interface type='hostdev'> <driver name='vfio'/> <source> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </source> <mac address='52:54:00:6d:90:02'> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices>
由 PCI-SIG(PCI Special Interest Group)开发,单一根 I/O 虚拟化(SR-IOV)规格是一种标准的 PCI 设备分配,可以将单个设备共享给多个虚拟机。SR-IOV 提高虚拟机的设备性能。
图 16.10. SR-IOV 的工作原理
SR-IOV 支持单根功能(例如,单个以太网端口)来显示为多个、独立的物理设备。可以将具有 SR-IOV 功能的物理设备配置为作为多种功能出现在 PCI 配置空间中。每个设备都有其自身的配置空间完成 Base Address Registers(BAR)。
SR-IOV 使用两个 PCI 功能:
- 物理功能(PF)是包含 SR-IOV 功能的完整 PCIe 设备。发现、托管和配置为普通 PCI 设备的物理功能。物理功能通过分配虚拟功能配置和管理 SR-IOV 功能。
- 虚拟功能(VF)是简单的 PCIe 功能,仅处理 I/O。每个虚拟功能都源自物理功能。设备可能拥有的虚拟功能数量受设备硬件的限制。单个以太网设备(物理设备)可映射到可共享虚拟机的许多虚拟功能。
管理程序可向虚拟机分配一个或多个虚拟功能。虚拟功能的配置空间将分配给提供给 guest 的配置空间。
每个虚拟功能每次只能分配给一个客户机,因为虚拟功能需要实际硬件资源。虚拟机可以有多个虚拟功能。虚拟功能显示为网卡的方式,其方式与常规网卡出现在操作系统中一样。
SR-IOV 驱动程序在内核中实现。核心实施包含在 PCI 子系统中,但还必须对物理功能(PF)和虚拟功能(VF)设备提供驱动程序支持。具有 SR-IOV 功能的设备可以从 PF 分配 VF。VF 显示为 PCI 设备,它们根据队列和注册集等资源在物理 PCI 设备上支持。
16.2.1. SR-IOV 的优点
SR-IOV 设备可以与多个虚拟机共享单个物理端口。
当为虚拟机分配了 SR-IOV VF 时,可以将其配置为(与虚拟机完全转换为虚拟机)会将所有网络流量都离开于特定的 VLAN。虚拟机无法检测到其流量是否已标记为 VLAN,且无法更改或消除此标记。
虚拟功能具有接近原生的性能,比半虚拟化驱动程序和仿真访问提供更好的性能。虚拟功能提供与数据在同一物理服务器上虚拟机之间的数据保护,由硬件控制。
这些功能允许在数据中心中的主机上增加虚拟机密度。
SR-IOV 更好地利用多个客户机的设备带宽。