Linux 环境下 IB(InfiniBand) 组网认知

2024-04-26 14:11:31 浏览数 (1)

写在前面

  • 工作中遇到,简单整理
  • 博文内容涉及 InfiniBand 简单认知,以及使用 ib_send_*iperf3IB 组网进行测试 Demo
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》

简单介绍

InfiniBand 是什么?

InfiniBand (或则直接叫IB)是一种高性能计算和数据中心网络技术。它提供了一种低延迟、高带宽和可靠性的连接方式,用于连接服务器、存储设备和其他计算资源。InfiniBand的设计目标是为数据中心和企业级网络提供更好的性能和可扩展性。

采用 InfiniBand 连接的设备可以通过RDMA(Remote Direct Memory Access)技术实现零拷贝数据传输,在减少CPU负载的同时提高了应用程序的性能。此外,InfiniBand 还提供了诸如缓冲区管理QoS(Quality of Service)虚拟化等特性,以支持高效的数据传输和资源管理。

如何理解 InfiniBand?

用通俗的话讲,把以太网想象成一个快递包裹分发网络(路由寻址);而IB网络,则可以想象成一个地铁轨道交通网络

以太网

以太网 类似一个快递包裹分发网络,这个网络中所有的快递中转站(交换机/路由器)都是独立运作,根据一套公认的规则(网络协议)进行分拣并投递对。

每个中转站(网络设备)设备来说,第一,它可能看到发送到任何地址的包裹(分布式,异构的),所以它收到每个包都要算算该怎么发(这就要花时间,引入延迟),如果业务太繁忙,收不下来了,就间断粗暴的把包裹丢弃(丢包)。

IB网络

IB网络 你可以想象成一个地铁轨道交通网络。这是因为IB的底层是基于VCT(Virtual Cut Through)技术。因此IB的一个数据包,与以太网的包裹相比更像是一列火车(每节车厢是个叫做flit的数据单元)

为什么这么类比?不像以太网在转发时必须先在入队列上包裹收下来,然后丢到出队列等待再发出去。IB网络是直接然后再在过每个中转站的时候,车屁股还没进站,车头已经向下一站出发了!所以它的延迟才能做到这么低。 并且,也如同轨道交通网络一样,这些中转站(交换机)之所以能做到这么快的让车辆通过,是因为目的地车站是确定且有限的(IB网络的地址数量,称为LID号,是有限的,地址空间65535个),所有列车怎么走在网络开始运行前都提前决定好了(路由表提前算好),所以在每个中转站的扳道工只需要简单查一下线路图(实现就是个普通的数组查询),“到10号站的车该走n2出口”就行了,而不像快递网络一样去查“xxx区xxx号xxx大厦”该怎么走(实现中用哈希或者CAM)

所以说 InfiniBand 是 一种通信技术,和我们常讲的 ISO 参考模型没有直接关系,InfiniBand 本身并不直接对应于 OSI(Open System Interconnection)参考模型 的某一特定层,InfiniBand 作为一种网络通信技术,其实现和功能跨越了OSI参考模型的多个层次。

通信机制上,InfiniBand 使用软件定义的方法建立大规模且流量纯净的二层网络,避免了以太网中的ARP广播机制可能带来的广播风暴问题和组网限制。InfiniBand 的链路层提供有序数据包传递和基于信用的流量控制,使CPU占用可忽略不计。而以太网则使用以网络设备为中心的方法建立路由,并使用软件控制数据的传输,这可能需要高性能CPU进行数据包的处理

应用层面InfiniBand 能够绕过操作系统内核,创建应用程序间通信的直接通道,为应用程序提供延迟极低的消息传输服务。相比之下,传统以太网应用架构中,应用程序并不直接访问网络。

换句话我们可以讲,从上到下在链路层开始,IB 组网和 IP 组网就不同了。我们知道常用的软件都是基于 以太网的,那么

使用 IB 组网 是如何传递 IP 数据包?

使用InfiniBand(IB)组网来传递IP数据包涉及到一个特殊的处理过程,因为 InfiniBand 本身并不是设计用来直接传输IP数据包的。然而,通过一些技术和工具,我们可以在InfiniBand网络上传输IP数据包。

一种常见的方法是使用IP over InfiniBand(IPoIB)技术。IPoIB是一种在 InfiniBand 网络上封装和传输IP数据包的方法。它将IP数据包封装在InfiniBand的数据包中(类似 IPIP 等一些隧道协议),以便在InfiniBand 网络上传输。在接收端,IPoIB再将数据包解封,还原成原始的IP数据包。

使用IPoIB技术,可以在InfiniBand网络上实现IP数据包的传输,从而利用InfiniBand的高速和低延迟特性。这对于需要高性能网络连接的应用程序来说是非常有用的,特别是在数据中心和高性能计算环境中。

需要注意的是,使用IPoIB技术可能需要进行一些额外的配置和设置。可能需要配置InfiniBand子网管理器(Subnet Manager)和IPoIB驱动程序,以确保网络正确连接和IP数据包能够正确传输。此外,您还需要确保网络设备和操作系统支持IPoIB技术。

名词的解释

在 InfiniBand 组网中,涉及了一些专有名词和术语,以下是这些名词的解释:

  • InfiniBand适配器(HCA)(网卡):InfiniBand适配器是连接InfiniBand网络的设备,负责将计算机系统中的数据和控制信息转换为InfiniBand协议格式。
  • InfiniBand子网管理器(SM)(InfiniBand 交换机):InfiniBand子网管理器是一个特殊的InfiniBand适配器,用于管理整个InfiniBand网络。它负责配置和维护InfiniBand网络的路由表、端口状态和链路速率等信息。
  • 连接建立(connect):连接建立是指在两个节点之间建立通信连接的过程。在这个过程中,两个InfiniBand适配器交换相应的信息并确定通信能力和资源。
  • InfiniBand数据报(IB包):InfiniBand数据报是在InfiniBand网络上传输数据的基本单位。它包括源和目标地址、传输的数据、以及其他元数据。
  • Remote Direct Memory Access(RDMA):RDMA是一种在InfiniBand网络上实现零拷贝数据传输的技术。它允许数据直接从内存复制到另一个计算机系统的内存,而无需通过CPU进行中间处理。
  • 链路速率(link speed):链路速率是指InfiniBand网络中物理链路上的最大传输速率。它通常以Gbps(千兆比特每秒)为单位表示。
  • 断开连接(disconnect):断开连接是指在两个节点之间结束通信连接的过程,使得每个适配器和端口可以重新分配给其他节点。

常用命令

当前测试系统

代码语言:javascript复制
root@liruilongs.github.io:~# hostnamectl
 Static hostname: liruilongs.github.io
       Icon name: computer-desktop
         Chassis: desktop
      Machine ID: 9b970dc65020411ab022b51d5d17e883
         Boot ID: 835e69ea4f4d4384aa317e7875537b44
Operating System: Ubuntu 22.04.4 LTS
          Kernel: Linux 5.15.0-105-generic
    Architecture: x86-64
 Hardware Vendor: Supermicro
  Hardware Model: X12DAi-N6
root@liruilongs.github.io:~#

确认下 IB 网卡硬件设备是否正常识别

代码语言:javascript复制
root@liruilongs.github.io:~# lshw -c network | grep -i -C 3 ibs
       vendor: Mellanox Technologies
       physical id: 0
       bus info: pci@0000:b1:00.0
       logical name: ibs106f0
       version: 00
       serial: 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00
       width: 64 bits
--
       vendor: Mellanox Technologies
       physical id: 0.1
       bus info: pci@0000:b1:00.1
       logical name: ibs106f1
       version: 00
       serial: 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00
       width: 64 bits
root@liruilongs.github.io:~#

ibstat

ibstat 命令用于查看 IB 网卡状态

代码语言:javascript复制
[root@toolbox ~]# ibstat
CA 'mlx4_0'
        CA type: MT4099
        Number of ports: 2
        Firmware version: 2.42.5000
        Hardware version: 1
        Node GUID: 0x0002c903003fc5e0
        System image GUID: 0x0002c903003fc5e3
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 40
                Base lid: 45
                LMC: 0
                SM lid: 1
                Capability mask: 0x02514868
                Port GUID: 0x0002c903003fc5e1
                Link layer: InfiniBand
        Port 2:
                State: Active
                Physical state: LinkUp
                Rate: 40
                Base lid: 46
                LMC: 0
                SM lid: 1
                Capability mask: 0x02514868
                Port GUID: 0x0002c903003fc5e2
                Link layer: InfiniBand
[root@toolbox ~]#
  • CA类型:HCA型号为 MT4099。
  • 端口数量:HCA有2个端口。
  • 固件版本:HCA固件版本为2.42.5000。
  • 硬件版本:HCA硬件版本为1。
  • 节点GUID:此HCA的节点全局唯一标识符(GUID)为0x0002c903003fc5e0。
  • 系统镜像GUID:此HCA的系统镜像GUID为0x0002c903003fc5e3。
  • 端口1:这提供了有关HCA端口1的信息:
  • 状态:端口1的状态为“活动”。
  • 物理状态:端口1的物理状态为“LinkUp”。
  • 速率:端口1的数据传输速率为40 Gbps。
  • 基本LID:端口1的基本LID(本地标识符)为45。
  • LMC:端口1的LMC(LID掩码计数)为0,表示仅使用基本LID。
  • SM LID:端口1的SM LID(子网管理器LID)为1。
  • 能力掩码:端口1的能力掩码为0x02514868。
  • 端口GUID:端口1的端口GUID为0x0002c903003fc5e1。
  • 链接层:端口1使用的链接层协议是InfiniBand。

ibdiagnet

ibdiagnet 检测当前集群下物理链路的健康情况

代码语言:javascript复制
root@liruilongs.github.io:~# ibdiagnet
Loading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
    Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
    Since port-num was not specified (-p option), port 1 of device 1 will be
    used as the local port.
ibwarn: [7757] get_abi_version: can't read ABI version from /sys/class/infiniband_mad/abi_version (No such file or directory): is ib_umad module loaded?
-E- Fail to ibcr_bind.

提示有内核模块没有加载,所以需要重新加载一下模块

代码语言:javascript复制
root@liruilongs.github.io:~# lsmod | grep ib_umad
root@liruilongs.github.io:~# modprobe ib
ib700wdt   ib_ipoib   ib_isert   ibmasm     ibm-cffps  ibm_rtl    ib_qib     ib_srpt
ib_cm      ib_iser    ibmaem     ibmasr     ibmpex     ib_mthca   ib_srp     ib_umad
root@liruilongs.github.io:~# modprobe ib_umad
root@liruilongs.github.io:~# lsmod | grep ib_umad
ib_umad                40960  0
ib_core               393216  3 ib_umad,ib_uverbs,mlx5_ib
root@liruilongs.github.io:~#

加载完成再次运行命令

代码语言:javascript复制
root@liruilongs.github.io:~# ibdiagnet
Loading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
    Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
    Since port-num was not specified (-p option), port 1 of device 1 will be
    used as the local port.
-I- Discovering ... 49 nodes (4 Switches & 45 CA-s) discovered.


-I---------------------------------------------------
-I- Bad Guids/LIDs Info
-I---------------------------------------------------
-I- No bad Guids were found

...........................
-I- IPoIB Subnets Check
-I---------------------------------------------------
-I- Subnet: IPv4 PKey:0x7fff QKey:0x00000b1b MTU:2048Byte rate:10Gbps SL:0x00
-W- Suboptimal rate for group. Lowest member rate:40Gbps > group-rate:10Gbps

-I---------------------------------------------------
-I- Bad Links Info
-I- No bad link were found
-I---------------------------------------------------
----------------------------------------------------------------
-I- Stages Status Report:
    STAGE                                    Errors Warnings
    Bad GUIDs/LIDs Check                     0      0
    Link State Active Check                  0      0
    General Devices Info Report              0      0
    Performance Counters Report              0      0
    Partitions Check                         0      0
    IPoIB Subnets Check                      0      1

Please see /var/cache/ibutils/ibdiagnet.log for complete log
----------------------------------------------------------------

-I- Done. Run time was 5 seconds.
root@liruilongs.github.io:~#

ibnetdiscover -p: 扫描网络并显示每个端口的 LID、GUID、机器名和端口号等信息。

代码语言:javascript复制
[root@toolbox ~]# ibnetdiscover
#
# Topology file: generated on Fri Apr 28 11:09:33 2023
#
# Initiated from node 0002c903003fc5e0 port 0002c903003fc5e1

vendid=0x2c9
devid=0xcb20
sysimgguid=0x248a070300e43740
switchguid=0x248a070300e43740(248a070300e43740)
Switch  36 "S-248a070300e43740"         # "MF0;sw02:MSB7700/U1" enhanced port 0 lid 1 lmc 0
[1]     "H-0002c9030039d940"[2](2c9030039d942)          # "MT25408 ConnectX Mellanox Technologies" lid 50 4xQDR
[2]     "H-0002c903003638a0"[2](2c903003638a2)          # "MT25408 ConnectX Mellanox Technologies" lid 48 4xQDR
....................................
[30]    "H-0002c903003f0f70"[2](2c903003f0f72)          # "MT25408 ConnectX Mellanox Technologies" lid 16 4xQDR
[35]    "S-506b4b03005ec3a0"[35]                # "MF0;sw01:MSB7700/U1" lid 2 4xEDR
[36]    "S-506b4b03005ec3a0"[36]                # "MF0;sw01:MSB7700/U1" lid 2 4xEDR

vendid=0x2c9
devid=0xcb20
sysimgguid=0x506b4b03005ec3a0
switchguid=0x506b4b03005ec3a0(506b4b03005ec3a0)
Switch  36 "S-506b4b03005ec3a0"         # "MF0;sw01:MSB7700/U1" enhanced port 0 lid 2 lmc 0
[1]     "H-0002c9030039d940"[1](2c9030039d941)          # "MT25408 ConnectX Mellanox Technologies" lid 49 4xQDR
[2]     "H-0002c903003638a0"[1](2c903003638a1)          # "MT25408 ConnectX Mellanox Technologies" lid 47 4xQDR
[3]     "H-0002c903004214f0"[1](2c903004214f1)          # "MT25408 ConnectX Mellanox Technologies" lid 43 4xQDR
........................
[27]    "H-0002c90300363800"[1](2c90300363801)          # "MT25408 ConnectX Mellanox Technologies" lid 11 4xQDR
[28]    "H-0002c9030040e440"[1](2c9030040e441)          # "MT25408 ConnectX Mellanox Technologies" lid 13 4xQDR
[29]    "H-0002c903003fb180"[1](2c903003fb181)          # "MT25408 ConnectX Mellanox Technologies" lid 17 4xQDR
[30]    "H-0002c903003f0f70"[1](2c903003f0f71)          # "MT25408 ConnectX Mellanox Technologies" lid 15 4xQDR
[35]    "S-248a070300e43740"[35]                # "MF0;sw02:MSB7700/U1" lid 1 4xEDR
[36]    "S-248a070300e43740"[36]                # "MF0;sw02:MSB7700/U1" lid 1 4xEDR

iperf3 如何测试 InfiniBand 组网

iperf3 可以用于测试 InfiniBand 组网的性能和带宽。为此,需要在 InfiniBand 网络中确认 InfiniBand 适配器已启用 IPoIB 功能。IPoIB是一种在InfiniBand网络上传输IP数据的方法,它允许使用标准的TCP/IP协议栈和网络应用程序。在启用IPoIB之前,确保已正确配置InfiniBand适配器和子网管理器(SM)。

需要确认对应的模块有么有加载,没有模块需要重新加载一下

代码语言:javascript复制
root@liruilongs.github.io:~# lsmod | grep ib_ipoib
root@liruilongs.github.io:~# modprobe  ib_ipoib
root@liruilongs.github.io:~# lsmod | grep ib_ipoib
ib_ipoib              118784  0
ib_cm                 131072  1 ib_ipoib
ib_core               393216  5 ib_ipoib,ib_umad,ib_uverbs,mlx5_ib,ib_cm
root@liruilongs.github.io:~#

iperf3 认知

iperf3 测试 基于 CS 架构,不指定端口时使用默认端口

服务端配置,此命令将在默认的TCP端口5201上启动iperf3服务器,并等待客户端连接请求。

代码语言:javascript复制
[root@toolbox ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.26.2, port 43292
[  5] local 192.168.26.1 port 5201 connected to 192.168.26.2 port 43306
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  2.48 GBytes  21.3 Gbits/sec
[  5]   1.00-2.00   sec  2.58 GBytes  22.2 Gbits/sec
[  5]   2.00-3.00   sec  2.49 GBytes  21.4 Gbits/sec
[  5]   3.00-4.00   sec  2.59 GBytes  22.3 Gbits/sec
[  5]   4.00-5.00   sec  2.51 GBytes  21.5 Gbits/sec
[  5]   5.00-6.00   sec  2.44 GBytes  20.9 Gbits/sec
[  5]   6.00-7.00   sec  2.42 GBytes  20.8 Gbits/sec
[  5]   7.00-8.00   sec  2.56 GBytes  22.0 Gbits/sec
[  5]   8.00-9.00   sec  2.48 GBytes  21.3 Gbits/sec
[  5]   9.00-10.00  sec  2.52 GBytes  21.6 Gbits/sec
[  5]  10.00-10.00  sec   622 KBytes  20.8 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -

客户端

代码语言:javascript复制
[root@toolbox ~]#  iperf3  -c 192.168.26.1
Connecting to host 192.168.26.1, port 5201
[  5] local 192.168.26.6 port 41866 connected to 192.168.26.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  2.67 GBytes  23.0 Gbits/sec  3946    401 KBytes
[  5]   1.00-2.00   sec  2.64 GBytes  22.6 Gbits/sec  4408    263 KBytes
[  5]   2.00-3.00   sec  2.68 GBytes  23.0 Gbits/sec  4027    428 KBytes
[  5]   3.00-4.00   sec  2.83 GBytes  24.3 Gbits/sec  3662    381 KBytes
[  5]   4.00-5.00   sec  2.86 GBytes  24.6 Gbits/sec  3212    414 KBytes
[  5]   5.00-6.00   sec  2.79 GBytes  24.0 Gbits/sec  4233    372 KBytes
[  5]   6.00-7.00   sec  2.80 GBytes  24.1 Gbits/sec  4195    428 KBytes
[  5]   7.00-8.00   sec  2.61 GBytes  22.4 Gbits/sec  4121    465 KBytes
[  5]   8.00-9.00   sec  2.76 GBytes  23.7 Gbits/sec  4708    519 KBytes
[  5]   9.00-10.00  sec  2.55 GBytes  21.9 Gbits/sec  4095    445 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  27.2 GBytes  23.4 Gbits/sec  40607             sender
[  5]   0.00-10.00  sec  27.2 GBytes  23.3 Gbits/sec                  receiver

iperf Done.
⬢[root@toolbox ~]#

性能测试的输出结果,其中包含了有关测试过程和结果的详细信息。下面是每个字段的含义:

  • ID:测试流的唯一标识符。
  • Interval:测试的时间间隔,以秒为单位。
  • Transfer:在测试过程中传输的总字节数。
  • Bitrate:传输速率,以比特每秒(bps)为单位。
  • Retr:在测试期间发生的重传次数。
  • Sender:表示此行所列出的结果来自iperf3客户端。
  • Receiver:表示此行所列出的结果来自iperf3服务器。

从该输出结果可以看出,这次iperf3测试使用TCP协议,在10秒的测试时间内,数据传输量为27.2 GB,传输速率为 23.4Gbps。重传次数为40607次。

给 IB 网卡 配置IP,查看当前IP信息

代码语言:javascript复制
root@liruilongs.github.io:~# ip a
...................................
7: ibs106f0: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
    link/infiniband 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7a brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    altname ibp177s0f0
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
    link/infiniband 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7b brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    altname ibp177s0f1

给IB卡配置IP

代码语言:javascript复制
root@liruilongs.github.io:~# ip address add 10.5.200.177/24 dev ibs106f0
root@liruilongs.github.io:~# ip link set ibs106f0 up

确认配置

代码语言:javascript复制
root@liruilongs.github.io:~# ip a
................................................
7: ibs106f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 256
    link/infiniband 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7a brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    altname ibp177s0f0
    inet 10.5.200.177/24 scope global ibs106f0
       valid_lft forever preferred_lft forever
    inet6 fe80::7efe:9003:29:227a/64 scope link tentative
       valid_lft forever preferred_lft forever
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
    link/infiniband 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7b brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    altname ibp177s0f1

做 ping 测试

代码语言:javascript复制
root@liruilongs.github.io:~# ping 10.5.200.177
PING 10.5.200.177 (10.5.200.177) 56(84) bytes of data.
64 bytes from 10.5.200.177: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 10.5.200.177: icmp_seq=2 ttl=64 time=0.017 ms
^C
--- 10.5.200.177 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1031ms
rtt min/avg/max/mdev = 0.017/0.022/0.027/0.005 ms

ping 局域网IP 测试

代码语言:javascript复制
root@liruilongs.github.io:~# ping 10.5.200.200
PING 10.5.200.200 (10.5.200.200) 56(84) bytes of data.
64 bytes from 10.5.200.200: icmp_seq=1 ttl=64 time=0.319 ms
64 bytes from 10.5.200.200: icmp_seq=2 ttl=64 time=0.281 ms
^C
--- 10.5.200.200 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1011ms
rtt min/avg/max/mdev = 0.281/0.300/0.319/0.019 ms
root@liruilongs.github.io:~# ping 10.5.200.200 -i ibs106f0
ping: option argument contains garbage: ibs106f0
ping: this will become fatal error in the future
PING 10.5.200.200 (10.5.200.200) 56(84) bytes of data.
64 bytes from 10.5.200.200: icmp_seq=1 ttl=64 time=0.295 ms
64 bytes from 10.5.200.200: icmp_seq=75 ttl=64 time=0.267 ms
64 bytes from 10.5.200.200: icmp_seq=107 ttl=64 time=0.240 ms
^C
--- 10.5.200.200 ping statistics ---
129 packets transmitted, 13 received, 89.9225% packet loss, time 1839ms
rtt min/avg/max/mdev = 0.177/0.218/0.344/0.050 ms, ipg/ewma 14.370/0.240 ms

确认网络没有问题就可以进行测试,在至少两个节点上运行 iperf3。其中一个节点充当iperf3服务器,而其他节点则充当客户端。

进行 iperf3 测试。一旦客户端与服务器建立连接,iperf3 测试即可开始。在测试过程中,可以使用各种选项和参数来调整测试过程和输出结果,小伙伴可自行查看帮助文档

查看测试结果。测试完成后,iperf3客户端将显示详细的测试结果,包括带宽、吞吐量、延迟和数据包丢失率等信息。可以使用这些信息来评估网络性能和诊断问题。

在 InfiniBand 网络中使用 iperf3 时,建议使用 RDMA 选项(--rdma)以最大限度地利用 InfiniBand 网络的性能和特性。

ib_read_* 如何测试 InfiniBand 组网

带宽测试 ib_send_bw ,在server端执行

代码语言:javascript复制
[ibtests]# ib_send_bw -a -c UD -d mlx4_0 -i 1
------------------------------------------------------------------
                    Send BW Test
Connection type : UD
Inline data is used up to 1 bytes message
  local address:  LID 0x0b, QPN 0x28004c, PSN 0xfaa100
  remote address: LID 0x02, QPN 0x70004b, PSN 0xc14da8
Mtu : 2048
------------------------------------------------------------------
 #bytes #iterations    BW peak[MB/sec]    BW average[MB/sec]
------------------------------------------------------------------
  • -a:这个选项通常用于自动选择最佳的包大小来进行测试。
  • -c UD:指定使用 Unreliable Datagram (UD) 传输类型进行测试。UD 是一种无连接、不可靠的数据报服务,它适用于那些不需要保证数据可靠传输的场景,例如一些高性能计算或大数据处理任务。
  • -d mlx4_0:指定使用 mlx4_0 这个 InfiniBand 设备来进行测试。mlx4_0 是 InfiniBand 设备的名称,通常与特定的硬件适配器相关联。
  • -i 1:这个选项指定了迭代次数,即测试会运行 1 次。

在client端执行

代码语言:javascript复制
[ibtests]# ib_send_bw -a -c UD -d mlx4_0 -i 1 10.10.11.8
------------------------------------------------------------------
                    Send BW Test
Connection type : UD
Inline data is used up to 1 bytes message
  local address:  LID 0x02, QPN 0x70004b, PSN 0xc14da8
  remote address: LID 0x0b, QPN 0x28004c, PSN 0xfaa100
Mtu : 2048
------------------------------------------------------------------
 #bytes #iterations    BW peak[MB/sec]    BW average[MB/sec]
      2        1000               7.51                  7.21
      4        1000              15.29                 14.19
      8        1000              30.66                 30.45
     16        1000              60.33                 59.95
     32        1000             119.53                113.20
     64        1000             233.75                233.16
    128        1000             414.95                413.64
    256        1000             794.90                698.20
    512        1000            1600.46                774.67
   1024        1000            2011.81                804.29
   2048        1000            2923.29               2919.91
------------------------------------------------------------------

延时测试 ib_send_lat, 在server端执行

代码语言:javascript复制
[ibtests]# ib_send_lat -a -c UD -d mlx4_0 -i 1
------------------------------------------------------------------
                    Send Latency Test
Inline data is used up to 400 bytes message
Connection type : UD
   local address: LID 0x0b QPN 0x2c004c PSN 0xa1be86
  remote address: LID 0x02 QPN 0x74004b PSN 0x6ea837
------------------------------------------------------------------
 #bytes #iterations    t_min[usec]    t_max[usec]  t_typical[usec]
      2        1000           1.41           4.45             1.43
      4        1000           1.41           3.84             1.43
      8        1000           1.41           2.75             1.43
     16        1000           1.41           3.01             1.42
     32        1000           1.49           3.92             1.50
     64        1000           1.55           3.96             1.57
    128        1000           1.70           2.58             1.71
    256        1000           2.41           5.73             2.45
    512        1000           2.82           4.07             2.90
   1024        1000           3.28           4.95             3.31
   2048        1000           4.11          11.74             4.14
------------------------------------------------------------------

在client端执行

代码语言:javascript复制
[ibtests]# ib_send_lat -a -c UD -d mlx4_0 -i 2 10.10.11.8
------------------------------------------------------------------
                    Send Latency Test
Inline data is used up to 400 bytes message
Connection type : UD
   local address: LID 0x02 QPN 0x74004b PSN 0x6ea837
  remote address: LID 0x0b QPN 0x2c004c PSN 0xa1be86
------------------------------------------------------------------
 #bytes #iterations    t_min[usec]    t_max[usec]  t_typical[usec]
      2        1000           1.41           9.97             1.43
      4        1000           1.38           5.31             1.43
      8        1000           1.41           2.78             1.43
     16        1000           1.40           4.01             1.42
     32        1000           1.49           3.67             1.50
     64        1000           1.55           5.20             1.56
    128        1000           1.69           3.13             1.71
    256        1000           2.40           5.72             2.45
    512        1000           2.83           4.13             2.90
   1024        1000           3.28           4.95             3.31
   2048        1000           4.11          11.68             4.14
------------------------------------------------------------------

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知

https://www.zhihu.com/question/31960853/answer/329592768

https://blog.csdn.net/zerotoall/article/details/130530748

© 2018-2024 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

0 人点赞