Linux 环境下 InfiniBand 组网认知

2024-04-26 05:04

本文主要是介绍Linux 环境下 InfiniBand 组网认知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面


  • 工作中遇到,简单整理
  • 博文内容涉及 InfiniBand 简单认知,以及使用 ib_send_*iperf3 对 InfiniBand 组网进行测试 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): 断开连接是指在两个节点之间结束通信连接的过程,使得每个适配器和端口可以重新分配给其他节点。

常用命令

当前测试系统

root@liruilongs.github.io:~# hostnamectlStatic hostname: liruilongs.github.ioIcon name: computer-desktopChassis: desktopMachine ID: 9b970dc65020411ab022b51d5d17e883Boot ID: 835e69ea4f4d4384aa317e7875537b44
Operating System: Ubuntu 22.04.4 LTSKernel: Linux 5.15.0-105-genericArchitecture: x86-64Hardware Vendor: SupermicroHardware Model: X12DAi-N6
root@liruilongs.github.io:~#

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

root@liruilongs.github.io:~# lshw -c network | grep -i -C 3 ibsvendor: Mellanox Technologiesphysical id: 0bus info: pci@0000:b1:00.0logical name: ibs106f0version: 00serial: 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00width: 64 bits
--vendor: Mellanox Technologiesphysical id: 0.1bus info: pci@0000:b1:00.1logical name: ibs106f1version: 00serial: 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00width: 64 bits
root@liruilongs.github.io:~#

ibstat

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

[root@toolbox ~]# ibstat
CA 'mlx4_0'CA type: MT4099Number of ports: 2Firmware version: 2.42.5000Hardware version: 1Node GUID: 0x0002c903003fc5e0System image GUID: 0x0002c903003fc5e3Port 1:State: ActivePhysical state: LinkUpRate: 40Base lid: 45LMC: 0SM lid: 1Capability mask: 0x02514868Port GUID: 0x0002c903003fc5e1Link layer: InfiniBandPort 2:State: ActivePhysical state: LinkUpRate: 40Base lid: 46LMC: 0SM lid: 1Capability mask: 0x02514868Port GUID: 0x0002c903003fc5e2Link 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 检测当前集群下物理链路的健康情况

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 beused 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.

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

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:~#

加载完成再次运行命令

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 beused 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 WarningsBad GUIDs/LIDs Check                     0      0Link State Active Check                  0      0General Devices Info Report              0      0Performance Counters Report              0      0Partitions Check                         0      0IPoIB Subnets Check                      0      1Please see /var/cache/ibutils/ibdiagnet.log for complete log
-----------------------------------------------------------------I- Done. Run time was 5 seconds.
root@liruilongs.github.io:~#

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

[root@toolbox ~]# ibnetdiscover
#
# Topology file: generated on Fri Apr 28 11:09:33 2023
#
# Initiated from node 0002c903003fc5e0 port 0002c903003fc5e1vendid=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 4xEDRvendid=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)。

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

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服务器,并等待客户端连接请求。

[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
- - - - - - - - - - - - - - - - - - - - - - - - -

客户端

[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                  receiveriperf 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信息

root@liruilongs.github.io:~# ip a
...................................
7: ibs106f0: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256link/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:ffaltname ibp177s0f0
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256link/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:ffaltname ibp177s0f1

给IB卡配置IP

root@liruilongs.github.io:~# ip address add 10.5.200.177/24 dev ibs106f0
root@liruilongs.github.io:~# ip link set ibs106f0 up

确认配置

root@liruilongs.github.io:~# ip a
................................................
7: ibs106f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 256link/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:ffaltname ibp177s0f0inet 10.5.200.177/24 scope global ibs106f0valid_lft forever preferred_lft foreverinet6 fe80::7efe:9003:29:227a/64 scope link tentativevalid_lft forever preferred_lft forever
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256link/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:ffaltname ibp177s0f1

做 ping 测试

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 测试

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端执行

[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 messagelocal address:  LID 0x0b, QPN 0x28004c, PSN 0xfaa100remote 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端执行

[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 messagelocal address:  LID 0x02, QPN 0x70004b, PSN 0xc14da8remote address: LID 0x0b, QPN 0x28004c, PSN 0xfaa100
Mtu : 2048
------------------------------------------------------------------#bytes #iterations    BW peak[MB/sec]    BW average[MB/sec]2        1000               7.51                  7.214        1000              15.29                 14.198        1000              30.66                 30.4516        1000              60.33                 59.9532        1000             119.53                113.2064        1000             233.75                233.16128        1000             414.95                413.64256        1000             794.90                698.20512        1000            1600.46                774.671024        1000            2011.81                804.292048        1000            2923.29               2919.91
------------------------------------------------------------------

延时测试 ib_send_lat, 在server端执行

[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 : UDlocal address: LID 0x0b QPN 0x2c004c PSN 0xa1be86remote 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.434        1000           1.41           3.84             1.438        1000           1.41           2.75             1.4316        1000           1.41           3.01             1.4232        1000           1.49           3.92             1.5064        1000           1.55           3.96             1.57128        1000           1.70           2.58             1.71256        1000           2.41           5.73             2.45512        1000           2.82           4.07             2.901024        1000           3.28           4.95             3.312048        1000           4.11          11.74             4.14
------------------------------------------------------------------

在client端执行

[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 : UDlocal address: LID 0x02 QPN 0x74004b PSN 0x6ea837remote 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.434        1000           1.38           5.31             1.438        1000           1.41           2.78             1.4316        1000           1.40           4.01             1.4232        1000           1.49           3.67             1.5064        1000           1.55           5.20             1.56128        1000           1.69           3.13             1.71256        1000           2.40           5.72             2.45512        1000           2.83           4.13             2.901024        1000           3.28           4.95             3.312048        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)

这篇关于Linux 环境下 InfiniBand 组网认知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936764

相关文章

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li