16.5.2. 将 SR-IOV 网络设备附加到虚拟机
要将 SR-IOV 网络设备附加到虚拟机(VM),您必须从主机上支持 SR-IOV 的网络接口创建一个虚拟功能(VF),并将 VF 作为设备分配给指定的虚拟机。详情请查看以下步骤。
先决条件
您的主机的 CPU 和固件支持 I/O 内存管理单元(IOMMU)。
- 如果使用 Intel CPU,它必须支持 Intel 的直接 I/O 虚拟化技术(VT-d)。
- 如果使用 AMD CPU,则必须支持 AMD-Vi 功能。
主机系统使用访问控制服务(ACS)来为 PCIe 拓扑提供直接内存访问(DMA)隔离。与系统供应商一起验证这一点。
如需更多信息,请参阅实施 SR-IOV 的硬件注意事项。
物理网络设备支持 SR-IOV。要验证系统上的任何网络设备是否支持 SR-IOV,请使用
lspci -v命令,并在输出中查找单根 I/O 虚拟化(SR-IOV)。# lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0 Memory at fcba0000 (32-bit, non-prefetchable) [size=128K] [...] Capabilities: [150] Alternative Routing-ID Interpretation (ARI) Capabilities: [160] Single Root I/O Virtualization (SR-IOV) Kernel driver in use: igb Kernel modules: igb [...]用于创建 VF 的主机网络接口正在运行。例如:要激活 eth1 接口并验证它正在运行:
# ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto要使 SR-IOV 设备分配正常工作,必须在主机 BIOS 和内核中启用 IOMMU 功能。要做到这一点:
在 Intel 主机上启用 VT-d:
使用
intel_iommu=on和iommu=pt参数重新生成 GRUB 配置:# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL- 重启主机。
在 AMD 主机上启用 AMD-Vi:
使用
iommu=pt参数重新生成 GRUB 配置:# grubby --args="iommu=pt" --update-kernel=ALL- 重启主机。
流程
可选:确认您的网络设备可以使用的最大 VF 数。为此,请使用以下命令,并将 eth1 替换为您的 SR-IOV 兼容的网络设备。
# cat /sys/class/net/eth1/device/sriov_totalvfs 7使用以下命令来创建虚拟功能(VF):
# echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs在命令中,替换:
- 使用您要在其上创建 PF 的 VF 数替换 VF-number。
- 使用 VF 要创建的网络接口的名称替换 network-interface。
以下示例从 eth1 网络接口创建 2 个 VF:
# echo 2 > /sys/class/net/eth1/device/sriov_numvfs确定已添加了 VF:
# lspci | grep Ethernet 82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)通过为您用于创建 VF 的网络接口创建一个 udev 规则,使创建的 VF 持久化。例如,对于 eth1 接口,创建
/etc/udev/rules.d/eth1.rules文件,并添加以下行:ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"这样可确保使用
ixgbe驱动程序的两个 VF 在主机启动时可自动对eth1接口可用。如果不需要持久性 SR-IOV 设备,请跳过这一步。警告目前,当试图在 Broadcom NetXtreme II BCM57810 适配器上保留 VF 时,上述设置无法正常工作。另外,基于这些适配器将 VF 附加到 Windows 虚拟机当前还不可靠。
将新添加的 VF 接口设备中的一个热插到正在运行的虚拟机中。
# virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --config-live选项会将设备附加到正在运行的虚拟机,且引导之间没有持久性。--config选项使配置更改持久。要将设备附加到关闭的虚拟机,请不要使用-live选项。--mac选项指定附加接口的 MAC 地址。如果您没有为接口指定 MAC 地址,虚拟机会自动生成一个以 52:54:00 开头的永久伪随机地址。重要如果您通过将 SR-IOV VF 分配给虚拟机,请在虚拟机 XML 配置文件的 & lt;hostdev > 部分手动添加一个设备条目,则不会永久分配 MAC 地址,并且每个主机重启时都会重新配置网络设置。
要避免这些复杂情况,请使用
virsh attach-interface命令,如此步骤中所述。
验证
- 如果过程成功,客户端操作系统会检测到新的网络接口控制器。