为了使用SR-IOV功能,需要满足以下前提条件:
- 服务器BIOS中已开启SR-IOV功能。
- 启用Intel IOMMU功能,并以Pass-Through模式进行配置。
- 已安装NVIDIA MLNX_OFED驱动。
- 网卡固件启用SR-IOV功能。
- 在MLNX_OFED驱动上启用SR-IOV。
这些前提条件的满足将确保系统具备使用SR-IOV功能所需的硬件支持和驱动程序。请确保在使用SR-IOV功能之前,在执行后续的配置操作之前,先完成以下准备工作:
操作步骤
1.服务器BIOS中已开启SR-IOV功能
请确保服务器BIOS中已开启SR-IOV功能。每个服务器都有不同的虚拟化BIOS配置选项。BIOS configuration examples可参考:BIOS configuration examples
2.服务器BIOS中已开启SR-IOV功能
请确保将”intel_iommu=on“和”iommu=pt“添加到grub文件的配置中。
# cat /boot/grub2/grub.cfg
# GRUB Environment Block
saved_entry=0
kernelopts=root=/dev/mapper/os-root ro edd=off kvm.halt_poll_ns=400000 cgroup.memory=nokmem intel_iommu=on iommu=pt pci=realloc ixgbe.allow_unsupported_sfp=1 rootdelay=90 nomodeset intel_idle.max_cstate=0 processor.max_cstate=0 crashkernel=300M rd.lvm.lv=os/root biosdevname=0 net.ifnames=1
boot_success=0
要了解更多关于iommu grub参数的信息,请参阅:Understanding the iommu Linux grub File Configuration
3.安装NVIDIA MLNX_OFED驱动
3.1 下载驱动包
NVIDIA驱动官方下载:Linux InfiniBand Drivers
请根据您所选择的操作系统和版本,以及CPU架构,下载相应的tar包。例如,选择MLNX_OFED_LINUX-5.9-0.5.6.0-rhel8.4-x86_64.tgz进行下载。
3.2 执行安装操作
# ./mlnxofedinstall
3.3 查看驱动版本信息
# ofed_info -s
MLNX_OFED_LINUX-5.9-0.5.6.0:
3.4 网卡状态
3.4.1 首次安装网卡时,如果未连接到交换机,网卡的状态将如下所示:
(如上图,ib0状态Down(双口卡还有ib1),网卡的SM lid为0,Base lid为65535,Link layer为IB模式)
3.4.2 使用线缆将网卡连接到交换机,大概30秒,端口UP,如下所示:
(如上图,网卡ib0物理状态LinkUp, 逻辑状态Active,子网管理器SM lid为 2,网卡Base lid为 3)
说明:
本案例交换机SB7800已经开启子网管理器功能,交换机端口速率为EDR 100Gb/s,网卡CX5也是 EDR 100Gb/s,由于线缆是FDR 56G,所以上图的Rate:56,并没有达到100
3.4.3 启动opensmd服务(视交换机型号选装)
如果交换机是SB7890或者是其它不带子网管理器功能的交换机(SB7890,SB7790,SX6025,IS5025),必须在服务器上开启子网管理器, 安装好网卡驱动后就可以使用下面命令:
# systemctl start opensmd
# systemctl enable opensmd
3.4.4 网卡运行环境监测
完成以上步骤,使用命令’mlnx_tune’检查,所有状态都正常,则网卡运行环境正常。
# mlnx_tune
4.网卡固件启用SR-IOV功能
4.1 下载Mellanox Management Tools (MFT)工具
下载链接:Mellanox Management Tools (MFT)
4.2 使用Mellanox Firmware Tools包在固件中启用和配置SR-IOV
# mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
4.2.1 在需要的PCI插槽上找到Connect-IB设备
# mst status
MST modules:
------------
MST PCI module loaded
MST PCI configuration module loaded
MST devices:
------------
/dev/mst/mt4115_pciconf0 - PCI configuration cycles access.
...
4.2.2 查询设备状态
# mlxconfig -d /dev/mst/mt4115_pciconf0 q
4.2.3 开启SR-IOV,设置可以切分的vf数量上限
# mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8
...
Apply new Configuration? ? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
4.2.4 设置网卡的工作模式。
Infiniband卡支持两种工作模式:IB模式和Ethernet模式
# mlxconfig -d /dev/mst/mt4115_pciconf0 q
Configurations: Next Boot
...
LINK_TYPE_P1 IB(1) #当前工作模式 IB
...
修改网卡的工作模式:
Ethernet模式: mlxconfig -d /dev/mst/mt4115_pciconf0 set LINK_TYPE_P1=2
IB模式: mlxconfig -d /dev/mst/mt4115_pciconf0 set LINK_TYPE_P1=1
重启机器生效
# reboot
此时,通过lspci无法看到vf。只有当SR-IOV在MLNX_OFED驱动上启用时,您才能看到它们。
4.2.5 查看节点物理网卡是否支持SR-IOV
查看所有的pci设备
# lspci -nnn |grep -i mellanox
61:00.0 Infiniband controller [0207]: Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]
查看设备详情
# lspci -vvs <pci-address>
61:00.0 Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4]
...
Capabilities: [180 v1] Single Root I/O Virtualization (SR-IOV)
IOVCap: Migration-, Interrupt Message Number: 000
IOVCtl: Enable- Migration- Interrupt- MSE- ARIHierarchy+
IOVSta: Migration-
Initial VFs: 3, Total VFs: 3, Number of VFs: 0, Function Dependency Link: 00
VF offset: 1, stride: 1, Device ID: 1014
Supported Page Size: 000007ff, System Page Size: 00000001
Region 0: Memory at 000005464e000000 (64-bit, prefetchable)
VF Migration: offset: 00000000, BIR: 0
Capabilities: [1c0 v1] Secondary PCI Express
LnkCtl3: LnkEquIntrruptEn- PerformEqu-
LaneErrStat: 0
Kernel driver in use: mlx5_core
Kernel modules: mlx5_core
5.在MLNX_OFED驱动上启用SR-IOV
5.1 定位设备(通常为 ‘mlx5_0’)
# ibstat
CA 'mlx5_0'
CA type: MT4115
Number of ports: 1
Firmware version: 12.28.2006
Hardware version: 0
Node GUID: 0xe41d2d03006768fa
System image GUID: 0xe41d2d03006768fa
Port 1:
State: Down
Physical state: Disabled
Rate: 10
Base lid: 65535
LMC: 0
SM lid: 0
Capability mask: 0x2650e848
Port GUID: 0xe41d2d03006768fa
Link layer: InfiniBand
5.2 获取此设备上的当前vf数
# cat /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs
0
如果命令失败,这可能意味着驱动程序没有加载。
5.3 设置所需的vf数量
# echo 2 > /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs
更改mlx5_num_vfs不是持久的,并且不能在服务器重新启动后继续存在。
5.4 检查PCI总线
# lspci -nnn |grep -i mellanox
61:00.0 Infiniband controller [0207]: Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]
61:00.1 Infiniband controller [0207]: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function] [15b3:1014]
61:00.2 Infiniband controller [0207]: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function] [15b3:1014]
5.5 恢复vf数量为0
# echo 0 > /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs