Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.7. 测试早期 InfiniBand RDMA 操作

注意
这部分只适用于 InfiniBand 设备。由于 iWARP 和 RoCE/IBoE 设备是基于 IP 的设备,因此用户应在配置了 IPoIB 并且设备具有 IP 地址后继续执行有关测试 RDMA 操作的部分。
启用rdma 服务并且启用了 opensm 服务(如果需要)并且安装了适用于特定硬件的适当用户空间库后,应该可以执行用户 spacerdma 操作。libibverbs-utils 软件包中的简单测试程序有助于确定 RDMA 操作是否正常工作。Theibv_devices 程序将显示系统中有哪些设备,sibv_devinfo 命令将提供关于每个设备的详细信息。例如:
~]$ 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_devinfoibstat 命令打印出 port_lid (或基本 lid)和要测试的端口的端口 GUID(假设上述接口的端口 1,port _lid/Base LID2,Port GUID 为 0xf4521403007bba1)。然后,以所需选项开始 ,以专门绑定到要测试的卡和端口,并且指定应该以服务器模式运行。您可以通过传递 -?--help 来查看可用的选项,但在本例中,我们需要 -S--Server 选项,并需要 -C 或 --Ca 和 - P 或 -- Port 绑定到特定卡和端口。注意:此实例中的端口不表示网络端口号,但在使用多端口卡时表示卡上的物理端口号。要使用多端口卡的第二个端口测试与 RDMA 结构的连接,需要告诉 ibping 绑定到卡 的端口 2。当使用单个端口卡或测试卡上的第一个端口时,不需要这个选项。例如:
~]$ ibping -S -C mlx4_1 -P 1
然后,更改到客户端计算机并运行ibping。记下 serveribping 程序绑定到的端口的端口 GUID,或者 serveribping 程序绑定到的端口的本地标识符 (LID)。此外,请注意客户端计算机上哪些卡和端口实际连接到与服务器上绑定至卡和端口相同的网络。例如,如果服务器上第一个网卡的第二个端口已绑定,并且该端口连接到辅助 RDMA 结构,则客户端上将指定需要哪些卡和端口才能连接到该次要结构。旦知道这些内容,即可运行作为客户端的同级程序,并使用服务器上收集的端口 LID 或 GUID 连接到服务器,作为要连接的地址。例如:
~]$ 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 ---
10000 packets transmitted, 10000 received, 0% packet loss, time 769 ms
rtt min/avg/max = 0.027/0.076/0.278 ms
此结果验证结束 RDMA 通信是否适用于用户空间应用程序。
可能会出现以下错误:
~]$ ibv_devinfo
libibverbs: Warning: no userspace device-specific driver found for /sys/class/infiniband_verbs/uverbs0
No IB devices found
此错误表示未安装必要的用户空间库。管理员将需要安装第 第 13.4 节 “InfiniBand 和 RDMA 相关软件包” 节中列出的一个用户空间库(适合其硬件)。在个别情况下,当用户为驱动程序安装错误的 arch 类型或 libibverbs 时会出现这种情况。例如,如果 libibverbs 是 arch x86_64,并且已安装 libmlx4,但类型为 i686,则可能会造成这个错误。
注意
许多示例应用更喜欢使用主机名或地址而不是 LID 来打开服务器和客户端之间的通信。对于这些应用程序,需要先设置 IPoIB,然后才能测试端到端 RDMA 通讯。Theibping 应用程序并不常见,因为它将接受简单的 LID 作为寻址形式,这允许它只是一个简单的测试,消除了测试场景中 IPoIB 寻址可能出现的问题,因此让我们更加孤立地查看简单的 RDMA 通讯是否正常工作。