配置网卡SRIOV

参考文档
https://community.mellanox.com/s/article/howto-configure-sr-iov-for-connect-ib-connectx-4-with-kvm--infiniband-x

1. 检查主机启动指令中是否开启了Intel_IOMMU

[root@g1 ~]# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.10.0-862.el7.x86_64 root=UUID=6d337e51-2963-406e-9580-04dbca0f8d94 ro nouveau.modeset=0 rd.driver.blacklist=nouveau rhgb quiet net.ifnames=0 biosdevname=1 intel_iommu=on iommu=pt pci=realloc

里面intel_iommu=on iommu=pt都是on的状态,说明已经开启了

2. 检查opensm已经开启了虚拟化支持

opensm -c /tmp/opensm.conf && grep virt_enabled /tmp/opensm.conf && rm -f /tmp/opensm.conf
virt_enabled 2

看到virt_enabled 2,说明已经开启了

3. 在硬件Firmware中使能ConnectX-6 SRIOV,配置VF数量NUM_OF_VFS

找到ConnectX-6硬件的MST(Mellanox Software Tools)编号,在下面输出里,对应的是/dev/mst/mt4123_pciconf0

[root@g1 device]# mst status -v
DEVICE_TYPE             MST                           PCI       RDMA            NET                       NUMA  
ConnectX6(rev:0)        /dev/mst/mt4123_pciconf0      04:00.0   mlx5_1          net-ib0                   0 

检查SRIOV配置,看到还没有使能

[root@g1 ~]# mlxconfig -d /dev/mst/mt4123_pciconf0 query | grep -e SRIOV_EN -e NUM_OF_VFS -e FPP_EN
         NUM_OF_VFS                          0               
         SRIOV_EN                            False(0)   

配置EN和NUM

[root@g1 ~]# mlxconfig -d /dev/mst/mt4123_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4

在ConnectX-6以前,这里重启PCI设备就可以生效了

[root@g1 ~]# mlxfwreset -y -d /dev/mst/mt4123_pciconf0 reset

但是在当前19.3.24,对于ConnectX-6 HCA,需要重启服务器才能进行后面的步骤

重新开机后检查配置

[root@g1 ~]# mlxconfig -d /dev/mst/mt4123_pciconf0 query | grep -e SRIOV_EN -e NUM_OF_VFS -e FPP_EN
         NUM_OF_VFS                          4               
         SRIOV_EN                            True(1)

4. 在MLNX-OFED驱动中使能配置VF数量mlx5_num_vfs

检查、配置vf数量,因为还没配置,所以是0

[root@g1 ~]# cat /sys/class/infiniband/mlx5_1/device/mlx5_num_vfs
0

这里我测试把OFED驱动中的vf数量配置成1

echo 1>  /sys/class/infiniband/mlx5_1/device/mlx5_num_vfs

在PCI总线上,用lspci可以看到ConnectX-6对应的设备出现了多次,其中Function 1是刚才配置好的Virtual Function

[root@g1 ~]# lspci|grep Mellanox
04:00.0 Infiniband controller: Mellanox Technologies MT28908 Family [ConnectX-6]
04:00.1 Infiniband controller: Mellanox Technologies MT28908 Family [ConnectX-6 Virtual Function]

在ibdev2netdev输出中也可以看到,和04:00.1这个Virtual Function,对应的ib2和mlnx5_4设备

[root@g1 ~]# ibdev2netdev -v
0000:04:00.1 mlx5_4 (MT4124 - NA)  fw 20.99.5802 port 1 (DOWN  ) ==> ib2 (Down)

ibstat检查这个Virtual Function,看到这个设备还没有Node GUID和Port GUID

[root@g1 ~]# ibstat -d mlx5_4 | grep GUID
    Node GUID: 0x0000000000000000
    System image GUID: 0x98039b030082bc4e
        Port GUID: 0x0000000000000000

为VF配置GUID。这里我把Physical Function的GUID加1,作为第一个Virtual Fucntion的GUID。

[root@g1 ~]# echo Follow > /sys/class/infiniband/mlx5_1/device/sriov/0/policy 
[root@g1 ~]# echo 98:03:9b:03:00:82:bc:4f > /sys/class/infiniband/mlx5_1/device/sriov/0/node 
[root@g1 ~]# echo 98:03:9b:03:00:82:bc:4f > /sys/class/infiniband/mlx5_1/device/sriov/0/port

重新绑定PCI Function到MLNX OFED驱动,让上面的配置生效。

[root@g1 ~]# echo 0000:04:00.1 > /sys/bus/pci/drivers/mlx5_core/unbind
[root@g1 ~]# echo 0000:04:00.1 > /sys/bus/pci/drivers/mlx5_core/bind

5. 开virt-manager图形界面,把VF直通到虚拟机上

之后virt-dumpxml可以看到xml格式的配置方式。

你可能感兴趣的:(配置网卡SRIOV)