Mellanox 网卡:驱动安装和常见 ib 命令

发布时间: 更新时间: 总字数:3593 阅读时间:8m 作者: IP上海 分享 网址

Mellanox IB 网卡驱动安装

介绍

Mellanox ConnectX-6
  • InfiniBand (IB) 是一种用于高性能计算的计算机网络通信标准,具有极高的吞吐量和极低的延迟
  • 2019 年 3 月 11 日 NVIDIA 以 69 亿美元收购 Mellanox
    • 因此,Mellanox 网卡的驱动是在 NVIDIA 的官网下载的
  • OFED(OpenFabrics Enterprise Distribution) 是用于 RDMA 和内核绕过(kernel bypass)的开源软件应用(参考
    • 在 RDMA 的持续演进中,OpenFabric Alliance 所做的贡献可谓功不可没
    • OFED 可用于需要高效网络、存储连接和并行计算的商业、研究和科学环境。它是 RDMA/Advanced Networks 代码库的 OpenFabrics 版本。
    • 大部分代码来自 https://github.com/linux-rdmahttps://git.kernel.org。这些代码有时会在供应商的测试中进行新的修改和/或反向移植补丁。

检查是否安装

$ lspci -v | grep Mellanox

安装

  • 查看系统版本
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
  • 下载驱动网页:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
    • 收购前的地址 http://www.mellanox.com -> Software -> InfiniBand Drivers|LEARN MORE -> NVIDIA MLNX_OFED -> Download -> 依次选择 CentOS7.9 x86_64 获取下载链接
  • 下载驱动并安装(参考
# 下载与解压
wget https://content.mellanox.com/ofed/MLNX_OFED-5.5-1.0.3.2/MLNX_OFED_LINUX-5.5-1.0.3.2-rhel7.9-x86_64.tgz
tar -zxvf MLNX_OFED_LINUX-5.5-1.0.3.2-rhel7.9-x86_64.tgz
cd MLNX_OFED_LINUX-5.5-1.0.3.2-rhel7.9-x86_64

# 查看支持的内核版本
cat .supported_kernels

# 依赖安装
yum install libusbx lsof tcl tcsh tk

# 安装
./mlnxofedinstall
# 若 kernel 不支持,添加新编译
./mlnxofedinstall --add-kernel-support

# 重启驱动
/etc/init.d/openibd restart
  • 卸载
./uninstall.sh

openibd

  • openibd 是网卡需要的 daemon 程序,并且会给内核加载需要的 mod
    • 每个机器都需要运行
    • 查看加载的 rdma 内核模块 lsmod | grep rdma
  • 所有机器需要启动 openibd,service openibd start

OpenSM

  • 参考

  • OpenSM 是符合 InfiniBand 标准 Subnet Manager (SM)

  • OpenSM 是一个基于 InfiniBand 规范的 子网管理器(SM) 和管理员,它配置 InfiniBand 光纤、一个网络拓扑来连接 InfiniBand 节点

    • 它运行在 Mellanox OFED 软件堆栈进行 IB 网络管理,管理控制流走业务通道,属于带内管理方式
    • 所有 InfiniBand 网络都必须运行子网管理器才能正常工作
    • 一个网络中可以存在多个子网管理器,有主备之分
    • 大多数 InfiniBand 交换机都包含一个嵌入式子网管理器
    • 即使两个没有交换机的计算机组成的简单网络并且卡被重新插入,也需要子网管理器才能显示卡上的链接
  • 作用

    • 子网管理基础
    • 子网探测
    • LID 分配
    • 路由计算
  • 术语

    • LID,LID 的分配与特定的路由算法有关
      • LID(16 位)由 SM 分配,在子网内唯一,不能在子网间使用
      • LID 地址空间分为保留空间,单播地址空间,组播地址空间
      • LID 在 LRH(本地路由报头)中使用
  • 安装

# CentOS
yum install opensm

# Ubuntu
apt install opensm
  • 配置 /etc/rdma/opensm.conf
    • 若子网中有多个子网管理器,可以设置 PRIORITY 参数设置优先级
    • 分区 使管理员能够在 InfiniBand 上创建与以太网 VLAN 类似的子网
      • 如果使用特定速度(如 40 Gbps)定义分区,该分区中的所有主机必须至少支持这个速度。如果主机没有满足速度要求,就无法加入该分区
      • linux 在 /etc/rdma/partitions.conf 中配置分区
  • 启动
systemctl enable --now opensmd

常见命令

apt install infiniband-diags

# 其他相关的库
dpkg -l perftest ibverbs-providers libibumad3 libibverbs1 libnl-3-200 libnl-route-3-200 librdmacm1
mst start
mst status

ibvdev2netdev

ibvdev2netdev 显示 device 和网口的对应关系

iblinkinfo

iblinkinfo 查看 IB 交换模块的所有端口的连接状态。此命令会将集群内所有的 IB 交换模块都进行列举

logo

说明

  • 图片转载自
  • ① 表示这台交换机的 GUID 号,唯一区分交换机的标识
  • ② LID 号,集群创建时 SM 分配的唯一便于管理的 lid 号
  • ③ 表示 1-20 号口为 IB 交换模块与网卡连接的内部端口,其中 11-12、17-18 为预留口
  • ④ 表示 21-40 为 IB 交换模块外部连接口
  • ⑤ 表示 41 号口为虚拟机口,为集群跑压力的自由路由端口
  • ⑥ 表示当前端口的连接速率:4X*25.78125=100Gpbs(EDR)
  • ⑦ 表示网卡端口的 lid 号及所对应的服务器
  • ⑧ 表示 IB 交换模块外部连接口的 lid 号、端口序列号、对端连接设备的名称

show_gids

show_gids 显示 GID,RoCEv2 对应的 gid 编号为 3

$ 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
...
  • gid value 查询 /sys/class/infiniband/{device}/ports/{port}/gids/{index}
  • gid type /sys/class/infiniband/{device}/ports/{port}/gid_attrs/types/{index}
  • GID net_device /sys/class/infiniband/{device}/ports/{port}/gid_attrs/ndevs/{index}

ibdev2netdev

  • ibdev2netdev 查看当前系统下网卡名称与系统下 ib 端口名称的对应关系及状态
$ ibdev2netdev
mlx5_bond_0 port 1 ==> eno1 (Up)

$ ibdev2netdev -v
...

ibhosts

  • ibhosts 将集群中所有的 IB 网卡设备进行罗列

ibv_devinfo

  • ibv_devinfo 查看网卡端口的详细信息,与 ibstat 功能类似,多了 PSID(board_id)信息
ibv_devinfo
# 显示device信息(详细)
ibv_devinfo -v
# 输出指定设备的主要信息
ibv_devinfo -d mlx5_0
# 输出指定设备的详细信息
$ ibv_devinfo -d mlx5_0 -v
hca_id: mlx5_0
     transport:                  InfiniBand (0)
     fw_ver:                     2.30.8000
     node_guid:                  f452:1403:007b:cba0
     sys_image_guid:             f452:1403:007b:cba3
     vendor_id:                  0x02c9
     vendor_part_id:             4099
     hw_ver:                     0x0
     board_id:                   MT_1090120019
     phys_port_cnt:              2
          port:   1
                state:              PORT_ACTIVE (4)
                max_mtu:            4096 (5)
                active_mtu:         2048 (4)
                sm_lid:             2
                port_lid:           2
                port_lmc:           0x01
                link_layer:         InfiniBand

          port:   2
                state:              PORT_ACTIVE (4)
                max_mtu:            4096 (5)
                active_mtu:         4096 (5)
                sm_lid:             0
                port_lid:           0
                port_lmc:           0x00
                link_layer:         Ethernet

ibv_devices

ibv_devices 列出 device

ibv_devices

sminfo

  • sminfo 查询当前集群下 SM 的 GUID 号,表明当前 SM 设备已经被指定

ibdump

  • ibdump 转储(dump)来自 Mellanox 适配器卡的 InfiniBand 流量,并提供与以太网网络上的 tcpdump 工具类似的功能
    • 支持使用 Wireshark 解包

参数说明

$ ibdump -h
   ibdump-dump Mellanox Technologies ConnectX
  -d,--ib-dev = <dev>使用IB设备<dev>(找到默认的第一个设备)
  -i, --ib-port = <端口>使用IB设备的端口<端口>(默认1)
  -w,-write = <文件>  结果保存到文件(默认为“ sniffer.pcap”)
                         “-”代表标准输出-启用管道传输到tcpdump或tshark。
  -o,--output = <文件>是-w选项的别名。不使用-为了向后兼容
  -b,--max-burst = <log2突发> log2的最大突发大小
                               捕获而没有数据包丢失。
                               每个条目占用〜MTU字节的内存(默认12-4096个条目)
  -s,-silent不打印进度指示。
  -T,--conti使用连续页面。
  -M,--mem-mode <大小>(指定时),仅在抓包动作停止后才将包写入文件,它比默认模式快(丢包更少)
                         ,但占用更多内存。在这种模式下,ibdump在捕获<size>个字节后停止
  -p,--writer-thread <大小>使用特定线程将数据写入磁盘。为了使用此功能,您必须指定
                               两个临时缓冲区的大小,用于保存数据给线程写入磁盘

  --decap  解封装端口镜像的headers。用于捕获RSPAN流量时需要启用。
  -h,--help显示此帮助屏幕。
  -v,--version打印版本信息。
# 抓包
ibdump -d mlx5_0 -i 1 -w sniffer.pcap

ibstat

ibstatus 查看核更改网卡工作模式:Ethernet 或 infiniband 模式 ibstatibsysstat 查询 InfiniBand 设备状态或 IB 地址上的系统状态

$ ibstat mlx5_bond_0
CA 'mlx5_bond_0'
	CA type: MT4117
	Number of ports: 1
	Firmware version: 14.27.6122
	Hardware version: 0
	Node GUID: 0x0c42a10300757828
	System image GUID: 0x0c42a10300757828
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 25
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x00010000
		Port GUID: 0x0e42a1fffe757828
		Link layer: Ethernet

说明:

  • CA 'mlx5_bond_0':网卡端口名称,用于指定端口打流时多带的参数
  • Firmware version:当前网卡的固件版本
  • State:逻辑层网卡连接状态
  • Physical state:物理层网卡连接状态
  • Rate:速率
  • Base lid:SM 分配的 LID 号
  • SM lid:当前 SM 的 LID 号
  • Port GUID:网卡每个端口的 GUID 号,可用来指定 SM

ibroute

# dump all non empty mlids  of  switch  with lid 4
ibroute -M 4

ibnodes

  • ibnodes

ibswitches

  • ibswitches 查看当前集群的 IB 交换模块,此命令会将集群中所有的设备一一列举

ibdiagnet

  • ibdiagnet 检测当前集群下物理链路的健康情况,利用快速查看环境下链路状态

ibnetdiscover

# 扫描网络并显示每个端口的 LID、GUID、机器名和端口号等信息
$ ibnetdiscover -p
Switch  36 "S-xxx"         # "MF0;sw02:MSB7700/U1" enhanced port 0 lid 1 lmc 0
[1]     "H-xxx"[2](xxx)          # "MT25408 ConnectX Mellanox Technologies" lid 50 4xQDR
[2]     "H-xxx"[2](xxx)          # "MT25408 ConnectX Mellanox Technologies" lid 48 4xQDR
...

ofed_info

  • ofed_info 显示当前设备安装的 OFED 包的信息:驱动、工具等

cma_roce_mode

# 查看 mlx RoCE mode
$ cma_roce_mode -d mlx5_bond_0 -p 1
RoCE v2

$ cma_roce_mode -d mlx5_bond_1 -p 1
RoCE v2

# 设置 mlx RoCE mode
cma_roce_mode -d <dev> -p <port> -m <1|2>

rdma

# 显示 RDMA 链接
rdma link show

ibping

ibping 测试 RDMA 网络的连通性

# -S 服务端,-C 指定网卡
ibping -S -C mlx5_1 -P 1

# 客户端,-L 是 ibstat 查看到的 Base lid(本地标识符)
ibping -c 50 -C mlx5_0 -P 1 -L 2

其他

show_drop 查看端口包丢弃情况
ibchecknet, ibchecknode, 或 ibcheckport 验证 IB 子网、节点或端口并报告错误
ibtracert 跟踪 IB 路径
smpquery 或 smpdump 查询或转储 IB 子网管理属性
ibchecknet, ibchecknode, 或 ibcheckport 验证 IB 子网、节点或端口并报告错误
ibcheckportstate, ibcheckportwidth, ibcheckstate, or ibcheckwidth 验证已链接但不活动的 IB 端口、面向 1x (2.0 Gbps) 链路带宽的端口、IB 子网中已链接但不活动的端口或 IB 子网中的 lx 链路
ibclearcounters or ibclearerrors 对 IB 子网中的端口计数器或错误计数器进行清零
ibdatacounters or ibdatacounts 查询 IB 子网中的数据计数器或 IB 端口数据计数器

IPoIB

  • 参考
  • IP over InfiniBand(IPoIB)是在 InfiniBand 远程直接访问(RDMA)网络之上提供的 IP 网络模拟层
    • 通过 IPoIB ULP(Upper Layer Protocol)驱动,允许现有未经修改适配 RDMA 的应用通过 InfiniBand 网络发送数据。但是和原生 RDMA 支持的应用相比性能会偏低
    • IPoIB 是在 InfiniBand 协议上提供 IP 协议进行数据传输的能力
  • IPoIB 设备可在 Datagram 或 Connected 模式中配置
    • 支持修改 MTU 值
      • Datagram mode 最大支持 4K
      • Connected mode 最大支持 64K
  • IPoIB 驱动模块 ib_ipoib
  • IPoIB 还提供了基于以下软件的增强功能:
    • Giant Receive offload(GRO)
    • NAPI
    • Ethtool 支持

netplan 配置 IP 地址

$ ibdev2netdev
mlx5_0 port 1 ==> ibp4s0 (Up)

$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: networkd
  ethernets:
    ibp4s0:
      dhcp4: false
      addresses:
        - 10.10.10.111/24

# 配置生效
netplan apply

ifconfig 临时配置 IP 地址

ifconfig ib0 11.11.11.10 netmask 255.255.255.0

nmcli 配置 IP 地址

nmcli connection add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode Connected mtu 65520

nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002

nmcli connection modify mlx4_ib0 ipv4.addresses 192.0.2.1/24
nmcli connection modify mlx4_ib0 ipv4.gateway 192.0.2.254
nmcli connection modify mlx4_ib0 ipv4.dns 192.0.2.253
nmcli connection modify mlx4_ib0 ipv4.method manual

F&Q

网卡一直处于初始化状态 State:Initializing

$ ibstat
CA 'mlx5_0'
    CA type: MT4123
    Number of ports: 1
    Firmware version: 20.37.1014
    Hardware version: 0
    ...
    Port 1:
        State: Initializing
        ...
  • 原因:IB 子网中,子网管理器(SM)没有开启,开启 SM 常见的 2 种方式:
    • 交换机
    • 服务器

交换器开启示例:

ibswitch [standalone: master] > enable
ibswitch [standalone: master] # configure terminal
ibswitch [standalone: master] (config) # ib smnode ibswitch enable
ibswitch [standalone: master] (config) # show ib sm
enable
ibswitch [standalone: master] (config) # write memory

服务器开启示例:

/etc/init.d/opensmd start

PS:RoCE 不需要打开子网管理器

扩展

ib 流量监控

采用 prometheus/node_exporter 采集机器指标,默认支持 infiniband 流量采集(更多采集指标参考),参考

metrics 指标如下

node_infiniband_rate_bytes_per_second{device="mlx5_0",port="1"} 1.25e+10
node_infiniband_rate_bytes_per_second{device="mlx5_1",port="1"} 1.25e+09
  • grafana 图片配置如下
# 上行流量
# 查询语句
rate(node_infiniband_port_data_transmitted_bytes_total[$__rate_interval])
# Legend(建议)
node_infiniband_port_data_transmitted_rate.{{device}}.{{port}}

# 下行流量
# 查询语句
rate(node_infiniband_port_data_received_bytes_total[$__rate_interval])
# Legend(建议)
node_infiniband_port_data_received_rate.{{device}}.{{port}}

其他 exporter

使用案例

参考

  1. https://en.wikipedia.org/wiki/InfiniBand
  2. https://network.nvidia.com/pdf/whitepapers/IB_Intro_WP_190.pdf
  3. https://www.nvidia.cn/networking/
  4. https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/8/html-single/configuring_infiniband_and_rdma_networks/index
  5. https://www.h3c.com/cn/d_202007/1317229_30005_0.htm
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数