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-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta