在RHEL 9.4 上配置 Mellanox ConnectX-6 网卡的 SR-IOV VF 直通 (Passthrough)
在 ARM64 平台的 RHEL 9.4 上配置 Mellanox ConnectX-6 网卡的 SR-IOV VF 直通 (Passthrough)
概述
在虚拟化环境中,Mellanox ConnectX-6 网卡的单根输入输出虚拟化(SR-IOV)功能允许将网卡的虚拟功能(Virtual Functions, VFs)分配给虚拟机,从而实现高效的网络性能和资源隔离。详细介绍了如何在 ARM64 平台的 RHEL 9.4 上配置 Mellanox ConnectX-6 网卡的 SR-IOV 虚拟功能 (VF) 直通。
范围
适用于系统管理员和虚拟化技术人员,帮助他们在 RHEL 9.4 ARM64 系统上配置 Mellanox ConnectX-6 网卡的 SR-IOV 虚拟功能 (VF) 直通,以优化虚拟化环境中的网络性能。
职责
- 系统管理员:确保系统已正确安装必要的软件包,且系统硬件支持 IOMMU 和 SR-IOV 功能。
- 操作员:按照##配置 Mellanox ConnectX-6 网卡的 SR-IOV VF 直通,并确保其正确运行。
要求
- 运行 RHEL 9.4 操作系统的 ARM64 服务器。
- 基本的命令行操作知识。
- 具备 sudo 或 root 权限。
- Mellanox ConnectX-6 网卡,并确保服务器固件支持 IOMMU 和 SR-IOV 功能。
过程
1. 系统环境准备
1.1 更新系统软件包列表
- 在进行软件安装前,先确保系统软件包是最新的:
1 | sudo dnf update -y |
1.2 安装必要的驱动和工具
- 安装 Mellanox 网卡的驱动程序和相关工具(如果已经安装mlx驱动直接跳过):
1 | sudo dnf install -y mlnx-ofed-basic |
- 安装完毕后,重启服务器以加载新安装的驱动:
1 | sudo reboot |
1.3 检查 IOMMU 支持
确保系统的固件(Firmware/BIOS)设置中已启用 IOMMU 支持。
确认 IOMMU 已在内核启动参数中启用:
1 | sudo grubby --update-kernel=ALL --args="iommu.passthrough=on" |
- 重启后,使用以下命令确认 IOMMU 已启用:
1 | dmesg | grep -i iommu |
2. 配置 Mellanox ConnectX-6 的 SR-IOV
2.1 启用 SR-IOV 功能
- 使用
lspci命令找到 Mellanox ConnectX-6 网卡的 PCI 总线地址:
1 | lspci | grep Mellanox |
记下类似
0000:03:00.0的总线地址,这个地址表示网卡的物理功能(PF)。在
/sys/class/net/下找到对应的网卡接口(如enp3s0),并配置启用 SR-IOV:
1 | echo 8 | sudo tee /sys/class/net/enp3s0/device/sriov_numvfs |
- 以上命令将在该网卡上启用 8 个虚拟功能(VFs)。可以根据需要调整数字。
- 可以通过下面的命令查询支持的最大值
1 | cat /sys/class/net/enp3s0/device/sriov_totalvfs |
2.2 验证 SR-IOV 配置
- 使用
ip link show或lspci | grep Mellanox命令,确认是否已创建 VFs:
1 | ip link show enp3s0 |
- 输出中应包含
enp3s0及其下的vf 0至vf 7等信息。
3. 配置 SR-IOV VFs 的 Passthrough
3.1 识别并绑定 VF
- 使用
lspci命令获取 SR-IOV VF 的 PCI 地址:
1 | lspci | grep Virtual |
- 将对应的 VF 通过 VFIO 驱动绑定:
1 | sudo modprobe vfio |
或者
1
2
3
4sudo modprobe vfio
sudo modprobe vfio-pci
echo "0000:03:02.0" | sudo tee /sys/bus/pci/drivers/mlx5_core/unbind
echo "0000:03:02.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind
- 确认绑定成功:
1 | lspci -nnk -d 15b3: | grep "Kernel driver in use" |
- 输出应显示
vfio-pci作为内核驱动。
3.2 编辑虚拟机配置
- 使用
virsh nodedev-list查找支持的设备
1 | pci_0000_03_02_0 |
- 使用
virsh nodedev-dumpxml pci_0000_03_02_0获取配置xml, 记录address
1 | <iommuGroup number='62'> |
- 使用
virsh edit或virt-manager将 VF 设备分配给虚拟机。示例 XML 配置:
1 | <hostdev mode='subsystem' type='pci' managed='yes'> |
3.3 启用并启动虚拟机
- 编辑并保存虚拟机配置后,启动虚拟机:
1 | virsh define /etc/libvirt/qemu/<vm_name>.xml |
- 在虚拟机中,使用
ip link show或类似命令验证已分配的 VF 网卡。
4. 维护与管理
4.1 释放 VF 资源
- 如果需要将 VF 资源从虚拟机中释放并返回主机,可以先关闭虚拟机并解除 VFIO 绑定:
1 | virsh shutdown <vm_name> |
4.2 调整 VF 数量
- 如果需要更改启用的 VF 数量,可以编辑对应的 SR-IOV 配置:
1 | echo <new_number> | sudo tee /sys/class/net/enp3s0/device/sriov_numvfs |
4.3 定期更新驱动
- 确保定期更新 Mellanox 驱动程序和固件,以获取最新的功能和性能改进:
1 | sudo dnf upgrade -y mlnx-ofed-basic |
5. 常见问题与故障排除
5.1 VF 无法绑定到虚拟机
- 检查是否已正确启用 IOMMU 和 SR-IOV 功能,确保 VFs 已成功创建并分配给虚拟机。
5.2 虚拟机中无法识别 VF 网卡
- 检查虚拟机内的网络配置,确认 VF 是否已正确加载,并安装必要的驱动程序。
5.3 性能问题
- 确保虚拟机配置中启用了 KVM 和 VFIO 驱动程序,确保最佳性能。
