首页 > 其他分享 >Mellanox网卡开启SRIOV

Mellanox网卡开启SRIOV

时间:2024-05-13 15:19:14浏览次数:29  
标签:00 0000 SRIOV sudo 192.168 网卡 ff Mellanox 2.4

Mellanox网卡开启SRIOV

SRIOV是网卡虚拟化的一个重要功能。本文讲介绍如何在Mellanox网卡上开启SRIOV,并创建一些VF。

参考:Mellanox网卡开启SRIOV方法简介-天翼云开发者社区 - 天翼云 (ctyun.cn)

在BIOS中开启IOMMU

  • 先查看是否已经开启了IOMMU。
$ dmesg | grep -i dmar

什么输出也没有,说明没有开启IOMMU。我们需要修改grub来开启IOMMU。

$ sudo vim /etc/default/grub
  • 在GRUB_CMDLINE_LINUX字段中添加:
intel_iommu=on iommu=pt
  • 更新grub,然后重启。
$ sudo update-grub
$ sudo reboot
  • 再次查看IOMMU是否开启
$ dmesg | grep -i dmar
[    0.745740] DMAR: IOMMU enabled

开启网卡的SRIOV

  • 开启Mellanox的mst工具。
$ sudo mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
Unloading MST PCI module (unused) - Success

如果你显示sudo: mst: command not found,则移步安装MFT

  • 查看mst状态:
$ sudo mst status
MST modules:
------------
    MST PCI module is not loaded
    MST PCI configuration module loaded

MST devices:
------------
/dev/mst/mt4119_pciconf0         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:e3:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00

可以看到我们的网卡在mst里的名称是mt4119_pciconf0。

  • 查看SRIOV是否开启
$ sudo mlxconfig -d /dev/mst/mt4119_pciconf0 q
...
NUM_OF_VFS                                  0
...
SRIOV_EN                                    False(0)

可以看到当前SRIOV_EN是False,NUM_OF_VFS是0。说明没有开启SRIOV。

  • 开启SRIOV,设置VF数量为4。注意NUM_OF_VFS是VF的数量上限,不是已经分配的VF数量。
$ sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set SRIOV_EN=1
$ sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set NUM_OF_VFS=4
  • 然后再次重启机器
$ sudo reboot
  • 再次打开mst,查看设备状态,发现SRIOV已经开启。
$ sudo mst start
$ sudo mlxconfig -d /dev/mst/mt4119_pciconf0 q
NUM_OF_VFS                                  4
SRIOV_EN                                    True(1)

配置VF

  • 查看现有的pci设备。
$ lspci -D | grep Mellanox
0000:e3:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]
0000:e3:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
  • 查看现有的ib设备和网络设备。
$ sudo ibdev2netdev -v
0000:e3:00.0 mlx5_0 (MT4119 - MCX556A-ECAT) CX556A - ConnectX-5 QSFP28 fw 16.35.3006 port 1 (ACTIVE) ==> ibs10f0 (Up)
0000:e3:00.1 mlx5_1 (MT4119 - MCX556A-ECAT) CX556A - ConnectX-5 QSFP28 fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1 (Up)

接下来我们想要为ens10f1这个网络设备PF添加一些VF。

  • 查看当前设备的VF数量。
$ cat /sys/class/net/ens10f1/device/sriov_totalvfs
4
$ cat /sys/class/net/ens10f1/device/sriov_numvfs
0
  • 修改VF数量。
$ sudo chmod +666 /sys/class/net/ens10f1/device/sriov_numvfs
$ sudo echo 4 > /sys/class/net/ens10f1/device/sriov_numvfs
  • 再次查看PCI设备和网络设备。
$ lspci -D | grep Mellanox
0000:e3:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]
0000:e3:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
0000:e3:00.6 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:e3:00.7 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:e3:01.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:e3:01.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
$ sudo ibdev2netdev -v
0000:e3:00.0 mlx5_0 (MT4119 - MCX556A-ECAT) CX556A - ConnectX-5 QSFP28 fw 16.35.3006 port 1 (ACTIVE) ==> ibs10f0 (Up)
0000:e3:00.1 mlx5_1 (MT4119 - MCX556A-ECAT) CX556A - ConnectX-5 QSFP28 fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1 (Up)
0000:e3:00.6 mlx5_2 (MT4120 - NA)  fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1v0 (Up)
0000:e3:00.7 mlx5_3 (MT4120 - NA)  fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1v1 (Up)
0000:e3:01.0 mlx5_4 (MT4120 - NA)  fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1v2 (Up)
0000:e3:01.1 mlx5_5 (MT4120 - NA)  fw 16.35.3006 port 1 (ACTIVE) ==> ens10f1v3 (Up)

此时,可以看到我们新创建的4个VF了。注意:重启后vf数量会失效。

为VF配置IP

我们在两台机器上都开启了SRIOV。我想配置它们的ip分别是192.168.2.2192.168.2.4

  • 查看所有ip信息(以192.168.2.4为例)。
$ ip a
5: ens10f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 10:70:fd:2f:d4:21 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8f36:7219:df0c:edf8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
8: ens10f1v0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 2a:17:20:98:c7:81 brd ff:ff:ff:ff:ff:ff
9: ens10f1v1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:b8:4a:ac:64:33 brd ff:ff:ff:ff:ff:ff
10: ens10f1v2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 8a:de:57:f1:46:6e brd ff:ff:ff:ff:ff:ff
11: ens10f1v3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ba:6f:52:30:3e:ea brd ff:ff:ff:ff:ff:ff

可以看到目前的VF只有mac没有ip。

于是可以写如下的脚本:

  • 192.168.2.4的机器上:
sudo ip addr flush dev ens10f1v0
sudo ip addr add 192.168.2.4/24 dev ens10f1v0
sudo ip link set ens10f1v0 up

sudo arp -s 192.168.2.2 fe:0d:d9:e0:00:25 -i ens10f1v0
sudo arp -s 192.168.2.4 2a:17:20:98:c7:81 -i ens10f1v0

192.168.2.2上只需把第二行的192.168.2.4/24换成192.168.2.2/24

  • 再次查看ip(以192.168.2.4为例)。
$ ip a
5: ens10f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 10:70:fd:2f:d4:21 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8f36:7219:df0c:edf8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
8: ens10f1v0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 2a:17:20:98:c7:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.4/24 scope global ens10f1v0
       valid_lft forever preferred_lft forever
9: ens10f1v1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:b8:4a:ac:64:33 brd ff:ff:ff:ff:ff:ff
10: ens10f1v2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 8a:de:57:f1:46:6e brd ff:ff:ff:ff:ff:ff
11: ens10f1v3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ba:6f:52:30:3e:ea brd ff:ff:ff:ff:ff:ff

发现有ip地址了。

  • 查看arp(以192.168.2.4为例)。
$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
worker4                  ether   2a:17:20:98:c7:81   CM                    ens10f1v0
192.168.2.2              ether   fe:0d:d9:e0:00:25   CM                    ens10f1v0

路由表也配置好了。

另外,如果你在两台机器之间用交换机来负责路由,你还要对你的交换机进行相应的配置!

测试

ping

  • 我们ping一下试试:
$ ping 192.168.2.4
PING 192.168.2.4 (192.168.2.4) 56(84) bytes of data.
64 bytes from 192.168.2.4: icmp_seq=1 ttl=64 time=0.142 ms
64 bytes from 192.168.2.4: icmp_seq=2 ttl=64 time=0.075 ms

发现可以ping通了!

RoCE

  • 查看gid(以192.168.2.4为例)。
$ show_gids
DEV     PORT    INDEX   GID                                     IPv4            VER     DEV
---     ----    -----   ---                                     ------------    ---     ---
...
mlx5_2  1       0       fe80:0000:0000:0000:2817:20ff:fe98:c781                 v1      ens10f1v0
mlx5_2  1       1       fe80:0000:0000:0000:2817:20ff:fe98:c781                 v2      ens10f1v0
mlx5_2  1       2       0000:0000:0000:0000:0000:ffff:c0a8:0204 192.168.2.4     v1      ens10f1v0
mlx5_2  1       3       0000:0000:0000:0000:0000:ffff:c0a8:0204 192.168.2.4     v2      ens10f1v0
...

我们想要使用RoCEv2,因此应当选取gid编号为3。

  • 192.168.2.2上:
$ ib_send_bw -d mlx5_2 -x 3
  • 192.168.2.4上:
$ ib_send_bw 192.168.2.2 -d mlx5_2 --report_gbits -F -x 3
  • 结果:
---------------------------------------------------------------------------------------
                    Send BW Test
 Dual-port       : OFF          Device         : mlx5_2
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 PCIe relax order: ON
 ibv_wr* API     : ON
 TX depth        : 128
 CQ Moderation   : 1
 Mtu             : 1024[B]
 Link type       : Ethernet
 GID index       : 3
 Max inline data : 0[B]
 rdma_cm QPs     : OFF
 Data ex. method : Ethernet
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x0107 PSN 0x7b2724
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:02:04
 remote address: LID 0000 QPN 0x0107 PSN 0x3e7431
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:02:02
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
 65536      1000             92.33              92.32              0.176085
---------------------------------------------------------------------------------------

RoCE也跑通了。

标签:00,0000,SRIOV,sudo,192.168,网卡,ff,Mellanox,2.4
From: https://www.cnblogs.com/CQzhangyu/p/18189311

相关文章

  • [Mellanox] 安装MLNX_OFED
    [Mellanox]安装MLNX_OFED虽然已经安装过很多遍了,但是这里还是再次写一遍安装过程,方便以后查阅。Mellanox的这堆东西其实每个安装起来都不难,难点在于版本要匹配。所以最重要的是我们要知道1.我们需要哪个版本的驱动;2.这些软件的版本对应关系。查看当前的各种配置版本MLNX_OFED......
  • 物理机centos7.9扩展网卡
    前段时间装了一台机器,系统是centos7.9,主板自带两个网口,不够用,又插了一块Inter芯片的4口pcie网卡,重启系统后,使用ipa查看ip信息,网卡直接识别到了,但/etc/sysconfig/network-scripts/目录里没有网卡配置文件,需要手动创建这些文件:#进入目录[root@localhost~]#cd/etc/sysconfig......
  • Linux之手把手教会修改网卡名称【转载】
    一、为什么要修改网卡名称在早期的linux系统中,网卡名称常常以传统的命名方式eth0、eth1、eth2来命名。例如,CentOS6之前,网络接口使用连续号码命名:eth0、eth1等,但是,如果再新增硬件设备,也有可能会被识别成eth0,eth1等。CentOS7开始,改变了网卡设备命名规则,基于硬件生成网卡名,例如......
  • Linux 7修改网卡名称后,配置文件中的默认网关不生效【转载】
    背景 为了系统统一管理在创建了系统后统一将网卡名称修改为eth0,eth1等格式,并在修改完网卡名称重新编译grub配置文件重启后,添加了静态路由,使用route-n查看系统发现路由可以生效,但是配置的默认网关不生效,记录下排查过程。检查网卡配置文件并手动配置默认网关 在检查了网卡配......
  • 多网卡设置----bond
    bond将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址Bonding聚合链路工作模式-mod=0,即:(balance-rr)Round-robinpolicy(**轮询**)......
  • C#获取当前激活网卡的速度计 - 开源研究系列文章
          以前用C#编写过一个网络速度计,用于监控计算机当前网卡的上传和下载速度。不过当时这个小应用没有完成,主要是那个获取网络速度的类库没有完成。这次趁有空,就把这个小应用进行了编写。其中涉及到的获取网络速度的代码整理出来了,于是就有了此博文。 1、项目目录......
  • OpenWRT_2.5G_USB3_网卡_测速太慢
    OpenWRT_装上_2.5G_USB3_网卡_测速太慢转载注明来源:本文链接来自osnosn的博客,写于2024-04-29.现象Openwrt裸装在机器N3160机器上。有4核。原机有两个网卡,一个是板载,一个是mimiPCIE。都是千兆。使用没发现问题,两张网卡都能跑满千兆。升级2.5G网卡。把miniPCIE的网卡......
  • centos7虚拟机配置ens网卡静态地址还是会dhcp分配一个地址?
    centos7虚拟机配置ens网卡静态地址还是会dhcp分配一个地址?问题现象[root@cent0s7~]#ipa1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8s......
  • Debian/Linux安装 Realtek 8811cu无线网卡驱动
    1、下载必备安装包make、gcc(debian中可用build-essential包)、bc、linux-headers-$(uname-r)、dkmssudoaptinstallbuild-essentialbcsudoaptinstalllinux-headers-$(uname-r)dkms2、在github中下载8811cu的驱动(8811cu和8821cu用的同一个驱动),注意下驱动程序是否能......
  • 网卡-单网卡热点
    公司大屏单网卡开出来的热点使用不太稳定,小伙伴们紧急定位跟进Wifi、热点不同频段导致的网络不稳定经验证尝试发现一个现象:连5Gwifi开5G热点、连2.4Gwifi开2.4G热点比较稳定,而5Gwifi开2.4G热点、连2.4Gwifi开5G热点投屏质量很差。以下是测试过程,手机连接移动网络打开热点,大屏W......