13.7. 测试早期 InfiniBand RDMA 操作
注意
这部分只适用于 InfiniBand 设备。由于 iWARP 和 RoCE/IBoE 设备是基于
IP
的设备,因此用户应在配置了 IPoIB 并且设备具有 IP 地址后继续执行有关测试
RDMA 操作的部分。
启用rdma
服务并且启用了 opensm 服务(如果需要)并且安装了适用于特定硬件的适当用户空间库后,应该可以执行用户 spacerdma
操作。libibverbs-utils 软件包中的简单测试程序有助于确定 RDMA 操作是否正常工作。Theibv_devices 程序将显示系统中有哪些设备,sibv_devinfo 命令将提供关于每个设备的详细信息。例如:
ibv_devices ibv_devinfo -d mlx4_1 ibstat mlx4_1
~]$ ibv_devices
device node GUID
------ ----------------
mlx4_0 0002c903003178f0
mlx4_1 f4521403007bcba0
~]$ ibv_devinfo -d mlx4_1
hca_id: mlx4_1
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
~]$ ibstat mlx4_1
CA 'mlx4_1'
CA type: MT4099
Number of ports: 2
Firmware version: 2.30.8000
Hardware version: 0
Node GUID: 0xf4521403007bcba0
System image GUID: 0xf4521403007bcba3
Port 1:
State: Active
Physical state: LinkUp
Rate: 56
Base lid: 2
LMC: 1
SM lid: 2
Capability mask: 0x0251486a
Port GUID: 0xf4521403007bcba1
Link layer: InfiniBand
Port 2:
State: Active
Physical state: LinkUp
Rate: 40
Base lid: 0
LMC: 0
SM lid: 0
Capability mask: 0x04010000
Port GUID: 0xf65214fffe7bcba2
Link layer: Ethernet
The ibv_devinfo and ibstat 命令输出的信息略有不同(如端口 MTU 存在 in ibv_devinfo 但没有 in ibstat 输出,端口 GUID 存在 in ibstat 输出,但不存在 in ibv_devinfo 输出),另一些名称会有所不同(例如: 基本 本地标识符( LID)in ibstat 输出与
port_lid
输出 of ibv_devinfo相同。
简单的 ping 程序(如从 infiniband-diags 软件包进行对比)可用于测试 RDMA 连接。ibping 程序使用客户端-服务器模型。您必须首先在一台机器上启动同级服务器 ,然后作为客户端在另一台机器上运行并告诉它连接到 同级服务器。由于我们要测试基础 RDMA 功能,因此我们需要使用特定于 RDMA 的地址解析方法,而不是使用
IP 地址来指定服务器
。
在服务器计算机上,用户可以使用 the ibv_devinfo 和 ibstat 命令打印出
Copy to Clipboard
Copied!
port_lid
(或基本 lid)和要测试的端口的端口 GUID(假设上述接口的端口 1,port _lid
/Base LID
为 2
,Port GUID 为 0xf4521403007bba1
)。然后,以所需选项开始 ,以专门绑定到要测试的卡和端口,并且指定应该以服务器模式运行。您可以通过传递 -?
或 --help
来查看可用的选项,但在本例中,我们需要 -S
或 --Server
选项,并需要 -C 或 --Ca 和 -
P
或 --
Port
绑定到特定卡和端口。注意:此实例中的端口不表示网络端口号,但在使用多端口卡时表示卡上的物理端口号。要使用多端口卡的第二个端口测试与 RDMA 结构的连接,需要告诉 ibping 绑定到卡 上
的端口 2。当使用单个端口卡或测试卡上的第一个端口时,不需要这个选项。例如:
ibping -S -C mlx4_1 -P 1
~]$ ibping -S -C mlx4_1 -P 1
然后,更改到客户端计算机并运行ibping。记下 serveribping 程序绑定到的端口的端口 GUID,或者 serveribping 程序绑定到的端口的本地标识符 (LID)。此外,请注意客户端计算机上哪些卡和端口实际连接到与服务器上绑定至卡和端口相同的网络。例如,如果服务器上第一个网卡的第二个端口已绑定,并且该端口连接到辅助 RDMA 结构,则客户端上将指定需要哪些卡和端口才能连接到该次要结构。旦知道这些内容,即可运行作为客户端的同级程序,并使用服务器上收集的端口 LID 或 GUID 连接到服务器,作为要连接的地址。例如:
Copy to Clipboard
Copied!
或者
Copy to Clipboard
Copied!
此结果验证结束 RDMA 通信是否适用于用户空间应用程序。
ibping -c 10000 -f -C mlx4_0 -P 1 -L 2
~]$ ibping -c 10000 -f -C mlx4_0 -P 1 -L 2
--- rdma-host.example.com.(none) (Lid 2) ibping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 816 ms
rtt min/avg/max = 0.032/0.081/0.446 ms
ibping -c 10000 -f -C mlx4_0 -P 1 -G 0xf4521403007bcba1 \ --- rdma-host.example.com.(none) (Lid 2) ibping statistics ---
~]$ ibping -c 10000 -f -C mlx4_0 -P 1 -G 0xf4521403007bcba1 \
--- rdma-host.example.com.(none) (Lid 2) ibping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 769 ms
rtt min/avg/max = 0.027/0.076/0.278 ms
可能会出现以下错误:
Copy to Clipboard
Copied!
此错误表示未安装必要的用户空间库。管理员将需要安装第 第 13.4 节 “InfiniBand 和 RDMA 相关软件包” 节中列出的一个用户空间库(适合其硬件)。在个别情况下,当用户为驱动程序安装错误的 arch 类型或 libibverbs 时会出现这种情况。例如,如果 libibverbs 是 arch
ibv_devinfo
~]$ ibv_devinfo
libibverbs: Warning: no userspace device-specific driver found for /sys/class/infiniband_verbs/uverbs0
No IB devices found
x86_64
,并且已安装 libmlx4,但类型为 i686
,则可能会造成这个错误。
注意
许多示例应用更喜欢使用主机名或地址而不是 LID 来打开服务器和客户端之间的通信。对于这些应用程序,需要先设置 IPoIB,然后才能测试端到端 RDMA 通讯。Theibping 应用程序并不常见,因为它将接受简单的 LID 作为寻址形式,这允许它只是一个简单的测试,消除了测试场景中 IPoIB 寻址可能出现的问题,因此让我们更加孤立地查看简单的 RDMA 通讯是否正常工作。