在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
2sudo grubby --update-kernel=ALL --args="iommu.passthrough=on"
sudo reboot重启后,使用以下命令确认 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
2cat /sys/class/net/enp3s0/device/sriov_totalvfs
162.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
2
3
4
5sudo modprobe vfio
sudo modprobe vfio-pci
lspci -nn | grep Virtual #查询[]中结果,例如[15b3:101e]
echo "0000:03:02.0" > /sys/bus/pci/devices/0000\:03\:02.0/driver/unbind
echo "15b3 101e" > /sys/bus/pci/drivers/vfio-pci/new_id或者
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, 记录address1
2
3<iommuGroup number='62'>
<address domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
</iommuGroup> - 使用
virsh edit或virt-manager将 VF 设备分配给虚拟机。示例 XML 配置:1
2
3
4
5
6<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</hostdev>
3.3 启用并启动虚拟机
- 编辑并保存虚拟机配置后,启动虚拟机:
1
2virsh define /etc/libvirt/qemu/<vm_name>.xml
virsh start <vm_name> - 在虚拟机中,使用
ip link show或类似命令验证已分配的 VF 网卡。
4. 维护与管理
4.1 释放 VF 资源
- 如果需要将 VF 资源从虚拟机中释放并返回主机,可以先关闭虚拟机并解除 VFIO 绑定:
1
2
3virsh shutdown <vm_name>
echo "0000:03:02.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/unbind
echo "0000:03:02.0" | sudo tee /sys/bus/pci/drivers/mlx5_core/bind
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 驱动程序,确保最佳性能。
